phpMyAdminで文字コードを変更

携帯サイトを作るにあたり、大体無難に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系にしておいた方がいいかと。見ることは出来るようになるし。

phpMyAdminをダウンロード

因みに

照合順序の『utf8_japanese_ci』の『_ci』て何かと思ったら
『_ci』は『大文字と小文字が区別されない』なのだそうだ。
デフォルトでそういうものだと思ってた。

他にも
『_cs』 『大文字と小文字が区別される』
『_bin』 『バイナリ』
があるそうですわ。
へ~

※参照

更新@2011.01.04 14:32

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です