とりあえずプログラムを読んでみる。
通常アクセス(閲覧)は問題ない。もちろん変更や新規追加も問題ない。
動作の上では問題ないが、データベースには文字化けして記載されている。
どのような流れでこれを元に戻しているのか探ってみる。
スポンサードリンク
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
得られた結果は次のとおりだ
Charset | Description | Default collation | Maxlen |
---|---|---|---|
big5 | Big5 Traditional Chinese | big5_chinese_ci | 2 |
dec8 | DEC West European | dec8_swedish_ci | 1 |
cp850 | DOS West European | cp850_general_ci | 1 |
hp8 | HP West European | hp8_english_ci | 1 |
koi8r | KOI8-R Relcom Russian | koi8r_general_ci | 1 |
latin1 | cp1252 West European | latin1_swedish_ci | 1 |
latin2 | ISO 8859-2 Central European | latin2_general_ci | 1 |
swe7 | 7bit Swedish | swe7_swedish_ci | 1 |
ascii | US ASCII | ascii_general_ci | 1 |
ujis | EUC-JP Japanese | ujis_japanese_ci | 3 |
sjis | Shift-JIS Japanese | sjis_japanese_ci | 2 |
hebrew | ISO 8859-8 Hebrew | hebrew_general_ci | 1 |
tis620 | TIS620 Thai | tis620_thai_ci | 1 |
euckr | EUC-KR Korean | euckr_korean_ci | 2 |
koi8u | KOI8-U Ukrainian | koi8u_general_ci | 1 |
gb2312 | GB2312 Simplified Chinese | gb2312_chinese_ci | 2 |
greek | ISO 8859-7 Greek | greek_general_ci | 1 |
cp1250 | Windows Central European | cp1250_general_ci | 1 |
gbk | GBK Simplified Chinese | gbk_chinese_ci | 2 |
latin5 | ISO 8859-9 Turkish | latin5_turkish_ci | 1 |
armscii8 | ARMSCII-8 Armenian | armscii8_general_ci | 1 |
utf8 | UTF-8 Unicode | utf8_general_ci | 3 |
ucs2 | UCS-2 Unicode | ucs2_general_ci | 2 |
cp866 | DOS Russian | cp866_general_ci | 1 |
keybcs2 | DOS Kamenicky Czech-Slovak | keybcs2_general_ci | 1 |
macce | Mac Central European | macce_general_ci | 1 |
macroman | Mac West European | macroman_general_ci | 1 |
cp852 | DOS Central European | cp852_general_ci | 1 |
latin7 | ISO 8859-13 Baltic | latin7_general_ci | 1 |
cp1251 | Windows Cyrillic | cp1251_general_ci | 1 |
cp1256 | Windows Arabic | cp1256_general_ci | 1 |
cp1257 | Windows Baltic | cp1257_general_ci | 1 |
binary | Binary pseudo charset | binary | 1 |
geostd8 | GEOSTD8 Georgian | geostd8_general_ci | 1 |
cp932 | SJIS for Windows Japanese | cp932_japanese_ci | 2 |
eucjpms | UJIS for Windows Japanese | eucjpms_japanese_ci | 3 |
データベースの現在の設定は次のSQLで得ることができる
SHOW VARIABLES LIKE 'char%';
Variable_name | Value |
---|---|
character_set_client | utf8 |
character_set_connection | utf8 |
character_set_database | utf8 |
character_set_filesystem | binary |
character_set_results | utf8 |
character_set_server | utf8 |
character_set_system | utf8 |
character_sets_dir | /usr/local/mysql-src-5.1.22/share/mysql/charsets/ |
照合順序は次の通り
操作 | 照合順序 | サイズ |
faq_faqadminlog | MyISAM | utf8_general_ci |
faq_faqcaptcha | MyISAM | utf8_general_ci |
faq_faqcategories | MyISAM | utf8_general_ci |
faq_faqcategoryrelations | MyISAM | utf8_general_ci |
faq_faqcategory_group | MyISAM | utf8_general_ci |
faq_faqcategory_user | MyISAM | utf8_general_ci |
faq_faqchanges | MyISAM | utf8_general_ci |
faq_faqcomments | MyISAM | utf8_general_ci |
faq_faqconfig | MyISAM | utf8_general_ci |
faq_faqdata | MyISAM | utf8_general_ci |
faq_faqdata_group | MyISAM | utf8_general_ci |
faq_faqdata_revisions | MyISAM | utf8_general_ci |
faq_faqdata_tags | MyISAM | utf8_general_ci |
faq_faqdata_user | MyISAM | utf8_general_ci |
faq_faqglossary | MyISAM | utf8_general_ci |
faq_faqgroup | MyISAM | utf8_general_ci |
faq_faqgroup_right | MyISAM | utf8_general_ci |
faq_faqlinkverifyrules | MyISAM | utf8_general_ci |
faq_faqnews | MyISAM | utf8_general_ci |
faq_faqquestions | MyISAM | utf8_general_ci |
faq_faqright | MyISAM | utf8_general_ci |
faq_faqsearches | MyISAM | utf8_general_ci |
faq_faqsessions | MyISAM | utf8_general_ci |
faq_faqstopwords | MyISAM | utf8_general_ci |
faq_faqtags | MyISAM | utf8_general_ci |
faq_faquser | MyISAM | utf8_general_ci |
faq_faquserdata | MyISAM | utf8_general_ci |
faq_faquserlogin | MyISAM | utf8_general_ci |
faq_faquser_group | MyISAM | utf8_general_ci |
faq_faquser_right | MyISAM | utf8_general_ci |
faq_faqvisits | MyISAM | utf8_general_ci |
faq_faqvoting | MyISAM | utf8_general_ci |
32 テーブル | MyISAM | utf8_general_ci |
うーん。。。
コメント