我的数据库是 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/