mysql - 替换mysql中的垃圾字符

标签 mysql character-encoding latin1

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

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

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

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

编辑:

我已经用 hexdump 隔离了坏字符,它是 e2 80(我不认为这对应于任何 unicode 字符)。如何将其提供给替换函数?

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

什么都不做。

最佳答案

我想通了。我使用 mysql 的内置 hex 函数转储一个我知道是错误的条目。

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

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

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

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

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

记录在案:

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

我真的希望这对某人有用。虽然编码困惑在 mysql 中似乎很常见,但我搜索了所有地方,但我找不到对这个最终相当简单的过程的解释。

关于mysql - 替换mysql中的垃圾字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9268631/

相关文章:

javascript - 多字节字符以单字节编码显示

php - MySQL SELECT DateTime(员工签到报告)

mysql - 从 MySQL 中的字符串中提取日期

java - 如何将 UTF8 属性文件与 Vaadin Bean 验证结合使用

encoding - Twitter 与变音符号 ä 和 ö 的共享问题

mysql - 在 Latin 1 --> UTF-8 中是否存在我需要修复的隐藏编码错误?

python - 在 Python 中将 utf-8 转换为 latin-1

utf-8 - 在 mysql 服务器上从 latin1 更改为 utf8

c# - 为什么 Entity Framework 在 SELECT 上生成 JOIN

MySql 连接字符串 localhost