2011-10-06 37 views
0

我使用mysql數據庫,innoDB和MyISAM兩種引擎。我想看看UTF8和LATIN1之間的不同,所以我做了一個試驗:
代碼在網站:utf8網站和latin1數據庫表字段

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 

數據庫表字段屬性:

latin1_swedish_ci 

然後我輸入中國話「我愛你「和」ĀāĂ㥹ĆćĈ「在網站上點擊提交按鈕,php和mysql將這些文字存儲到數據庫中。和MySQL從數據庫中取回值並顯示在網站上。

輸出:
網站顯示「我愛你」和「ĀāĂ㥹ĆćĈ」。
databse table field show「æ'ç±ä½」and「Ā&#25」。

我做了測試所有的以下變化:
1)網站的變化元至latin-1utf-8
2表字段的屬性)網站的變化元至utf-8utf-8太表字段屬性。
3)將網站的元素更改爲latin-1以及表字段的屬性也更改爲latin-1
但輸出仍然相同,輸出不變。爲什麼?

難道我不能用這種方法測試嗎?如果是這樣,我該如何測試utf-8latin-1之間的差異?
如何使數據庫表字段顯示「我愛你」和「ĀāĂ㥹ĆćĈ」字樣?

我開發了一個像Facebook.com這樣的支持多種語言的社交網站,我應該使用utf-8作爲數據庫領域嗎? utf-8的缺點是每個字符需要3個字節,但latin-1只需要1個字節。爲了節省存儲空間,最好使用latin-1,但我不確定如果使用latin-1而不是utf-8,將來會出現什麼問題。任何人都可以給我一些關於如何決定使用哪種字符集的建議嗎?

回答

1

1)您可能想要注意的是,如果不使用某種軟件,您可能無法在數據庫記錄中達到最佳狀態,這可能會導致其顯示問題。 Phpmyadmin有一個字符集配置選項,軟件產品有一個內部假定的字符集,甚至一個命令提示符窗口都有一個代碼頁。重要的是要確保從數據庫中確切地返回你放入的內容,而不是如何存儲在表空間中。使用「SET NAME字符集」通過整個連接保持一致的字符集。 2)UTF-8顯然是世界移動到的地方,因爲它可以工作,並且可以存儲您可能遇到的每種語言(書寫系統)中的字符。用拉丁語-1,你正在剪掉所有不是來自西歐的語言 - 這不僅意味着中國,西里爾文和希臘/希伯來語等,而且還包括東歐,土耳其和許多其他地方,這些地方基本上使用拉丁字母和一些特別的信上加了。 3)UFT-8是未來最大的,面向未來的解決方案,並且預計將來會成爲UFT-8的一個重要組成部分。

4)對於單語言應用程序來說,從一開始就做正確的事情(這將是UTF-8)更安全(更安全),而不必稍後轉換您的多吉字節表,你發現你需要更多。沒有人需要做這樣的事情就喜歡這種經歷。

5)磁盤空間是一種商品,每天更便宜 - 如果你要做'社交',你只需要一小撮它(如果事情過得真快,你就會需要它),忘掉它,還有其他一些問題會比磁盤更快地受到你的影響:負載下的性能,訪問併發性,集羣和負載平衡多臺服務器。由於這3個字節,我不記得一個社交網絡感嘆問題。

+0

進行測試。我明白了,所以實際上我需要將phpmyadmin的字符集更改爲latin1,而不僅僅是數據庫中表的字段。好的,我將爲我的項目使用UTF-8。謝謝你的建議 :) – zac1987

1

是的,如果你要支持其他語言,UTF-8是你最好的選擇。

+0

但是,當我在數據庫表字段上使用latin-1時,網站仍然成功顯示中文字符和UTF-8字符後,從表中檢索到拉丁文字符。由於latin-1可以完成這項工作,爲什麼還要在數據庫上使用utf-8?選擇使用utf-8而不是latin-1的其他原因? – zac1987

+1

只要您只存儲和檢索整個字段,它就可以完成這項工作。開始使用諸如SUBSTR,LIKE之類的東西或按字母順序排序,然後您就會驚喜不已。 – djn

+0

好的,我會通過SUBSTR,LIKE和ORDER BY DECS – zac1987