森林之原
五月 24, 2012, 12:22:10 am *
歡迎光臨, 訪客. 請先 登入註冊一個帳號.

請輸入帳號, 密碼以及預計登入時間
新聞: 官方釋出 SMF 2.0 beta。繁體中文已經完成。請到 SMF 的版面下載測試。如有問題請通知。
 
   首頁   說明 搜尋 日曆 登入 註冊  
頁: [1]   向下
  寄送主題  |  列印  
作者 主題: UTF-8 中文安裝 和 資料庫 的 問題  (閱讀 13576 次)
0 會員 以及 2 訪客 正在閱讀本篇主題.
Owl
初學者
*
離線 離線

文章: 46


« 於: 三月 22, 2005, 08:32:41 pm »

我有個奇怪的問題,已經搞了兩天了還是不知道錯在哪裡,簡直快瘋了。我下載並且安裝了 zencart 1.2.4.1 和 簡體中文 UTF-8 (找不到繁體),也還順利,可是當輸入中文分類之後,有些字變為 'Huh',比如 '草本' 就成了 'Huh本'。我用 phpMyAdmin查出,zencart 存入的不是 UTF-8 code,顯然 zencart 或 php 其他甚麼地方將字碼轉變了再存入 mysql。我換了繁體中文 big5 也一樣。頁面其他地方的中文都顯示的很好,就是從 mysql 出來的字有問題, 我用的是 Windows 2000 英文版, mysql 4.1.10a def character set=utf8  或 big5。 請問有人知道為甚麼嗎?

謝謝
向版主檢舉   已記錄
powerouch
fxxking coding monkey
實習生
***
離線 離線

文章: 237



« 回覆文章 #1 於: 三月 22, 2005, 11:55:03 pm »

瀏覽器的問題嗎?
checkpoint
1. 輸入的頁面是否 utf-8
2. browser 傳送的資料是否為 utf-8
3. 看看 mysql log 吧
向版主檢舉   已記錄

no more than a monkey....
Owl
初學者
*
離線 離線

文章: 46


« 回覆文章 #2 於: 三月 31, 2005, 03:20:00 pm »

謝謝您的幫助。
這是我碰到的情況;
如果 MySQL資料庫用的是 Latin1(default character set),那麼頁面上存入的中文都顯示的很好,可是在 phpmyAdmin 看到的都是亂碼,很不方便。如果資料庫用的是 UTF-8,那麼頁面上存入 MySQL 的中文就顯不出來,也不方便。
Zencart 接上 MySQL 時用的是 latin1_swedish_ci (default) ,PHP 將頁面上的 UTF-8 轉成 Latin1 交給 MySQL,如果資料庫用的是 UTF-8,MySQL 會再轉一次碼,才存入 資料庫,所以再顯示在頁面上就不行了。我將 Zencart 接上 MySQL 時設定為 UTF-8,如此前後一致,都是同碼,用 phpmyAdmin 就可看,可更改資料,SQL statement 直接輸入的中文都能清楚顯示在頁面上,在頁面上輸入中文資料也沒問題,很方便。
向版主檢舉   已記錄
seethrou
訪客
« 回覆文章 #3 於: 三月 31, 2005, 08:49:16 pm »

可以把您的做法和步驟詳細一點發表嗎? smiley01_023

這樣可以幫助日後有相同問題的人, smiley01_021

謝謝!
向版主檢舉   已記錄
powerouch
fxxking coding monkey
實習生
***
離線 離線

文章: 237



« 回覆文章 #4 於: 四月 01, 2005, 10:45:09 am »

謝謝您的幫助。
不客氣 smiley01_058
Zencart 接上 MySQL 時用的是 latin1_swedish_ci (default) ,PHP 將頁面上的 UTF-8 轉成 Latin1 交給 MySQL,如果資料庫用的是 UTF-8,MySQL 會再轉一次碼,才存入 資料庫,所以再顯示在頁面上就不行了。
關於 php 會否將接收到的 UTF-8 轉成 Latin1 交給 mysql
這點您確定嗎?至少乍聽之下我是懷疑的
當然,mysql 對 unicode 的支援很彈性也產生了很多麻煩
照您這樣講的:
UTF-8 -> Latin1 -> UTF-8
怎麼想都怪怪的
是不是 php 的 connection encoding 的問題?
check mysql_client_encoding()
底下的 user comment 有詳細做法
« 最後編輯時間: 四月 01, 2005, 11:19:38 am 由 powerouch » 向版主檢舉   已記錄

no more than a monkey....
powerouch
fxxking coding monkey
實習生
***
離線 離線

文章: 237



« 回覆文章 #5 於: 四月 01, 2005, 11:18:57 am »

