SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 30.01.2013 08:41:11

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Встроенный в insert-запрос trim?..

Доброго дня smile.

Коллеги, поделитесь соображениями плиз.

Код:

mysql> select version();
+------------+
| version()  |
+------------+
| 5.1.52-log |
+------------+
1 row in set (0.00 sec)

Код:

mysql> create table uniq_test( val  varchar(255), unique key val_key(val) );
Query OK, 0 rows affected (0.26 sec)

mysql> insert into uniq_test value('');
Query OK, 1 row affected (0.00 sec)

mysql> insert into uniq_test value('');
ERROR 1062 (23000): Duplicate entry '' for key 'val_key'
mysql> insert into uniq_test value(' ');
ERROR 1062 (23000): Duplicate entry ' ' for key 'val_key'

Первая ошибка - логична и понятна. Но когда я пытаюсь вставить не пустую строку, а пробел - тут непонятно - ведь это же разные строки?

Код:

mysql> insert into uniq_test value(' f ');
Query OK, 1 row affected (0.00 sec)

mysql> insert into uniq_test value(' f  ');
ERROR 1062 (23000): Duplicate entry ' f  ' for key 'val_key'

Опять же - строка, где после f два пробела отличается от строки, где после f один пробел.
В чем дело может быть?


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#2 30.01.2013 13:52:11

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Встроенный в insert-запрос trim?..

Для varchar пробелы сохраняются, в отличие от CHAR.

http://dev.mysql.com/doc/refman/5.5/en/char.html
VARCHAR values are not padded when they are stored. Trailing spaces are retained when values are stored and retrieved, in conformance with standard SQL.

При этом индекс строится на значении CHAR(255), которое получается из VARCHAR дополнением пробелами до нужной длины. Значения разные, но для индекса они становятся одинаковыми.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson