如何修复mysql数据编码

时间:2015-04-17 22:38:11

标签: mysql character-encoding

我正在使用latin1字符集编码(latini_swedish_ci排序规则)处理名称的数据库,但名称是波斯语。

似乎有些正文将表格整理更改为utf8utf8_bin),但数据仍然是这样的:

enter image description here

我想知道如何修复这些值。

我改变了表格整理和DB整理,但我仍然有这种价值观。 任何帮助将不胜感激。

提前感谢

2 个答案:

答案 0 :(得分:5)

看起来你有

  • 客户端中的utf8编码字节,
  • SET NAMES latin1(或等效的)和
  • 目标列上的
  • CHARACTER SET latin1

清理表格的“修复”是执行两步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

仅当表当前包含与utf8字符等效的latin1(etc)时才有效。阿拉伯字符没有latin1等价物。

(我把它看作阿拉伯语:باسٓاÙ... - >باسلام)

答案 1 :(得分:1)

更改为utf8_unicode_ci之类的(要更改表格的默认字符集和整理,包括现有列的表格 - 转换为 - 这是关键部分)

alter table <some_table> convert to character set utf8 collate utf8_unicode_ci;

_ci后缀表示排序和比较不区分大小写。所以这应该不是问题。

UTF-8是Unicode字符集的编码,它应该支持世界上几乎所有语言。

唯一的区别在于对结果进行排序,不同的字母可能会以不同的顺序出现在其他语言中(重音符号,变音符号等)。例如,将 a ä进行比较可能会在另一种排序规则中表现不同。


你可以为我们添加一个带有角色的名字 - 仅仅在图像中使用名称来尝试不同的东西真的很难。