MySQL — пробел в конце varchar

Не знаю — многие ли знают о этой документированной фиче — столкнулись с ней только сегодня.

Произвольная таблица test имеет поле text типа VARCHAR 255, для чистоты эксперимента кодировка UTF8_BIN.

INSERT INTO test SET text='тест';
INSERT INTO test SET text='тест '; — на конце пробел

SELECT * FROM test WHERE text='тест'; — выберет нам оба значения.

Лезем в документацию —

Таким образом, для активного использования остаются 3 поля. Они отличаются:

1. Использованием charset — т.е. наличием перекодировки в процессе ввода/вывода в зависимости от charset таблицы/колонки/юзера.
2. Учитыванием регистра при сравнении, сортировке и проверок на уникальность поля.
3. Игнорированием конечных пробелов при сравнении, сортировке и проверках на уникальность поля.

Тип поля Максимальный размер Поддержка charset Учитывает регистр Игнорирует конечный пробел
VARCHAR 65535 + +
VARCHAR BINARY 65535 + + +
VARBINARY 65535 +

Комментировать

Войдите чтобы оставить комментарий.