[phpmyfaq] データベース文字化けを直す(2)

とりあえずプログラムを読んでみる。

通常アクセス(閲覧)は問題ない。もちろん変更や新規追加も問題ない。
動作の上では問題ないが、データベースには文字化けして記載されている。
どのような流れでこれを元に戻しているのか探ってみる。

スポンサードリンク

index.php に以下のようなものがある

$title    = ' - ' . $faq->getRecordTitle($id);

index.phpを読んでもコンバート処理などしている様子はないので、どうやら正しい結果が既に渡されているようだ。
それでは $faq は何か?同ファイルに次のようにある

$faq = new PMF_Faq($current_user, $current_groups);

それでは PMF_Faq はどれか。
/inc/Faq.php がそれのようだ。

    public function getRecordTitle($id)
    {
        if (isset($this->faqRecord['id']) && ($this->faqRecord['id'] == $id)) {
            return $this->faqRecord['title'];
        }
        $query = sprintf(
            "SELECT
                thema
            FROM
                %sfaqdata
            WHERE
                id = %d AND lang = '%s'",
            SQLPREFIX,
            $id,
            $this->language
            );
        $result = $this->db->query($query);
        if ($this->db->num_rows($result) > 0) {
            while ($row = $this->db->fetch_object($result)) {
                $output = $row->thema;
            }
        } else {
            $output = $this->pmf_lang['no_cats'];
        }
        return $output;
    }

ここでも特に変換処理は無いようだ。
/inc/PMF_DB/Mssql.php には次のようにある。

    function query($query)
    {
        $this->sqllog .= pmf_debug($query);
        return @mssql_query($query, $this->conn);
    }

ここでも特に変換処理は無い。

---

ここまでくるとデータベース作成そのものに問題があったのではないかと疑うようになった。
今回はcoreserverを利用している。このサーバは簡単にDBを作成することができる。
MySQLのDBはEUC-JP、Unicode、Shift-JISが選べる(=SQLを発行して作っていない)

サポートされている文字種を調べるには次のSQLを発行すると得ることができる。

SHOW CHARACTER SET

得られた結果は次のとおりだ

CharsetDescriptionDefault collationMaxlen
big5Big5 Traditional Chinesebig5_chinese_ci2
dec8DEC West Europeandec8_swedish_ci1
cp850DOS West Europeancp850_general_ci1
hp8HP West Europeanhp8_english_ci1
koi8rKOI8-R Relcom Russiankoi8r_general_ci1
latin1cp1252 West Europeanlatin1_swedish_ci1
latin2ISO 8859-2 Central Europeanlatin2_general_ci1
swe77bit Swedishswe7_swedish_ci1
asciiUS ASCIIascii_general_ci1
ujisEUC-JP Japaneseujis_japanese_ci3
sjisShift-JIS Japanesesjis_japanese_ci2
hebrewISO 8859-8 Hebrewhebrew_general_ci1
tis620TIS620 Thaitis620_thai_ci1
euckrEUC-KR Koreaneuckr_korean_ci2
koi8uKOI8-U Ukrainiankoi8u_general_ci1
gb2312GB2312 Simplified Chinesegb2312_chinese_ci2
greekISO 8859-7 Greekgreek_general_ci1
cp1250Windows Central Europeancp1250_general_ci1
gbkGBK Simplified Chinesegbk_chinese_ci2
latin5ISO 8859-9 Turkishlatin5_turkish_ci1
armscii8ARMSCII-8 Armenianarmscii8_general_ci1
utf8UTF-8 Unicodeutf8_general_ci3
ucs2UCS-2 Unicodeucs2_general_ci2
cp866DOS Russiancp866_general_ci1
keybcs2DOS Kamenicky Czech-Slovakkeybcs2_general_ci1
macceMac Central Europeanmacce_general_ci1
macromanMac West Europeanmacroman_general_ci1
cp852DOS Central Europeancp852_general_ci1
latin7ISO 8859-13 Balticlatin7_general_ci1
cp1251Windows Cyrilliccp1251_general_ci1
cp1256Windows Arabiccp1256_general_ci1
cp1257Windows Balticcp1257_general_ci1
binaryBinary pseudo charsetbinary1
geostd8GEOSTD8 Georgiangeostd8_general_ci1
cp932SJIS for Windows Japanesecp932_japanese_ci2
eucjpmsUJIS for Windows Japaneseeucjpms_japanese_ci3

データベースの現在の設定は次のSQLで得ることができる

SHOW VARIABLES LIKE 'char%';
Variable_nameValue
character_set_clientutf8
character_set_connectionutf8
character_set_databaseutf8
character_set_filesystembinary
character_set_resultsutf8
character_set_serverutf8
character_set_systemutf8
character_sets_dir/usr/local/mysql-src-5.1.22/share/mysql/charsets/

照合順序は次の通り

操作照合順序サイズ
faq_faqadminlogMyISAMutf8_general_ci
faq_faqcaptchaMyISAMutf8_general_ci
faq_faqcategoriesMyISAMutf8_general_ci
faq_faqcategoryrelationsMyISAMutf8_general_ci
faq_faqcategory_groupMyISAMutf8_general_ci
faq_faqcategory_userMyISAMutf8_general_ci
faq_faqchangesMyISAMutf8_general_ci
faq_faqcommentsMyISAMutf8_general_ci
faq_faqconfigMyISAMutf8_general_ci
faq_faqdataMyISAMutf8_general_ci
faq_faqdata_groupMyISAMutf8_general_ci
faq_faqdata_revisionsMyISAMutf8_general_ci
faq_faqdata_tagsMyISAMutf8_general_ci
faq_faqdata_userMyISAMutf8_general_ci
faq_faqglossaryMyISAMutf8_general_ci
faq_faqgroupMyISAMutf8_general_ci
faq_faqgroup_rightMyISAMutf8_general_ci
faq_faqlinkverifyrulesMyISAMutf8_general_ci
faq_faqnewsMyISAMutf8_general_ci
faq_faqquestionsMyISAMutf8_general_ci
faq_faqrightMyISAMutf8_general_ci
faq_faqsearchesMyISAMutf8_general_ci
faq_faqsessionsMyISAMutf8_general_ci
faq_faqstopwordsMyISAMutf8_general_ci
faq_faqtagsMyISAMutf8_general_ci
faq_faquserMyISAMutf8_general_ci
faq_faquserdataMyISAMutf8_general_ci
faq_faquserloginMyISAMutf8_general_ci
faq_faquser_groupMyISAMutf8_general_ci
faq_faquser_rightMyISAMutf8_general_ci
faq_faqvisitsMyISAMutf8_general_ci
faq_faqvotingMyISAMutf8_general_ci
32 テーブルMyISAMutf8_general_ci

うーん。。。

コメント