当然是一个愚蠢的问题,但我要问::-) 假设一列类型为 varchar,长度为 255,并且在该列的一行中存储的最长字符串的长度为 200。如果我将列长度更改为更少,会发生什么情况然后200?琴弦都会被“剪断”吗?
问问题
1017 次
1 回答
3
默认情况下,它将允许您更改列,它将截断比新长度更长的字符串,并且会生成警告。
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
于 2011-08-03T00:33:09.597 回答