MySQLで異なる文字コードを持ったデータベースを運用する方法

MySQLrpmでインストールした状態で、utf8のデータベースとujisで運用していたXoopsを並列で稼動するために取った方法を説明します。


[環境]
MySQLrpmでインストール => latin1
データベース1 -> utf8
データベース2 -> ujis
*データベース2 = xoops


[問題]
my.cnfでdefault-character-setを設定してしまうと、全データベースに影響を及ぼす。
具体的には、MySQL文字コード変換により片方は文字が化けてしまう。


[対応]
xoops側で接続時に文字コードを設定するようにした。

vi xoops/class/database/mysqldatabase.php
---
        function connect($selectdb = true)        {
                if (XOOPS_DB_PCONNECT == 1) {
                        $this->conn = @mysql_pconnect(XOOPS_DB_HOST, XOOPS_DB_USER, XOOPS_DB_PASS);
                } else {
                        $this->conn = @mysql_connect(XOOPS_DB_HOST, XOOPS_DB_USER, XOOPS_DB_PASS);
                }
      
                if (!$this->conn) {
                        $this->logger->addQuery('', $this->error(), $this->errno());
                        return false;
                }
              
                if($selectdb != false){
                        if (!mysql_select_db(XOOPS_DB_NAME)) {
                                $this->logger->addQuery('', $this->error(), $this->errno());
                                return false;
                        }
                }

+                /* add */
+                $sql = "SET NAMES 'ujis'";
+                mysql_query($sql, $this->conn);

                return true;
        }
---

[参考]
http://iandeth.dyndns.org/mt/ian/archives/000108.html