0

当我们添加一个新表时,我们犯了一个错误:一个字段是 varchar(255),但我们必须编写连接查询。所以我们改变表来制作一个char(6)。

我的问题是: MySQL 在这种情况下是什么?它修剪对吗?

4

3 回答 3

3

与其担心 MySQL 做什么或不做什么,为什么不在更改之前自己转换数据。

例如

UPDATE YourTable
SET YourField = LEFT(YourField,6);

ALTER TABLE YourTable MODIFY COLUMN YourField Char(6)

您应该注意,如果您的列数据太长,假设启用严格的 SQL 模式,它不会让您进行更改,请参阅 Shef 的完整答案

于 2011-07-21T15:23:14.393 回答
1

它将尝试转换格式。在您的情况下,该列是字符串类型,因此如果未启用严格的 SQL 模式,它将截断该值。

当您使用 CHANGE 或 MODIFY 更改数据类型时,MySQL 会尝试尽可能地将现有列值转换为新类型。

警告 此转换可能会导致数据更改。例如,如果您缩短字符串列,则值可能会被截断。如果转换为新数据类型会导致数据丢失,为防止操作成功,请在使用 ALTER TABLE 之前启用严格的 SQL 模式(请参阅第 5.1.6 节,“服务器 SQL 模式”)。

阅读页面五分之二处的罚款警告。

于 2011-07-21T15:28:33.183 回答
0

如果在任何情况下您会丢失数据(例如,一行有一个字段的文本长度超过六个字符的条目),MySQL 甚至不会让您更改表,因此您最好按照您认为合适的方式转换数据.

于 2011-07-21T15:27:25.723 回答