2012-03-19 63 views
1

好吧,我問了這個問題,但解決方案沒有解決這個問題。MySQL不會存儲非英文字符

基本上,我的數據庫只存儲英文字符,即使它的字段設置爲UTF-8 unicode ci模式。

我試過存儲俄文字母,它打印出奇怪的Ñ Ð¸Ñ 字符。

然後我看着phpMyAdmin的,那些奇怪的字符是這樣的:

гк 

然而,當我直接存儲從phpMyAdmin的東西,俄羅斯字母看起來很好。然而,我的網頁打印出來????? - 問號。

發生了什麼???如何存儲和顯示不同的語言?

+1

這一直被問及一遍又一遍。我的標準猜測:你沒有設置*連接編碼*。如果沒有更多的細節,很難提出其他建議請參閱[如何在Web應用程序中處理Unicode](http://kunststube.net/frontback)以獲取完整的清單。 – deceze 2012-03-19 05:19:12

回答

1

首先,確保你在所有的過程中使用相同的字符集,我的意思是,形式,過程和數據庫。

我建議在HTML頭部的元標記中使用charset = utf-8。

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

最後,不要忘了你的文本字段設置爲:

utf8_unicode_ci 

我希望這對你的作品。讓我知道你是否需要更多信息。

+0

這個「巧妙的技巧」應該做什麼? – deceze 2012-03-19 06:02:06

+0

這只是一種確保你將正確的charset發送給db的方式。就這樣。順便說一句,這對我來說很有用,我不是隻是用這個代碼來突出顯示。我與西班牙人的字符工作,我知道屁股疼痛可以與特殊字符工作。 – Overkillica 2012-03-19 06:14:14

+0

另外,當你顯示你的文本時,如果它仍然沒有出來,只是嘗試使用htmlentities。 – Overkillica 2012-03-19 06:16:16

0

這也是我的問題,我終於找到了解決問題的方法。我不是一個熟練的編碼員,但我在這裏寫下答案,以便對像我一樣的人可能會有所幫助,但他沒有設法通過他們嘗試過的其他方式解決他們的問題。

在我看來,在一般情況下,你總是要確保你已經先進行這三樣東西:

將此標籤添加到您的每一個HTML源使用一些文本用語言除英語(添加它的開閉頭之間標籤):

<meta charset="utf8"/> 

(正如你看到它的沒有關閉對標籤)

2-只有你(使用名爲$康恩一個mysqli的對象爲例)連接到數據庫,在那裏後,做到這一點也查詢:

$conn->query("SET NAMES 'utf8'"); 

(至少這工作了我自己的語言是波斯語)

3-設置你做表的排序規則爲「UTF8 - 通用詞」從頭開始(......我強調這個「從頭」。如果你想知道原因,請閱讀下面我的答案!):

當然,我上面說過的所有這三件事都很重要,但是當我摔跤這個尷尬的災難時,他們都沒有幫助自己! :(所以我感到失望,但一如既往的SO頁出現!:) 我讀到@deceze建議的輝煌製品,其是在下面的文章的評論,並從中看到了這些行:

數據庫服務器有一個默認的字符集,數據庫可以有一個默認的字符設置,數據庫表可以具有默認字符集,最後該列具有字符集設置。規則很簡單:如果沒有爲列指定明確的字符集,則使用下一個更高的默認值。如果該列有明確的字符集,則服務器,數據庫和表默認值都不會有任何影響。

其實,我的傻問題是,我們之前做的表(具有比其他UTF8一個unicode)和然後試圖改變它的Unicode爲utf8時,它似乎沒有工作,因爲正如文章所說,即使表格的排序與每個字段的排序都是分開的,因此當您更改表格時,其他表格會保留其默認排序規則(您在製作表格時選擇的排序規則scratch!)最後,我去了phpmyadmin中的結構選項卡,並將那些仍在使用latin1的字段的排序規則更改爲utf8-general-ci。 (這裏代表不區分大小寫)

我希望它有幫助。