這看起來不是字符集,但整理有關。排序規則定義了MySQL在分類或比較時如何將字符視爲「幾乎相等」。
例如,ISO-8859-15默認排序規則將治療ü = u
你可以做的是把你的領域就像一個箱子整理。 二進制排序規則不會將相似字符視爲相等。
選擇正確的二進制排序
SELECT CHARACTER_SET_NAME, COLLATION_NAME FROM information_schema.COLLATIONS WHERE COLLATION_NAME LIKE '%bin%';
然後執行你這樣的更新:
UPDATE TABLE SET columnx = REPLACE(columnx COLLATE latin1_bin, '–', '-');
更正: 更換比較使用二進制排序
編輯總是做:
如果仍然有0行更新,您可能不會替換正確的字符。 轉換包含字符爲十六進制,並張貼十六進制值,所以我們可以找出哪些燒焦我們正在談論
例如串
SELECT HEX(columnx) LIMIT 1;
EDIT2:
剛剛看到,你居然說你\u0096
這是一個控制字符稱爲START OF GUARDED AREA ..什麼都設定此角色創造了..在六角這是0xC2 0x96
。 在您的示例查詢中,您將替換名爲EN DASH的字符集
只需粘貼它即可替換控制字符,轉換可能會將其分解。相反,你可以使用UNHEX(hexval)來告訴MySQL的字符你的意思是
UPDATE TABLE SET columnx = REPLACE(columnx UNHEX('C296'), '-');
,或者使這更清楚(或更加混亂:)),這可以通過「正常」的連字符的十六進制值以及
UPDATE TABLE SET columnx = REPLACE(columnx UNHEX('C296'), UNHEX('2D'));
...或者你可以解決根本問題,並讓你的字符顯示「正常」。 –
有一種機制可以接受這些文本(全部在ISO-8859-1中),使用UTF-8對它們進行編碼,從它們生成JSON並將它們顯示在JSON的另一側,它們顯示爲正方形。我無法控制這一點,並被要求更正數據庫。我已經在其他字符上取代了,例如''''替換爲'''但是沒有這個特定的運氣。 – RedDragon
祝你好運。你基本上被卡住了7位ASCII碼。 –