Подтвердить что ты не робот

SQL уникальный вопрос чувствительности к регистру varchar

Я пытаюсь заполнить таблицу 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 чувствительным к регистру?

4b9b3361

Ответ 1

Похоже, что 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)
);

Ответ 2

По умолчанию MySQL игнорирует различия в case и trailing пробелы на varchar.

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

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

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

Ответ 3

У меня такая же проблема, и я исправляю ее с помощью

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

Ответ 4

Я сделал свой UNIQUE ключ varchar (1000). Это сработало.

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

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

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