如何修复 mysql 数据编码
How to fix mysql data encoding
我正在处理一个数据库,该数据库使用 latin1
字符集编码(latini_swedish_ci
归类)保存名称,但名称是波斯语。
似乎有人将 table 排序规则更改为 utf8
(utf8_bin
) 但数据仍然是这样的:
我想知道如何修复这个值。
我更改了 table 排序规则和 DB
排序规则,但我仍然有这种价值观。
任何帮助将不胜感激。
提前致谢
更改为 utf8_unicode_ci
(要更改 table 的默认字符集和排序规则,包括现有列的字符集和排序规则 - convert to - 位于此处关键部分)
alter table <some_table> convert to character set utf8 collate utf8_unicode_ci;
_ci
后缀表示排序和比较不区分大小写。所以这应该不是问题。
UTF-8 是 Unicode 字符集的编码,它应该支持世界上几乎所有语言。
唯一的区别在于对结果进行排序,不同的字母在其他语言(重音符号、变音符号等)中可能有不同的顺序。例如,将 a 与 ä 进行比较可能在另一个排序规则中表现不同。
您能否为我们添加一个带有角色的名字 - 仅在图像中使用名字很难尝试不同的东西。
看起来你有
- 客户端中的 utf8 编码字节,并且
SET NAMES latin1
(或同等学历),以及
CHARACTER SET latin1
在目标列上。
清理 table 的 "fix" 是执行 2 步 ALTER described here,其中涉及
ALTER TABLE Tbl MODIFY COLUMN col VARBINARY(...) ...;
ALTER TABLE Tbl MODIFY COLUMN col VARCHAR(...) ... CHARACTER SET utf8 ...;
其中的长度足够大,而其他“...”的其他内容(NOT NULL
,等等)已经在列中了。
抱歉,修复 1500000 行需要很长时间。
我很确定这不会起作用:
ALTER TABLE tbl CONVERT TO CHARACTER SET utf8; -- no
只有当 table 当前包含与 utf8 字符等效的 latin1(等)时,它才会起作用。阿拉伯字符没有对应的 latin1。
(我看到它是阿拉伯语:باسلاÙ... --> باسلام)
我正在处理一个数据库,该数据库使用 latin1
字符集编码(latini_swedish_ci
归类)保存名称,但名称是波斯语。
似乎有人将 table 排序规则更改为 utf8
(utf8_bin
) 但数据仍然是这样的:
我想知道如何修复这个值。
我更改了 table 排序规则和 DB
排序规则,但我仍然有这种价值观。
任何帮助将不胜感激。
提前致谢
更改为 utf8_unicode_ci
(要更改 table 的默认字符集和排序规则,包括现有列的字符集和排序规则 - convert to - 位于此处关键部分)
alter table <some_table> convert to character set utf8 collate utf8_unicode_ci;
_ci
后缀表示排序和比较不区分大小写。所以这应该不是问题。
UTF-8 是 Unicode 字符集的编码,它应该支持世界上几乎所有语言。
唯一的区别在于对结果进行排序,不同的字母在其他语言(重音符号、变音符号等)中可能有不同的顺序。例如,将 a 与 ä 进行比较可能在另一个排序规则中表现不同。
您能否为我们添加一个带有角色的名字 - 仅在图像中使用名字很难尝试不同的东西。
看起来你有
- 客户端中的 utf8 编码字节,并且
SET NAMES latin1
(或同等学历),以及CHARACTER SET latin1
在目标列上。
清理 table 的 "fix" 是执行 2 步 ALTER described here,其中涉及
ALTER TABLE Tbl MODIFY COLUMN col VARBINARY(...) ...;
ALTER TABLE Tbl MODIFY COLUMN col VARCHAR(...) ... CHARACTER SET utf8 ...;
其中的长度足够大,而其他“...”的其他内容(NOT NULL
,等等)已经在列中了。
抱歉,修复 1500000 行需要很长时间。
我很确定这不会起作用:
ALTER TABLE tbl CONVERT TO CHARACTER SET utf8; -- no
只有当 table 当前包含与 utf8 字符等效的 latin1(等)时,它才会起作用。阿拉伯字符没有对应的 latin1。
(我看到它是阿拉伯语:باسلاÙ... --> باسلام)