2010-07-01 61 views
1

我的腳本完全保存在UTF-8中。我正在用"{$this->engine}:host={$this->host};dbname={$this->name};charset=UTF-8"實例化PDO。我的表使用InnoDB,並使用utf8_general_ci進行整理。我的頁面或者與Content-Type: text/html; charset=UTF-8標題或<meta>等效。字符編碼不匹配

當使用PDO存儲源代碼中源自HTTP輸入或字符串文字的€字符時,根據MySQL Workbench 5.2,我剩下c3 a2 e2 80 9a c2 ac。從數據庫中檢索並在頁面上顯示它可以正常工作。然而在phpMyAdmin和Workbench中,我看到€

當使用這兩個工具來存儲€時,我剩下e2 82 ac,這顯然是正確的UTF-8表示,但是如果我嘗試檢索並使用PHP輸出,則會顯示 。

我的問題是,這種差異是從哪裏出現的,是否可以讓我的網頁和數據庫工具完美地工作?

+1

奇怪,聽起來你正在做的一切正確。你是否確定你的數據庫連接是UTF-8?你能發送一個'SET NAMES utf8;'查詢來確認嗎? – 2010-07-01 23:38:15

+0

並且你的瀏覽器忽略了編碼? charset是建議性的,如果你已經配置它,瀏覽器將會忽略它。在不同的瀏覽器中行爲是否相同?在不同的機器上? – Andrew 2010-07-01 23:48:20

+0

爲了更好的衡量,請確保您的PHP腳本已配置爲使用UTF-8。如果PHP正在進行即時字符轉換,因爲它認爲文件需要使用另一個ISO字符表,這可能會解釋您所看到的內容。 'ini_set('default_charset','UTF-8');' – Andrew 2010-07-01 23:54:31

回答

1

DSN中的charset指令實際上適用於MSSQL。我只需要執行SET NAMES。對於那個很抱歉。

我實現了這樣:

0

簡單,轉換€到HTML實體&歐元;對於superfix(但你可能會與其他特殊字符的問題)

問題的另一面(更具體地說)被檢查mysql的character_set_server,最常見的原因character_set_client - seeAlso:connection charsets

也,重要的是要注意,meta equiv沒有什麼區別,你需要總是設置標題('Content-Type:...)

0

由於你的HTML頁面是正確的,所以你似乎在存儲數據庫中的正確數據。

€是錯誤解釋爲windows-1252的歐元符號的UTF-8編碼。看來你的Windows工具使用「ANSI」編碼而不是數據庫編碼。