歡迎光臨, 訪客. 請先 登入註冊一個帳號.
五月 11, 2024, 03:19:30 下午
19595 文章 在 3865 主題 由 4580 會員
最新註冊會員: aa123aa1
LifeType 中文開發論壇  |  支援  |  安裝與設定  |  一个乱码的问题 « 上篇主題 下篇主題 »
頁: [1]
作者 主題: 一个乱码的问题  (閱讀 7675 次)
zhust2003
新手見習
*
文章: 2


檢視個人資料
« 於: 七月 19, 2005, 10:44:11 下午 »

安装过程已经参见了http://wiki.lifetype.org.tw/,mysql的编码是utf8,但是为什么我的中文会是
如果您阅读到这篇文章,这就愿味翀您注册的忚客已绿申请房功。
我有试试发表文章,发现有些字会变得莫名其妙,就象上面,有些不会.
我看到论坛上有个和我类似的问题,但我不是很理解.希望得到各位的帮忙.thx
已記錄

版本:
php          5.0.4
apache     2.0.53
mysql       4.1.11
plog         1.0.1
zhust2003
新手見習
*
文章: 2


檢視個人資料
« 回覆文章 #1 於: 七月 20, 2005, 12:41:10 上午 »

我跟着http://ccca.net/~cwyeh/adodb_mysql_4.1.patch做了下
程式碼:
--- adodb-mysql.inc.php.bak      Wed Jun 15 19:58:22 2005
+++ adodb-mysql.inc.php      Thu Jun 16 00:55:58 2005
@@ -351,6 +351,7 @@
                 $this->_connectionID = mysql_connect($argHostname,$argUsername,$argPassword);
     
           if ($this->_connectionID === false) return false;
           if ($argDatabasename) return $this->SelectDB($argDatabasename);
           return true;      
     }
@@ -364,6 +365,7 @@
                 $this->_connectionID = mysql_pconnect($argHostname,$argUsername,$argPassword);
           if ($this->_connectionID === false) return false;
           if ($this->autoRollback) $this->RollbackTrans();
           if ($argDatabasename) return $this->SelectDB($argDatabasename);
           return true;      
     }
@@ -374,6 +376,43 @@
           return $this->_connect($argHostname, $argUsername, $argPassword, $argDatabasename);
     }
     
+      function _isSupportUtf8()
+      {
+            // check mysql version first. Version lower than 4.1 doesn't support utf8
+            $serverVersion = mysql_get_server_info($this->_connectionID);
+            $version = explode('.', $serverVersion);
+            if ($version[0] < 4) return false;
+            if ( ($version[0] == 4) && ($version[1] == 0) ) return false;
+            
+            // check if utf8 support was compiled in
+            $result = mysql_query("SHOW CHARACTER SET like 'utf8'", $this->_connectionID);
+            if (mysql_num_rows($result) > 0) {
+                  return true;
+            }
+            return false;
+      }
+      
+      function _getDbDefaultEncoding($argDatabasename)
+      {
+            if (!$argDatabasename) {
+                  return false;
+            }
+            
+            // We use a SHOW CREATE DATABASE command to show the original
+            // SQL character set when DB was created.
+            $result = mysql_query("SHOW CREATE DATABASE $argDatabasename", $this->_connectionID);
+            if (mysql_num_rows($result) < 0 ) {
+                  // The specified db name is wrong!
+                  return false;
+            }
+            $dbInfo = mysql_fetch_row($result);
+            $pattern = '/40100 DEFAULT CHARACTER SET (\w+) /';
+            if ( (preg_match($pattern, $dbInfo[1], $match) > 0) ) {
+                  return $match[1];
+            }
+            return false;
+      }
+      
     function &MetaColumns($table)
     {
           global $ADODB_FETCH_MODE;
@@ -445,7 +484,14 @@
     function SelectDB($dbName)
     {
           $this->databaseName = $dbName;
           if ($this->_connectionID) {
+                  if ($this->_isSupportUtf8() && $dbName) {
+                        $dbEncoding = $this->_getDbDefaultEncoding($argDatabasename);
+                        if ($dbEncoding) {
+                              mysql_query("SET NAMES $dbEncoding", $this->_connectionID);
+                        }
+                  }
                 return @mysql_select_db($dbName,$this->_connectionID);            
           }
           else return false;    

但是没有解决错别字问题,我的修改是直接把+号的东西加进去,因为不太理解作者的意图.
这是mark说的网址http://bugs.lifetype.net/view.php?id=590
用废弃的金山研究了好久依旧没解决,希望快点解决~支持plog
已記錄

版本:
php          5.0.4
apache     2.0.53
mysql       4.1.11
plog         1.0.1
markwu
系統管理員
超級會員
*****
文章: 3928


Mark Wu


檢視個人資料 個人網站
« 回覆文章 #2 於: 八月 09, 2005, 03:18:04 下午 »

這主要適用來給 mysql 4.1 用的! mysql 4.1 再處理 utf-8 跟 4.0 是很不一樣的。所以相同的程式在 4.0 可以運作,但是在 mysql 4.1 不一定可以運作。
的資料並無影響。加上 set names utf-8 主要是用來告訴 mysql 4.1 使用 UTF-8 來處理存取時的編碼。

加上這一斷程式後,對於之前已經存入 mysql 但是對於之後的資料,則會以正確的 utf-8 來存取。

所以你會看到之前的文章還是亂碼,但是在寫一篇新文章試試看,應該就是正常的了。

Mark
已記錄

頁: [1]
LifeType 中文開發論壇  |  支援  |  安裝與設定  |  一个乱码的问题 « 上篇主題 下篇主題 »
    前往: