如何修复mysql数据编码

如何修复mysql数据编码,mysql,character-encoding,Mysql,Character Encoding,我正在处理一个数据库,该数据库使用latin1字符集编码(latini\u-swedish\u-cicollation)保存名称,但名称是波斯语的。 似乎有人将表排序规则更改为utf8(utf8\u bin),但数据仍然是这样的: 我想知道如何修正这个值。 我更改了表排序规则和DB排序规则,但仍然有这种值。 任何帮助都将不胜感激。 提前感谢更改为utf8\u unicode\u ci类似(更改默认字符集和表的排序规则,包括现有列的字符集和排序规则-转换为,这是关键部分) alter

我正在处理一个数据库,该数据库使用
latin1
字符集编码(
latini\u-swedish\u-ci
collation)保存名称,但名称是波斯语的。

似乎有人将表排序规则更改为
utf8
utf8\u bin
),但数据仍然是这样的:

我想知道如何修正这个值。

我更改了表排序规则和
DB
排序规则,但仍然有这种值。 任何帮助都将不胜感激。


提前感谢

更改为
utf8\u unicode\u ci
类似(更改默认字符集和表的排序规则,包括现有列的字符集和排序规则-转换为,这是关键部分)

alter table转换为字符集utf8 collate utf8\u unicode\u ci;
\u ci
后缀表示排序和比较不区分大小写。所以这不应该是个问题

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

唯一的区别在于对结果进行排序,不同的字母在其他语言中的顺序可能不同(口音、元音等)。例如,在另一个排序规则中,将a与ä进行比较可能会有不同的行为



你能不能给我们加上一个人物的名字——只在图片中用名字来尝试不同的事情真的很难

看起来你有

  • 客户端中的utf8编码字节,以及
  • 设置名称拉丁语1
    (或同等名称),以及
  • 目标列上的字符集1
清理桌子的“修复”方法是进行两步改变,包括

ALTER TABLE Tbl MODIFY COLUMN col VARBINARY(...) ...;
ALTER TABLE Tbl MODIFY COLUMN col VARCHAR(...) ... CHARACTER SET utf8 ...;
其中长度足够大,而另一个“…”具有任何其他内容(
notnull
等)已在列中

抱歉,但修复1500000行需要很长时间

我很肯定这是行不通的:

只有当表当前包含相当于utf8字符的拉丁文1(etc)时,它才起作用。阿拉伯语字符没有拉丁文1的等价物


(我认为它是阿拉伯语:ØØØØØØØØØØØØØØØØØÙÙ…-->。它就像阿拉伯语。并确保数据库、表和字段具有相同的排序规则。应用程序中使用的脚本语言是什么?所有类型都具有相同的排序规则。我认为这些数据是用phpNuke制作的。。。我正在尝试写一个独立工作的搜索引擎…你的搜索引擎应用程序也会基于PHP吗?你可以为我们添加一个带有字符的名称吗?只在图像中使用名称很难尝试不同的事情。谢谢你的回答。我使用了您的查询,但问题仍然存在。。。!!!表和列都有相同的编码-->
utf8\u unicode\u ci
您可以将表中的一些行转储给我们吗?-我想直接试试,这样我可以给你一个真正的解决方案。让我试试。。。这是一个巨大的数据库,有超过1500000条记录。。。。我会尝试上传转储文件,只要复制并粘贴tablecreate语句和10-20个insert语句就足够了。也许问题不是来自mysql部分——你能告诉我们你是如何添加这些数据的吗?我知道我的布局很蹩脚。如果内容有误,请提供一些详细信息。+1正在寻找一个好的描述+示例,该示例应该可以实现此目的-另一个+1的命中率,这将适用于所有具有拉丁语等效字符的角色。@Rick James感谢您的时间。我遵循了你的步骤,但数据还是和以前一样。我做错什么了吗?让我们核实一下其他的事情。请为表格中的少量文本提供
选择列,十六进制(列)…
。如果可能的话,告诉我它应该是什么样子。(如果你有“双重编码”,治疗效果更糟。)
ALTER TABLE Tbl MODIFY COLUMN col VARBINARY(...) ...;
ALTER TABLE Tbl MODIFY COLUMN col VARCHAR(...) ... CHARACTER SET utf8 ...;
ALTER TABLE tbl CONVERT TO CHARACTER SET utf8;  -- no