23Авг/100
MySQL: регистрозависимое сравнение текстовых полей
Столкнулся с определенной фичей в MySQL, незнание которой ненадолго поставило в тупик, заставив выискивать ошибку.
Есть таблица с полем varchar и collation типа cp1251_general_cs (регистрозависимое)
CREATE TABLE `test_space` ( `id` INT(10) NOT NULL AUTO_INCREMENT, `text_space` VARCHAR(255) NOT NULL COLLATE 'cp1251_general_cs', PRIMARY KEY (`id`) ) COLLATE='cp1251_general_cs' ENGINE=MyISAM
Запросы
select * from test_space where `text_space`='text'
и
select * from test_space where `text_space`='text '
возвращают один и тот же результат, т.е. MySQL при операции сравнения для регистрозависимых полей отбрасывает пробелы в конце строки.
И если, например, по этому полю есть UNIQUE индекс, попытка вставить строку 'text ' в таблицу, где имеется строка с записью, 'text' даст ошибку "Duplicate entry...".