2013-05-02 35 views
0

我已經設置了一個帶有utf8_unicode_ci排序規則的MySQL數據庫,並且其上的所有表和列都具有相同的排序規則。ZF2 Doctrine2 MySql字符集錯誤

我的Doctrine配置有SET NAMES utf8作爲連接選項,我的html文件使用utf8字符集。

保存在這些表格上的文本包含重音字符(á,è等)。

問題是,當我將內容保存到數據庫時,它會保存奇怪的字符,比如當我嘗試在UTF8表中保存ISO時。 (例如:NotÃcias)

我發現的唯一解決方法是在保存之前的utf8_decode和打印之前的utf8_encode。

這意味着,出於某種原因,之間的東西是搞亂了UTF8與ISO。

可能是什麼?

謝謝。

編輯:

我設置打印前保存和解碼之前編碼,並正確打印,但在DB我的字符更改爲:

XPTÓ - >XPTÃÂ「

這使得在數據庫中搜索「XPT」不可能...

+0

排序並不重要,它只是告訴MySQL如何命令字符串。你想確保_charset_編碼設置爲utf8。你能否更新你的答案,以反映你有正確的編碼? – 2013-05-03 01:50:12

+0

@EzequielMuns更新 – MGP 2013-05-03 17:40:37

回答

0

我會print bin2hex($string);在原始工作流程的每一步(即沒有編碼/解碼步驟)。

經過每個:

  1. 原始$_POST數據
  2. 值您表單驗證後得到
  3. 是那些獲得把你結合的實體
  4. 你會得到的值值從數據庫,如果你使用PDO直接查詢它(從
    $em->getConnection()
  5. 將值填入喲您可以通過$em->detach($entity); $entity = $em->find('Entity', $id);來實現此功能

您會查看輸出變化的位置,並將搜索焦點集中在那裏。

我也要仔細檢查:

  • 在DB:SHOW CREATE TABLE 'table'顯示CHARSET=utf8爲整個表(並沒有爲各個列不同)
  • 該工具使用,看看你的數據庫值( Navicat,phpMyAdmin)已經得到了正確的編碼集。