2013-09-18 4 views
5

Ключ MySQL UNI в текстовом столбце, по-видимому, рассматривает только первые 255 символов для проверки на уникальность. Если у меня есть две строки, начинающиеся с тех же 255 символов, они не могут быть добавлены в эту таблицу.Текстовый индекс MySQL проверяет только 256 символов?

Есть ли способ преодолеть это?

Причина, по которой я вводил это поле, заключается в обеспечении уникальности независимо от запроса (которые не под моим контролем), а не для производительности.

+0

Какой тип ключа UNI? Если varchar, сколько длины вы устанавливаете? – david

+0

Я думал, что вы не можете создать индекс в полях> 255 символов. –

+0

Можете ли вы показать нам оператор CREATE TABLE –

ответ

2

Вы не можете индексировать текстовые поля в MySQL с длиной ключа более 255 symbols before MySQL 4.1.2/1000 bytes (767 for InnoDB) for higher versions - и вы не можете преодолеть это изначально.

Самым простым решением является оценка md5 хэш и хранить его в другом столбце, а затем создать уникальный индекс по ней и создать triggerbefore insert & before update, который будет вставлять md5 автоматически. Если вы используете сервер MySQL 4.x - тогда вам нужно будет справиться с этим самостоятельно (поскольку никакой триггер не будет доступен)

+0

Я принял этот ответ, потому что это имело смысл, но в конце концов это было не то, что я сделал. – alexloh

+0

Фактически предел составляет 1000 байт, а количество символов, которое это переводит, зависит от кодировки. Когда я использую значение по умолчанию UTF-8, ограничение составляет 333 символа. – alexloh

Смежные вопросы