我有一个表编码在latin1
中,并整理latin1_bin
。
在我的表中有一列类型为“text”的comments
,您知道该列继承了表的编码和排序规则,但从现在起,我应该将其更改为utf8
和utf8_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
拿回旧的副本。