我在MySQL中遇到了編碼問題,我需要一些幫助來弄清楚發生了什麼。解密MySQL編碼
首先,一些參數。該表的默認編碼是utf8。然而,character_set_client,character_set_connection,collation_connection和character_set_server MySQL系統變量都是latin1。
我SSH入我的MySQL服務器,並使用本地命令行客戶端連接到本地服務器。我選擇記錄/列和返回的字符串,假設字符以A返回,這是正確的。 A在UTF-8中用十六進制表示爲「C5 9F」。
但是,命中服務器的PHP應用程序將其解釋爲XY。在MySQL命令行客戶端中,如果我發送命令「SET NAMES utf8」,它現在也將顯示爲XY。
如果我選擇INTO OUTFILE並使用hexedit編輯文件,我會看到兩個映射到X的十六進制字符,然後是映射到Y的兩個十六進制字符(X爲「c3 85」,「C5 B8」對於Y)。基本上,它採用兩個十六進制值並將它們確實顯示爲UTF8字符。
首先,它看起來像數據庫確實存儲的東西爲UTF8,但錯誤的UTF8種,正確嗎?它們是否以原始Unicode的形式進入,但不知何故,也許是因爲系統變量,它不會被轉換爲UTF8?
二,MySQL命令行客戶端如何/爲什麼將XY正確解釋爲A?
最後,爲了成功解釋MySQL命令行,是否有圖表顯示C3 85 C5 B8如何轉換爲A,或者XY轉換爲A?
非常感謝任何見解。