如何修复 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。

(我看到它是阿拉伯语:باسلاÙ... --> باسلام)