LifeType 中文開發論壇

支援 => 安裝與設定 => 主題作者是: zhust2003 於 七月 19, 2005, 10:44:11 下午



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


主題: 一个乱码的问题
作者: zhust2003七月 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


主題: 一个乱码的问题
作者: markwu八月 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