我的数据库在latin1
中,并且全部是â"
或'��"'
(取决于我的终端分别设置为latin1还是unicode)。从上下文来看,我认为他们应该是emdashes。在IE中呈现(或不呈现)时,它们似乎会导致令人讨厌的错误。我想找到并替换它们。问题是这两个字符都不符合replace
。运行查询:替换mysql中的垃圾字符
update TABLE set COLUMN = replace(COLUMN,'��"','---');
执行没有错误但没有做任何事情(0行已更改)。我很清楚,当我在终端中复制它时,“钻石中的问号”字符不匹配。有没有办法找出它的代码,并通过匹配它或什么? mysql
控制台非常接近于能够在一行中完成此操作,所以如果我能够避免它,我宁愿不在终端外面编写脚本。
数据库托管在Amazon RDS中,因此我无法安装我在其他问题中引用的regexp udf。从长远来看,我将不得不将整个数据库正确地转换为utf8,但我需要立即修复此渲染问题。
编辑:
我已经分离出的坏字符hexdump
,它的E2 80(我不认为这对应于任何Unicode字符)。我怎样才能把它提供给替换函数?
update TABLE set COLUMN = replace(COLUMN, char(0xe2,0x80),'---');
什么也没做。
它是拉丁文1的理由吗?我倾向于现在默认使用unicode,并不难转换 - 只需将数据库转储到SQL,然后将其重新加载到使用utf8的新数据库中。 – 2012-02-13 22:10:47
我继承了它。转储是不可取的,因为它会导致我想避免的显着的停机时间。我一直在阅读像http://nicj.net/2011/04/17/mysql-converting-an-incorrect-latin1-column-to-utf8这样的就地方法,但还没有时间去适应它到我的分贝。 – mmdanziger 2012-02-13 22:32:23
您可能别无选择,只能查找包含此错误字符序列的所有行,并手动制作单个语句来修复每个行(但脚本可以帮助完成此操作)。 – staticsan 2012-02-13 23:25:55