2011-11-01 226 views
6

我目前在保存特殊字符(®&©)到mySQL數據庫時遇到問題。將特殊字符保存到MySQL數據庫

在本地堆棧上(我的開發機器本地),操作運行平穩,前端輸入的內容按照預期保存。

保存到數據庫時,集中服務器上的前端代碼相同時,字符將以其他字符處理,並保存爲®。 在查看前端記錄時,這不是問題,因爲它會顛倒它的功能並正確顯示。

問題來自另一個獨立的系統,它使用相同的數據庫,並且不做任何改動,因此顯示爲®而不是簡單®。

我感到困惑的原因是,它似乎按照我的本地堆棧上的要求工作,但不在中央服務器上工作。

我正在尋找什麼來尋找哪些可能導致這與服務器配置相比,我本地的想法。

在此先感謝 馬克

+0

忘了補充前端使用PHP編寫的

<form action=\"testsubmit.php\" method=\"post\" accept-charset=\"latin1_swedish_ci\">
  • 集字符集。 – MarkJWiggins

  • +1

    檢查php默認編碼,mysql連接編碼和mysql表和字段整理是否相同。 –

    +0

    +1 Pranav涵蓋了大部分的事情 - 當然需要做到這些。 – therobyouknow

    回答

    1

    你在PHP代碼中選擇DB後補充一點:

    mysql_query("set names 'utf8'"); 
    

    還檢查您存儲的文本列有utf8編碼。

    +0

    +1 @Soaica Mircea,謝謝。值得考慮的一些情況。雖然這可能不是OP的原始問題所要求的,因爲我能夠重現這一點並提供了一個不需要mysql_query(「set names'utf8'」)的解決方案;但是這可能對其他情況有用。再次感謝。 – therobyouknow

    2

    @Pranav Hosangadi(謝謝)涵蓋了三個方面來檢查編碼的一致性。以下解決方案增加了這一點。它也可能是值得考慮的(變體)@Soaice Mircea的答案(也謝謝)某些情況下,這個答案不能解決問題,雖然這不是必需的,當我能夠重現並找到解決問題的辦法。 @Pranav的思路似乎對這個問題是成功的,因爲它是關於在任何地方使用一個字符集而不是特定字符集的一致性。

    五件事情要做:

    1. 確保數據庫字符集和表使用相同的字符集貫穿始終,在phpMyAdmin例如,說明和此charset使用下面

    2. 使用PHP頭檢查一下()與數據庫字符集如功能:

      header('Content-Type: text/html; charset=latin1_swedish_ci');
    3. 插入HTML中標題,例如meta標籤:

      <meta http-equiv="content-type" 
      content="text/html;charset=latin1_swedish_ci">
    4. 添加在表單標籤的字符集,接受MySQL連接例如爲:

      $con = mysql_connect("localhost","test","test");  
      mysql_set_charset ("latin1_swedish_ci", $con); 
      
    +0

    觀察到一個奇怪的事情是,上面的第5步,設置mysql連接,可能無法在同一臺服務器上的其他地方工作,「」無法初始化字符集latin1「作爲錯誤消息看到。也見於無關的軟件在這裏:http: //bugs.kde.org/226960這個討論中的一個建議是:你可以在/ usr/share/mysql/charsets中查看並報告在那裏有一個 'latin1.xml'文件嗎?不要讓這個你關閉這個答案雖然這可能是我的設置的孤立的特質。 – therobyouknow