开发者

What happen's to content inside in rows on columns defined as varchar, when illegally reduced length?

开发者 https://www.devze.com 2023-03-24 14:25 出处:网络
Certainly a noobish question, but I got to ask: :-) Assuming a column of type varchar and length 255 and the longest string stored in a row at this开发者_如何学编程 column shold have length 200. What

Certainly a noobish question, but I got to ask: :-) Assuming a column of type varchar and length 255 and the longest string stored in a row at this开发者_如何学编程 column shold have length 200. What happens, if I altered the columns length to less then 200? Would the strings all get "cut"?


By default, it will allow you to alter the column, it will truncate strings longer than the new length, and it will generate a warning.

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)

If you have the SQL mode STRICT_ALL_TABLES or STRICT_TRANS_TABLES set, the warning becomes an error and the ALTER will fail.

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

精彩评论

暂无评论...
验证码 换一张
取 消