"set names" "character_set_database" 文字化け

EUC-JPで出来てるサイトをCodeIgniterでモバイルサイト作りたくて

  • プログラム:UTF-8
  • データベース:ujis
  • 表示:SJIS-win
にしてみたんだ・・。

セキュリティーに問題があるらしいけどとりあえず
「 SET NAMES utf8 」 で表示まで出来て完成だ。と思っていたら
環境依存文字が文字化けしていた。

とりあえず、「 SET NAMES binary 」で通過させて

	function _fetch_assoc()
	{
		$temp = mysql_fetch_assoc($this->result_id);
                //IBM拡張文字(郄粼鄢藭蘄など)に対応
                //NEC拡張文字(①②㈱㌍ⅠⅡ礴祆など)に対応
		mb_convert_variables( 'SJIS-win','EUC-JP',$temp);
		mb_convert_variables( 'utf-8','SJIS-win',$temp);
		return $temp;
		return mysql_fetch_assoc($this->result_id);
	}

このようにPHP側でエンコードすると問題なく表示されるので、
MySQLで手っ取り早くできないか調べてみた。


・・・どこ見ても載ってない!
eucjpms なるものがあるらしいけど eucJP-winとの互換性はないそうだ。

たぶん ujis→utf8 の処理をしてるときに化けてるだろうから
ujisをeucJP-winみたいにできたらいいんだけど、なんかなにやっても変わらない。
どっかでキャッシュされてたりして Ctrl+F5でもクリアされなくて検証どころではなくなってしまった。


ちなみに検証する為に調べていたときに使えそうなものを発見したので記述しておく。

SET character_set_database = 'utf8'
この記述で「 SET NAMES 」で、変更できない箇所も変えることができた。

mysql> show variables like 'char%';
+--------------------------+--------------------------------+
| Variable_name            | Value                          |
+--------------------------+--------------------------------+
| character_set_client     | latin1                         |
| character_set_connection | latin1                         |
| character_set_database   | ujis                           |
| character_set_filesystem | binary                         |
| character_set_results    | latin1                         |
| character_set_server     | utf8                           |
| character_set_system     | utf8                           |
| character_sets_dir       | C:\xampp\mysql\share\charsets\ |
+--------------------------+--------------------------------+
8 rows in set (0.00 sec)

mysql> SET character_set_database = 'utf8';
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like 'char%';
+--------------------------+--------------------------------+
| Variable_name            | Value                          |
+--------------------------+--------------------------------+
| character_set_client     | latin1                         |
| character_set_connection | latin1                         |
| character_set_database   | utf8                           |
| character_set_filesystem | binary                         |
| character_set_results    | latin1                         |
| character_set_server     | utf8                           |
| character_set_system     | utf8                           |
| character_sets_dir       | C:\xampp\mysql\share\charsets\ |
+--------------------------+--------------------------------+
8 rows in set (0.00 sec)

mysql> set names utf8;
Query OK, 0 rows affected (0.00 sec)

mysql> 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       | C:\xampp\mysql\share\charsets\ |
+--------------------------+--------------------------------+
8 rows in set (0.00 sec)

set character_set_client = utf8
,character_set_connection = utf8
,character_set_database = utf8
,character_set_filesystem = utf8
,character_set_results = utf8
,character_set_server = utf8;
#,character_set_system = utf8;