SQL уникальный вопрос чувствительности к регистру - PullRequest
53 голосов
/ 23 июня 2011

Я пытаюсь заполнить таблицу SQL списком слов.Сама таблица довольно проста:

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

Проблема, с которой я сталкиваюсь, заключается в следующем: когда я делаю следующие вставки вплотную

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

Вторая вставка завершается неудачно снарушение ограничения («Дублирующая запись seth для ключа« WORD »»).

Как получить ограничение UNIQUE для WORD, чувствительное к регистру?

Ответы [ 3 ]

85 голосов
/ 23 июня 2011

Похоже, что mysql без учета регистра по умолчанию :

Вам, вероятно, нужно создать столбец с сортировкой с учетом регистра (например, utf8_bin):

CREATE TABLE WORDS (
    ID BIGINT AUTO_INCREMENT, 
    WORD VARCHAR(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL UNIQUE, 
    PRIMARY KEY(ID)
);
7 голосов
/ 01 июня 2015

По умолчанию MySQL игнорирует различия в регистре и конце пробелов в varchar.

Если вам нужно, чтобы он был чувствительным к регистру, вы можете изменить таблицу на varchar(...) binary.

Используйте show create table, чтобы лучше понять, как MySQL преобразует это в полную запись.

Если вам нужно обратить внимание на конечные пробелы, а также учитывать регистр, используйте varbinary вместо varchar.

0 голосов
/ 06 октября 2017

Я сделал свой УНИКАЛЬНЫЙ ключ varchar (1000). Это сработало.

После некоторых проб и ошибок я обнаружил, что все, что больше или равно 1100, varchar потерпит неудачу.

Чтобы уточнить, я не пробовал между 1001 и 1099.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...