2011-06-23 15 views
44

Próbuję wypełnić tabelę SQL listą słów. Tabela sama to dość prosta:SQL unikalne pytanie o wielkość litery Varchar

CREATE TABLE WORDS(
    ID BIGINT AUTO_INCREMENT, 
    WORD VARCHAR(128) NOT NULL UNIQUE, 
    PRIMARY KEY(ID) 
); 

Problem używam do jest taka: kiedy wykonać następujące wkładki z powrotem do tyłu

INSERT INTO WORDS(WORD) VALUES('Seth'); 
INSERT INTO WORDS(WORD) VALUES('seth'); 

Druga wkładka nie powiedzie się z powodu naruszenia więzów (” Zduplikowany wpis "seth" dla klucza "WORD" ").

Jak rozróżniać wielkość liter w WORD?

Odpowiedz

72

Wygląda mysql jest case insensitive by default:

Prawdopodobnie trzeba utworzyć kolumnę z wrażliwym na sprawy zestawień (np utf8_cs):

CREATE TABLE WORDS (
    ID BIGINT AUTO_INCREMENT, 
    WORD VARCHAR(128) CHARACTER SET utf8 COLLATE utf8_cs NOT NULL UNIQUE, 
    PRIMARY KEY(ID) 
); 
+26

To się udało. Dzięki. Dla każdego, kto znajdzie to pytanie później, musiałem użyć sortowania "utf8_bin", ponieważ mysql nie miał "utf8_cs". – Seth

+0

Dzięki @Seth, to było pomocne wraz z informacją Billa, utf8_bin zastosował się do mojej sytuacji, a także – groovenectar

+1

# 1273 - Nieznane zestawianie: 'utf8_cs' –

6

Domyślnie MySQL ignoruje różnice w przypadku i spacje na varchar .

Jeśli chcesz, aby wielkość liter była rozróżniana, możesz zmienić tabelę na varchar(...) binary.

Użyj show create table, aby lepiej zrozumieć, w jaki sposób MySQL konwertuje to do pełnej notacji.

Jeśli musisz zwracać uwagę na spacje końcowe oraz rozróżniać wielkie i małe litery, użyj varbinary zamiast varchar.

2

mam ten sam problem i rozwiązać go z:

CREATE TABLE WORDS(
    ID BIGINT AUTO_INCREMENT, 
    WORD VARCHAR(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL UNIQUE, 
    PRIMARY KEY(ID) 
); 
1

zrobiłem mój unikalny klucz varchar (1000). Zadziałało.

Po kilku próbach i błędach znalazłem coś większego niż lub równego 1100 varcharowi.

celu wyjaśnienia nie próbowałem od 1001 do 1099.

nadzieję, że to pomaga.