2010-08-22 31 views
2

我有一個像這些在我們的網站特點:FémnyomóPHP和MySQL將不爲Unicode

這是一個街道地址,在另一種語言中輸入(雖然我不知道是哪個)。這裏的DB設置:

mysql 4.1.2log 
charset cp1252 West European (latin1) 

我使用PHP,但沒有mbstrings()(雖然我對這個地址的字符串轉換,只是回聲)。

如果我將mysql字符集從cp1252更改爲UTF-8並確保我使用了諸如header('Content-Type: text/html; charset=UTF-8');之類的東西,那會改善我的情況嗎?或者,數據是否因爲它保存在cp1252字符集中而沒有任何結果?原始數據庫創建於2002年,自那以後一直使用/擴展。我們已經升級了服務器並重新導入了轉儲文件,但我很慚愧地承認我沒有多加考慮。

如果我被弄壞了,我可能會刪除那些字段中的文本,但我希望支持unicode前進,所以如果我發出ALTER database_name DEFAULT CHARACTER SET utf8;會確保未來的多字節編碼被正確保存,等式中存儲量最少(讓我擔心PHP)?

謝謝 -

回答

1

1)轉換所有字符集爲UTF8:

ALTER database_name DEFAULT CHARACTER SET utf8; 

2)發出此頁面上的任何查詢之前:

mysql_query("set names 'utf8'"); 

3)使用此頭:

header('Content-Type: text/html; charset=UTF-8'); 

4)插入此meta標籤:

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

5)此外,閱讀這樣的:http://www.oreillynet.com/onlamp/blog/2006/01/turning_mysql_data_in_latin1_t.html

+0

感謝。我已經完成了所有5個步驟,但仍然得到相同的結果。爲了消除可能性,我連接到本地主機上的mysql監視器(此框正在運行MySQL 5.1.41-3ubuntu12.3-log),並將它們設置爲utf8(使用'show variables'反映) - character_set_client,character_set_connection,character_set_database ,character_set_results,character_set_server,character_set_system。結果是一樣的 - 這是直接從MySQL監視器:FAN©mnyomó³1 – Hans 2010-08-22 09:33:54

+0

在步驟5中的鏈接可能最終會成爲我所做的。我可能只需要通過這些地址並手動更改它們(將所有內容轉換爲UTF-8後)。在將數據庫轉換爲UTF-8之後,是否有任何危險,我最終會使用舊版latin1字符集中的這些字符? – Hans 2010-08-22 09:35:23

+1

對於您提到的危險,請備份數據庫。如果你搞砸了任何東西,你可以恢復。 – shamittomar 2010-08-22 09:45:37