MySQL / 4. Работа со строками

Сохранение замыкающих пробелов в строковых столбцах

Задача
MySQL удаляет из строк замыкающие пробелы, а вы хотели бы их сохранить.

Решение
Используйте другой тип столбца.

Обсуждение
Если вы сохраняете в базе данных строковое значение, содержащее замыкающие пробелы, то при извлечении значения можете обнаружить, что они исчезли. Обычно MySQL именно так ведет себя по отношению к столбцам CHAR и VARCHAR; сервер возвращает из столбцов двух этих типов значения без замыкающих пробелов. Если вам нужно сохранить замыкающие пробелы, используйте столбцы типа TEXT или BLOB (тип TEXT не чувствителен к регистру, а BLOB чувствителен). Рассмотрим различия в поведении столбцов  VARCHAR и TEXT на примере:

mysql> CREATE TABLE t (c VARCHAR(255));
mysql> INSERT INTO t (c) VALUES('abc       ');
mysql> SELECT c, LENGTH(c) FROM t;

+----- + -------------+
| c      | LENGTH(c) |
+ -----+------------- +
| abc  |               3 |
+----- +------------- +

mysql> DROP TABLE t;
mysql> CREATE TABLE t (c TEXT);
mysql> INSERT INTO t (c) VALUES('abc       ');
mysql> SELECT c, LENGTH(c) FROM t;

+-------- +------------- +
| c          | LENGTH(c) |
+-------- +------------- +
| abc      |              10 |
+-------- +------------- +

В следующей версии MySQL планируется ввод типа VARCHAR, сохраняющего
замыкающие пробелы.

Статьи по MySQL на эту тему:

FULLTEXT поиск и короткие слова
Буквальная интерпретация метасимволов в шаблонах
Включение и исключение слов из FULLTEXT - поиска
Поиск по образцу с помощью регулярных выражений
Поиск по образцу с помощью шаблонов SQL

Вернуться в раздел: MySQL / 4. Работа со строками