1

我正在尝试将我的数据库上表中的特定列从带有排序规则 latin1_swedish_ci 的 latin1 字符集转换为带有排序规则 utf8_unicode_ci 的 utf8。

COLUMN:描述,类型:longtext,默认不为空

我在列上尝试了以下命令:

ALTER TABLE sample MODIFY description LONGBLOB NOT NULL ;

ALTER TABLE sample MODIFY description LONGTEXT CHARACTER SET utf8 NOT NULL COLLATE utf8_unicode_ci;

我还尝试更改编码而不先更改为二进制。但是这些字符最终被服务器错误地重新编码。

并且不断收到有关某些字符的错误:

错误代码:1366。不正确的字符串值:第 803 行的列 'longDesc' 的 '\x92t hav...'

我表中的某些字符似乎没有正确转换。

我该如何解决这个问题?

4

1 回答 1

1

\x92 表示您现在在表中有 latin1 。第二个 ALTER声称这些字节采用 utf8 编码。因此,错误消息。

案例 1:您需要将 LONGTEXT 更改为 utf8,因为您计划添加包含无法以 latin1 编码的文本的行。

对于这种情况,ALTER TABLE sample CONVERT TO CHARACTER SET utf8;-- 转换表中的所有 CHAR/TEXT 列。

ALTER TABLE sample MODIFY description ... CHARACTER SET utf8;-- 转换一列。

案例 2:系统的其余部分正在考虑 utf8 并被此列混淆。

好吧,我不认为它是混乱的。转换会根据需要进行。

于 2015-02-24T00:02:26.087 回答