剛稍微測了一下
mysql_client_encoding 似乎沒用
因為 mysql 的 character set 在四個地方分別不一樣:
server, client, database, connection
如果選擇了一個 utf8 的 db, db character set 會是 utf8
但只有這樣還不夠,因為這時重要的是 connection character set 預設仍是 latin1
於是會發生上面的問題
如果在 query 之前先執行
程式碼:
mysql> SET NAMES 'UTF8';
mysql> SET CHARACTER SET UTF8;
(mysql CLI 版)
程式碼:
mysql_query("SET NAMES 'UTF8'");
mysql_query("SET CHARACTER SET UTF8");
(PHP 版)
以上請注意單引號以及 character set name 是 UTF8(沒有一條橫線)
此時 server 和 connection character set 俱為 UTF8
似乎作用就沒問題了
我把上面的兩次 query 加在 cpg 的 include/functions.inc.php 如下:
程式碼:
*** include/functions.inc.php   Sat Apr  2 00:16:08 2005
--- include/functions.inc.php~  Sat Apr  2 00:04:14 2005
***************
*** 64,69 ****
--- 64,73 ----
                  return false;
          if (!mysql_select_db($CONFIG['dbname']))
                  return false;
+       if (!mysql_query("SET NAMES 'UTF8'", $result))
+               return false;
+       if (!mysql_query("SET CHARACTER SET UTF8", $result))
+               return false;
          return $result;
  }
(in function cpg_db_connect())
嘿!! 這回再試中文資料似乎沒什麼問題了
輸入->用 phpMyAdmin 看 ->再回到相簿本身
應該是大功告成了
要測的話來這裡
http://photo.javamoh.net/cpg/
有興趣的pm給我,我可以開管理者的權限給你
向版主檢舉   已記錄

no more than a monkey....
Owl
初學者
*
離線 離線

文章: 46


« 回覆文章 #6 於: 四月 01, 2005, 05:05:12 pm »

再次的謝謝您的幫助, 您解釋的非常清楚。
UTF-8 --> Latin1--> UTF-8 我想八九不離十,我 php 不熟,試用 zenstudio debug 也不成功,不能證實。

我是如此做的
1. 在 phpMyAdmin 建立 zencart 資料庫時將 Collation 定為 utf8_general_ci

2.更改 zencart\includes\classes\db\mysql\query_factory.php
在 function connect 裏,mysql_connect 之後加入SET NAMES 'utf8' 如下。

程式碼:
function connect($zf_host, $zf_user, $zf_password, $zf_database, $zf_pconnect = 'false', $zp_real = false) {
//@TODO error class required to virtualise & centralise all error reporting/logging/debugging
    $this->database = $zf_database;

    // pconnect disabled
    if (!$zf_pconnect == 'false') {
      $this->link = @mysql_connect($zf_host, $zf_user, $zf_password);
    } else {
      $this->link = @mysql_connect($zf_host, $zf_user, $zf_password);
    }
// -- Owl add  start -----------------------------
if (!mysql_query("SET NAMES 'utf8'", $this->link))
return false;
// -- Owl add  end ------------------------------
-
-
-
-


謝謝
向版主檢舉   已記錄
powerouch
fxxking coding monkey
實習生
***
離線 離線

文章: 237



« 回覆文章 #7 於: 四月 01, 2005, 10:31:21 pm »

所以,成功了嗎?
向版主檢舉   已記錄

no more than a monkey....
Owl
初學者
*
離線 離線

文章: 46


« 回覆文章 #8 於: 四月 02, 2005, 12:08:09 pm »

非常好。
 
我前面講的二個步驟是回覆 Seethrou 的,這二步驟就是我上面講的(3/31),我達成前後一致,都是UTF-8的方法。

還有 Zencart 既然是多語言,就應該加入能設定 connection character set 的功能,我想放在 configure.php 最好, 比如 define('DB_MYSQL_CHARACTERSET', 'utf8'); 在 zc_install 時給機會設定 connection character set 然後在 query_factory.php 裏用。
   ---- 如果 DB_MYSQL_CHARACTERSET 有值的話;
   {
   $char_cmd = "SET NAMES '" .DB_MYSQL_CHARACTERSET ."'";
   if (!mysql_query($char_cmd, $this->link))
      return false;
   }

我想這會方便許多。

向版主檢舉   已記錄
sea0964
友站版主
*
離線 離線

文章: 39


個人網站
« 回覆文章 #9 於: 二月 02, 2006, 07:38:10 pm »

http://www.deal13.net/modules/icontent/index.php?page=21
可以修改phpmyadmin也可以達成前後一致, 都是latin1, 這樣就不用動zencart了, 這樣不管你是架zencart或是xoops或是其他的軟體都可以用
向版主檢舉   已記錄

keima
初學者
*
離線 離線

文章: 4


« 回覆文章 #10 於: 十二月 08, 2006, 10:02:44 am »

本人使用的環境是MySQL 5.0.23版
主機是Linux(Fedora Core)
環境設定如下即可讓伺服器端及客戶端皆以UTF8進入

在/etc/my.cnf中修改加入下面部分(請自己對照一下)
程式碼:
[mysql]
default-character-set=utf8
[mysqld]
default-character-set=utf8
default-collation=utf8_general_ci
[mysql.server]
collation_server=utf8_general_ci
character_set_server=utf8

windows方面的設定應該長的差不多,設定檔是叫啥來著的我倒忘了
好像是mysql.ini吧
修改完之後不管是前端或是後端或是phpMyAdmin都搞定
« 最後編輯時間: 十二月 08, 2006, 11:48:50 am 由 keima » 向版主檢舉   已記錄
頁: [1]   向上
  寄送主題  |  列印  
 
前往:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.11 | SMF © 2006, Simple Machines LLC Valid XHTML 1.0! Valid CSS!