我有一個字段包含我的MySQL數據庫中的字符串表。我在MySQL中的這個unicode字段出了什麼問題?
MySQL版本是5.0.51a。該表的默認字符集是'utf8'。
許多字符串都有unicode字符,例如\ xae和\ u21222(分別爲註冊符號和商標符號)。
例如,假設我有一個字段行此值:
"Bing® Blang™ Blaow"
默認字符集我的mysql命令行客戶端的編碼是「latin1」。
如果我發出在從命令行MySQL的客戶端程序SELECT語句而沒有指定字符集的標題的輸出顯示出來,如下所示:
"Bing® Blang Blaow"
的(R)的符號是正確的,但(TM)符號丟失。如果我將該字符串從控制檯剪切並粘貼到TextMate中,則會出現(TM)符號,但在單詞「Blang」中位於g後面一半。
我假設在TextMate中只是一個顯示錯誤(儘管如果任何人都可以提供更好的細節,但這不是真正的重要部分)。
我從它的剪切後粘貼行爲中推斷出的主要原因是數據在數據庫中,但某些地方的某種字符集設置有問題。
如果我覆蓋了mysql客戶端的默認編碼,像這樣的命令行:
mysql --default-character-set=utf8
然後做同樣的選擇,串出來的:
"Bing® Blang™ Blaow"
這是(R)和(TM)符號都出現在正確的位置,但兩者之前都是unicode字符\ xae,它是一個頂部帶有迴音的A。 (順便說一下,這也是我使用python將其展示出來並顯示在網頁上時顯示的數據的方式,這是我真正的問題所在)。
無論如何,這裏發生了什麼?我們最近做的所有事情都使用了UTF8,但有可能在改變之前插入了其中的一些行,這意味着它們會使用latin1默認值......但是這兩種編碼似乎都不會產生正確的結果?
如果在表格上的默認編碼是latin1時插入行,然後切換到utf8,那麼編碼已切換(通過alter table ..),那麼編碼是否會實際更新?如果其中一種編碼現在可以工作? unicode會停止踢我的屁股?
相關:http:// stackoverflow .com/questions/1219003 /奇怪字符在mysql-dbase/ – random 2009-08-07 02:58:09