2009-09-05 16 views
2

有趣的問題...如果我有一個MySQL表與CHARSET = utf8,並且我用拉丁編碼打開一個連接,會發生什麼?如果我使用latin1連接到utf8 MySQL數據庫表,會發生什麼情況?

我試過這個,連ß和æ等字符都可以正確存儲和檢索。這些字符在utf8和latin1中用不同的字節序列表示,所以我沒有想到它會起作用。

MySQL是否在字符編碼之間進行某種即時翻譯?

回答

1

是的,mysql會根據配置進行chrset轉換。要更改連接的chrset,你可以使用SET NAMES

SET NAMES utf8; 
+0

這取決於設置默認字符集變量。 當您有兩個不同的編碼數據庫(不同的字符集)時,您將在轉儲中獲得不同的fileencodings – astropanic 2009-09-05 19:13:17

3

你會覺得它工作,直到你與另一個連接字符集連接。然後你會看到奇怪的人物,肯定會後悔的。

您正在將數據庫中的字節存儲在數據庫中,如果您使用utf8轉換來讀取它們,它們纔有意義。但是你告訴mysql這個字段是拉丁語的,所以他不會理解,但是無論如何他會把它們發給你(你是人類,他是obbeys)。當你連接到utf8時,你會通過這個字符集讀取它們並閱讀它們。

但如果連接更改字符集或試圖改變字段的字符集後,你就會有麻煩,需要這樣的技巧在讀取一個字段內容:

convert(cast(convert(FieldNameMessed using latin1) as binary) using utf8) 
相關問題