当我们添加一个新表时,我们犯了一个错误:一个字段是一个varchar(255),但我们必须编写连接查询。 所以我们改变表来制作一个char(6)。
我的问题是:在这种情况下MySQL是什么? 它修剪得好吗?
答案 0 :(得分:3)
不要担心MySQL做什么或不做什么,为什么不在改变之前自己转换数据。
e.g。
UPDATE YourTable
SET YourField = LEFT(YourField,6);
ALTER TABLE YourTable MODIFY COLUMN YourField Char(6)
您应该注意,如果您的列数据太长,则不允许您执行更改,假设启用严格SQL模式,请参阅Shef的完整答案
答案 1 :(得分:1)
它会尝试转换格式。在您的情况下,该列是字符串类型,因此如果未启用严格SQL模式,它将截断该值。
使用CHANGE或MODIFY更改数据类型时,MySQL会尝试 尽可能将现有列值转换为新类型。
警告此转换可能会导致数据更改。例如, 如果缩短字符串列,则可能会截断值。阻止 转换为新数据类型时成功的操作 会导致数据丢失,在使用前启用严格的SQL模式 ALTER TABLE(请参见第5.1.6节“服务器SQL模式”)。
在页面的五分之二处阅读罚款warning。
答案 2 :(得分:0)
如果有任何情况你会丢失数据(例如,一行有一个字段长度超过六个字符的条目),MySQL甚至不允许你改变表格,所以你最好转换数据如何你认为合适。