2014年9月2日 星期二

code charge 的資料庫中文亂碼

今天建立一個新的專案,因為想說只有中文而已,因此,在專案設定上,server/script 上 Charset 設定為 utf8,Locales & Encodings 裡面的 File Encoding: Unicode(UTF-8)、Default HTML Encoding : Unicode(UTF-8)、Site Locales: Chinese (Default),點進去看內容,Output Encoding  也是 Unicode(UTF-8)。想說這樣該設的都設了,Connection 部分找不到有設定 encoding 的地方,所以就把帳號密碼設設就以為好了。

結果,使用 builder 一建立一個 AP 出來一看,我的媽唉!中文全成了 "???????"!

關於資料庫中文 "??????"的問題,php+mySQL其實早有經驗了,只是好奇,為什麼之前一樣用 Code Charge 都沒有問題的,為什麼此時會有問題?!

因為,我的資料庫是原本就建立好的,而且之前用別的程式做抓資料都沒有問題,我也特別檢查一下我的資料庫,該是"utf"原本就都設了,沒有改變。那麼問題應該還是在 Code Charge 上面了。

弄了半天,只好試試在該程式頁的起始之後,寫了一小段 "SET NAMES 'UTF8'",用程式強制mySQL用UTF8編碼,結果就正常了!

可是,Code Charge的問題ˋ出在哪裡呢?

請出全文搜索工具,尋找"UTF8",其他正常的專案可以顯示中文,新的專案顯示不了中文,肯定是有不一樣的地方。果然,找到 Common.php 中有不一樣的地方。新專案的 $CCConnectionSettings = array() 設定沒有 Encoding "UTF8" ,成功顯示中文的有。

那是哪裡的設定出問題呢?

後來試了試,原來是在 Locales & Encodings 裡。只要新增一個English語系,也設成UTF8 ,原本的Chinese也給他設設(本來就有的),這樣以後, common.php裡面,就自動產生了 Encoding "UTF8" 程式了!

這應該是 Code Charge 的 bug吧!理論上,Locales & Encoding 已經設了 Chinese UTF8 了,他還是把它當成一般的無 UTF8 的編碼,必需有新增一個 UTF8 的 Locales ,Code Charge才建立 UTF8的編碼起來。


沒有留言:

張貼留言

如何判斷現在FORM是在 insert mode? 還是 update mode?

只要用  if (empty({primary_key})) 就可以知道是否為新增模式了。 如果 {promary_key} 是空白的,那麼就是在新增模式;反之,就是更新模式。 以上。