我的數據庫在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