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
чувствительным к регистру?
Ответы
Ответ 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.
Надеюсь, что это поможет.