Что происходит с содержимым внутри строк в столбцах, определенных как varchar, когда незаконно сокращается длина? - PullRequest
3 голосов
/ 03 августа 2011

Конечно, нубистский вопрос, но я должен его задать: :-) Предполагается, что столбец типа varchar и длиной 255 и самая длинная строка, хранящаяся в строке в этом столбце, должны иметь длину 200. Что произойдет, если я изменил столбцыдлина до 200?Струны ли все струны?

1 Ответ

3 голосов
/ 03 августа 2011

По умолчанию это позволит вам изменить столбец, обрезает строки длиннее новой длины и выдаст предупреждение.

mysql> create table t (v varchar(20));
Query OK, 0 rows affected (0.06 sec)

mysql> insert into t values ('12345678901234567890');
Query OK, 1 row affected (0.00 sec)

mysql> alter table t modify column v varchar(10);
Query OK, 1 row affected, 1 warning (0.04 sec)
Records: 1  Duplicates: 0  Warnings: 1

mysql> show warnings;
+---------+------+----------------------------------------+
| Level   | Code | Message                                |
+---------+------+----------------------------------------+
| Warning | 1265 | Data truncated for column 'v' at row 1 | 
+---------+------+----------------------------------------+
1 row in set (0.00 sec)

mysql> select * from t;
+------------+
| v          |
+------------+
| 1234567890 | 
+------------+
1 row in set (0.00 sec)

Если у вас установлен режим SQL STRICT_ALL_TABLES или STRICT_TRANS_TABLES, предупреждение становится ошибкой, и ALTER не срабатывает.

mysql> alter table t modify column v varchar(10);
ERROR 1265 (01000): Data truncated for column 'v' at row 1
...