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 | — | + | — |