2010-08-12 73 views
3

Gday全部,爲什麼PHP/MySQL插入我的中文字符不同?

我有一個莫名其妙的問題,同時嘗試從PHP使用mysqlnd插入一些中文字符到我的MySQL數據庫。

我有接受一些細節,如內部名稱,外部名稱,屏幕快照名稱等形式......

我輸入「語言測試」(語言測試)到窗體中的所有三個字段。

我提出的採用內部我的信息加入例如:

UPDATE table1 INNER JOIN table2(table1.name = "value1", table2.ext_name = "value2", table2.ext_name = "value3") 

兩個表,問題中的字段設置爲utf8_general_ci(我也曾嘗試utf8_bin)

的插入工作正常但是我看到兩個值插入到數據庫中。

在表一中,我看到「è¯è¨æμ毯¯¯¯¯」,表二中我看到了「語言測試」。

什麼可能導致我插入完全相同的數據從相同的php窗體顯示不同在兩個單獨的MySQL數據庫表?

+0

請參閱:http://stackoverflow.com/questions/279170/utf-8-all-the-way-through。此外,你可能想重新啓動你的mysql服務器和web服務器,然後再次檢查表格。有時即使數據庫中插入了「錯誤」的值,「正確」值也會被緩存。 – Seth 2010-08-12 04:58:04

+0

比較十六進制轉儲('SELECT HEX(column)FROM table')並查看實際數據是否相同。 – NullUserException 2010-08-12 05:02:06

回答

2

在MySQL中,你不僅要設置表(或列)的字符編碼,但你必須設置PHP和數據庫之間的連接,這是做了每個字符編碼你連接的時間。

在PHP中,您可以使用mysql_set_charset(),或者如果您在數據源名稱中使用PDO,包括charset=UTF-8

這取代了MySQL中的(並且PHP推薦它)SET NAMES。在舊版本的PHP中,每次連接時都使用MySQL命令SET NAMES UTF8

+0

鑑於描述,我懷疑「表一」有錯誤的字符編碼集,而「表二」設置正確。 – 2010-08-12 05:24:25

+0

你可能是對的 - 想添加一個替代答案? – thomasrutter 2010-08-12 05:26:20

+0

我的連接使用utf8編碼,表中的兩個表和字段都設置爲utf8。 – Michael 2010-08-12 05:39:33

相關問題