mysql - 当非法减少长度时,定义为 varchar 的列上的行中的内容会发生什么情况?

标签 mysql size varchar reduce

这当然是一个愚蠢的问题,但我不得不问::-) 假设一个类型为 varchar 且长度为 255 的列,并且存储在该列的一行中的最长字符串的长度为 200。如果我更改了这些列,会发生什么情况长度小于 200?字符串会全部被“切断”吗?

最佳答案

默认情况下,它允许您更改列,它会截断长于新长度的字符串,并且会生成警告。

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 mode STRICT_ALL_TABLESSTRICT_TRANS_TABLES,则警告变为错误并且 ALTER 将失败。

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

关于mysql - 当非法减少长度时,定义为 varchar 的列上的行中的内容会发生什么情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6920200/

相关文章:

mysql - Globalize3:运行 "Mysql2::Error: Unknown database"任务时为 'rake db:seed'

java - Guava CacheBuilder 最大尺寸

javascript - 在javascript中计算字母大小

mysql - 有没有办法让mysql选择varchar类型作为日期?

删除字符ID后的Mysql触发器

mysql - 短信/通知 MySQL类型

php - 插入多个复选框选择的值

mysql - 比较 MySQL 中的日期

file - 如何找到某些指定文件的大小?

mysql - 在查询中添加第三个表会减慢结果时间