2009-01-16 88 views
0

我有一個latin5字符集編碼的數據表,表中的所有列也是latin5。從mysql控制檯輸入「SET NAMES'latin5'」時查詢表結果是否正常。當我嘗試刪除或插入/更新所有新數據的編碼是完美的。但是,當我嘗試向數據庫插入Iso-8859數據(也是通過mb_detect_encoding驗證)並嘗試插入沒有「SET NAMES」的數據時,它不會在適當的編碼中插入/更新/選擇,或者當我使用「SET NAMES'latin5'「它不以正確的方式插入/更新,但選擇是正常的latin5數據只用集合名稱'latin5'進入正確的編碼。當我使用集合名稱'utf8'選擇查詢是壞的編碼,但插入/更新是好的。奇怪的編碼問題

我問我們會去製作的原因。這讓我想到未來可能出現的問題。

回答

2

mb_detect_encoding不知道你的字符串是什麼編碼。它做出了合格的猜測,但不能保證它會猜對。特別是如果候選人都是單字節編碼,就像latin1和latin5一樣。

如果你想獲得正確的字符集,確實無法知道你在做什麼。我建議你閱讀這些網頁至少幾次:

尤其應注意的是網頁被送達HTTP標頭,指定頁面編碼的字符集。除非你明確地從你的php腳本中設置了這個,否則你將使用web服務器的默認值,這可能因服務器而異。

此外,要真正瞭解發生了什麼,而不是做試驗和錯誤。後者可以很容易地讓你在某種情況下起作用,但在任何情況下都不起作用。

最後。如果你有任何選擇,我認真地建議你使用utf-8做一切事情。拉丁文5會給你帶來許多悲傷。