我有一个表编码在latin1中,并整理latin1_bin
在我的表中有一列类型为“text”的comments,您知道该列继承了表的编码和排序规则,但从现在起,我应该将其更改为utf8utf8_general_ci,因为我开始在comments中存储特殊字符。
如果我使用下面这样的命令,会不会造成负面影响?

alter table notebooks modify comments text CHARACTER SET utf8 COLLATE utf8_general_ci;

谢谢你的回答。

最佳答案

我认为ALTER会破坏现有的文本。
同时,…你的名字看起来像中国人,所以我猜你想储存汉字?在这种情况下,您应该使用utf8mb4,而不仅仅是utf8。这是因为有些汉字需要4个字节(而且不在unicode-bmp中)。
我相信你需要两个步骤:

ALTER TABLE notebooks MODIFY comments BLOB;
ALTER TABLE notebooks MODIFY comments TEXT
          CHARACTER SET utf8mb4  COLLATE utf8mb4_general_520_ci;

否则Latin1字符将被“转换”为UT8。但如果你在专栏里真的有中文,你就没有拉丁语。上面的两步alter(1)关闭字符集的任何知识,并且(2)确定字节是真正的utf8mb4编码的。
为了更安全,首先
RENAME TABLE notebooks TO old;
CREATE TABLE notebooks LIKE old;
INSERT INTO notebooks SELECT * FROM old;

然后做两个修改并测试结果。如果有麻烦,你可以RENAME拿回旧的副本。

09-19 18:00