当我们添加一个新表时,我们犯了一个错误:一个字段是varchar(255),但我们必须编写连接查询。所以我们修改table来生成一个char(6)。
我的问题是: MySQL在这种情况下是什么?它可以修剪,对吗?
发布于 2011-07-21 23:23:14
与其担心MySQL做了什么或不做什么,为什么不在更改之前自己转换数据。
例如:
UPDATE YourTable
SET YourField = LEFT(YourField,6);
ALTER TABLE YourTable MODIFY COLUMN YourField Char(6)您应该注意到,如果您的列数据太长,它将不允许您执行alter操作,假设enable strict SQL mode请参阅Shef的完整答案
发布于 2011-07-21 23:28:33
它将尝试转换格式。在您的示例中,该列是字符串类型,因此如果未启用strict SQL模式,它将截断值。
使用change或MODIFY更改数据类型时,MySQL会尝试将现有列值尽可能地转换为新类型。
警告此转换可能会导致数据更改。例如,如果缩短字符串列,值可能会被截断。如果转换到新数据类型会导致数据丢失,为了防止操作成功,请在使用ALTER TABLE之前启用strict模式(请参阅第5.1.6节“服务器SQL模式”)。
将精美的warning向下阅读五分之二的页面。
发布于 2011-07-21 23:27:26
如果有数据丢失的情况,MySQL甚至不允许你修改表格(例如,一行有一个字段文本长度超过六个字符的条目),所以你最好按照你认为合适的方式转换数据。
https://stackoverflow.com/questions/6778440
复制相似问题