携帯サイトを作るにあたり、大体無難にSJISを使う。
正しくはSJIS-WINというものなのだが。
だからDBもSJIS。
MySQL4.X・phpMyadmin4.X系はSJIS管理がしやすくなってるが、
今更このバージョンはないかなぁと思うが、
MySQL5からはphpMyAdminのデフォルトver5.X系だから、UTF-8がデフォルト。
形も変わってるしで管理しづらくなっちゃうのね。
でもテスト環境作るのに、わざわざバージョンダウンしたくないし、
環境設定も変えたくない の 対応策。
解決策
mySQLにログインして
show variables like "char%";
で文字コードを確認したら明らかだったので、my.cnfを変更。
MySQLのcharsetをutf8に変更する方法
※my.cnfがない場合があるが、なければ作って大丈夫。
つまるとこphpMyadminの文字化け対応だね。
SET NAMES cp932;
とテーブルの文字コードの変更を忘れずに!
これまでの経歴
どうしたもんだかでここに行き着くまでの何やかんや。
下記は、あとで使えるかもしれないと取っておくだけで、修正方法としては使えない。
phpMyAdmin version2.X系(2.11.9.Xとか)
A案『メニューを無理矢理作ってみる』
phpMyAdmin/libraries/database_interface.lib.php
を
function PMA_DBI_postConnect($link, $is_controluser = false) { if (!defined('PMA_MYSQL_INT_VERSION')) { (略) } /* if (PMA_MYSQL_INT_VERSION >= [数字入ってる]) { (略) } else { require_once './libraries/charset_conversion.lib.php'; }*/ require_once('./libraries/charset_conversion.lib.php'); }
と修正すればOK。
でも選んで見れるようになっただけで
『MySQL の接続照合順序』が変更が出来ない…。
しかし『sjis_japanese_ci』でテーブル作ると
UPDATE happytarot.member_mst SET nickname = '田中太郎' WHERE member_mst.member_id =17;
で
Warning: #1366 Incorrect string value: '\xBE\x98Y' for column 'nickname' at row 1
て出て更新されない。
選択後、どっかで
mysql_query('SET NAMES 文字コード;');
とか
SELECT _sjis 'DB名' COLLATE sjis_japanese_ci
を実行する書き足しが必要くさいという噂だけど
試してみたけど、無理臭い。
B案『PHP側でSJIS固定としておく』
phpMyAdmin/config.phpを作る。
あるならいいけど、新規に作る際には
<?php $cfg['Lang'] = 'ja-sjis'; ?>
※EUCなら『$cfg['Lang'] = 'ja-euc';』
とすると
『MySQL の文字セット』が『Shift-JIS Japanese (sjis) 』となり、
『MySQL の接続照合順序』が変更可能となるのだ。
しかし先ほど同様『sjis_japanese_ci』でテーブル作ると
UPDATE happytarot.member_mst SET nickname = '田中太郎' WHERE member_mst.member_id =17;
で
Warning: #1366 Incorrect string value: '\xBE\x98Y' for column 'nickname' at row 1
て出て更新されない。
[結論]解決策
テーブルを『utf8_japanese_ci』で作成、
A案の修正をしたphpMyAdminで、japanese(sjis)選択状態で
UPDATE happytarot.member_mst SET nickname = '田中太郎' WHERE member_mst.member_id =17;
を実行したところで、文字化けもせずに反映された。
ブラウザで確認してみても表示の文字化けも出ず、
PHPとかアプリケーション側で更新も試してみたところ、
何1つ問題無く更新出来たのを確認した。
CSV形式でエクスポートしてみても問題ない。ちゃんとSJIS。
でも
使えるんだけど、
使えるんだけど、
ちゃうやろ。
phpMyAdmin version3.X系(3.1.1とか)
2.X系と同じことしても全然ダメ。
半日かけて調べているけど、まるでダメだ。
どうしたらいいのか、誰かアドバイスをくれ…。
とりあえず2系にしておいた方がいいかと。見ることは出来るようになるし。
因みに
照合順序の『utf8_japanese_ci』の『_ci』て何かと思ったら
『_ci』は『大文字と小文字が区別されない』なのだそうだ。
デフォルトでそういうものだと思ってた。
他にも
『_cs』 『大文字と小文字が区別される』
『_bin』 『バイナリ』
があるそうですわ。
へ~
※参照
- phpMyAdminの文字化け解消 - 株式会社M&Aバンク
- サイト構築日記 文字化け 『phpMyAdmin』 phpMyAdmin
- 合成獣の隠れ家 PHP5+MySQL5でのEUC-JP運用
- サーバ移転にまつわるエトセトラ(主にMySQL5の文字化け対策) - 株式会社M&Aバンク
- 文字化けについて
- 遠近両用: phpMyAdmin 3.1.1
更新@2011.01.04 14:32
コメント