SQL unique varchar case sensitivity question

Próbuję wypełnić tabelę SQL listą słów. Sama tabela jest dość prosta:

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

Problem, na który wpadam jest taki: kiedy wykonuję następujące wstawki z powrotem do tyłu

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

Druga wstawka nie powiodła się z naruszeniem ograniczeń ("Duplicate entry 'Seth' for key 'WORD'").

Jak sprawić, by ograniczenie UNIQUE na WORD uwzględniało wielkość liter?

Author: OMG Ponies, 2011-06-23

3 answers

Wygląda na to, że mysql jest domyślnie niewrażliwe na wielkość liter:

Prawdopodobnie musisz utworzyć kolumnę z uwzględniającą wielkość liter kolacją (np. utf8_bin):

CREATE TABLE WORDS (
    ID BIGINT AUTO_INCREMENT, 
    WORD VARCHAR(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL UNIQUE, 
    PRIMARY KEY(ID)
);
 79
Author: Bill Brasky,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-18 18:42:52

Domyślnie MySQL ignoruje różnice w wielkości liter i spacjach końcowych na varchar.

Jeśli potrzebujesz rozróżniać wielkość liter, możesz zmienić tabelę na varchar(...) binary.

Użyj show create table, aby lepiej zrozumieć, w jaki sposób MySQL konwertuje to na pełną notację.

Jeśli musisz zwracać uwagę na spacje końcowe, a także uwzględniać wielkość liter, użyj varbinary zamiast varchar.

 6
Author: George Bailey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-01 16:14:53

Zrobiłem swój unikalny klucz varchar (1000). Zadziałało.

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

Dla wyjaśnienia nie próbowałem między 1001 a 1099.

Mam nadzieję, że to pomoże.

 0
Author: suleman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-06 02:25:57