1

我的数据库在latin1并且充满了â"or '��"'(取决于我的终端是分别设置为 latin1 还是 unicode)。从上下文来看,我认为它们应该是 emdashes。在 IE 中呈现(或不呈现)时,它们似乎会导致令人讨厌的错误。我想找到并替换它们。问题是 â 和 � 字符都不匹配replace. 运行查询:

    update TABLE set COLUMN = replace(COLUMN,'��"','---');

执行没有错误,但不执行任何操作(更改了 0 行)。我很清楚,当我在终端中复制“菱形中的问号”字符时,它不匹配。有没有办法找出它的代码并与之匹配?mysql控制台非常接近能够在一行中执行此操作,因此如果可以避免的话,我宁愿不在终端之外编写脚本。

该数据库托管在 Amazon RDS 上,因此我无法安装我在此处的其他问题中看到的 regexp udf。从长远来看,我将不得不将整个 db 正确转换为 utf8,但我需要立即解决这个渲染问题。

编辑:

我用hexdumpe2 80 隔离了坏字符(我认为这不对应于任何 unicode 字符)。如何将其提供给替换功能?

    update TABLE set COLUMN = replace(COLUMN, char(0xe2,0x80),'---');

不做任何事情。

4

2 回答 2

1

我想到了。我使用 mysql 的内置hex函数来转储一个我知道不好的条目。

    select hex(column) from table where id=666;

然后挑选出单词(那些夹在“20”之间的数字),发现我的违规字节集实际上是x'C3A2E282AC2671756F743B'. 这与我在 PHP 和我的系统(as )中看到的编码方式相对应,e2 80我不知道,在这一点上,我真的不在乎。

为了验证,在销毁数据之前,将其重新插入 mysql:

    select x'C3A2E282AC2671756F743B';
    +---------------------------+
    | x'C3A2E282AC2671756F743B' |
    +---------------------------+
    | â€"               |
    +---------------------------+
    1 row in set (0.00 sec)

因此,使用上面的替换查询,我能够一次删除所有坏数据。

根据记录,它是:

    update TABLE set COLUMN = replace(COLUMN, x'C3A2E282AC2671756F743B','--');

我真的希望这对某人有用。尽管编码混乱在 mysql 中似乎很常见,但我到处搜索,但找不到这个最终相当简单的过程的解释。

于 2012-02-14T21:07:59.450 回答
0
于 2012-02-13T22:09:40.767 回答