【发布时间】:2012-02-13 21:55:06
【问题描述】:
我的数据库位于 latin1 中,并且充满了 â" 或 '��"'(取决于我的终端分别设置为 latin1 还是 unicode)。从上下文来看,我认为它们应该是 emdashes。在 IE 中呈现(或不呈现)时,它们似乎会导致令人讨厌的错误。我想找到并替换它们。问题是 â 和 � 字符都不匹配 replace。运行查询:
update TABLE set COLUMN = replace(COLUMN,'��"','---');
执行没有错误,但不执行任何操作(更改了 0 行)。我很清楚,当我在终端中复制“菱形中的问号”字符时,它不匹配。有没有办法找出它的代码并与之匹配? mysql 控制台非常接近能够在一行中执行此操作,因此如果可以避免的话,我宁愿不在终端之外编写脚本。
数据库托管在 Amazon RDS 上,因此我无法安装我在此处的其他问题中看到的正则表达式 udf。从长远来看,我将不得不将整个 db 正确转换为 utf8,但我需要立即解决此渲染问题。
编辑:
我已经用hexdump 隔离了坏字符,它是 e2 80(我认为这不对应于任何 unicode 字符)。如何将其提供给替换功能?
update TABLE set COLUMN = replace(COLUMN, char(0xe2,0x80),'---');
什么都不做。
【问题讨论】:
-
有理由让它成为 latin1 吗?我现在倾向于默认使用 unicode,而且转换起来并不难 - 只需将数据库转储到 SQL,然后将其重新加载到使用 utf8 的新数据库中。
-
我继承了它。转储是不可取的,因为它会导致我想避免的大量停机时间。我一直在阅读诸如 nicj.net/2011/04/17/… 之类的就地方法,但还没有时间将其适应我的数据库。
-
您可能别无选择,只能找到具有此错误字符序列的所有行并手工制作单独的语句来修复每个行(不过,脚本可以帮助做到这一点)。
-
数据是存储不正确,显示不正确,还是真的坏了?请查看kunststube.net/frontback 的数据库部分并尝试弄清楚。答案可能是以“错误”编码导出数据,然后以正确编码重新导入。
-
在这种特殊情况下,以上所有内容。通常,我们将好的 UTF8 存储在 latin1 列中,然后将其拉出并将其呈现为 UTF8,以便一切顺利进行。第二件事是不对的,虽然......它变得非常难以管理。我很快就会将数据库中的所有内容都转换为 UTF8。
标签: mysql character-encoding latin1