XAMPP/MySQLの文字化けについて ????
![XAMPP](https://img-proxy.blog-video.jp/images?url=http%3A%2F%2Fwww.apachefriends.org%2Fimg%2Fxampp-logo-new.gif)
![(´;へ;`)](https://emoji.ameba.jp/img/user/re/red-tear/13449.gif)
以前はEUCってセットが標準的だったのだが、Unicodeも整備されてきたので、最近は専らUTFにて構築することが多くなった。
この文字化けって… 実際、不具合とかそういうものではないのだが、結構悩まされてる方も多いように思う。
で、問題の文字化け解消方法につき、色々と書かれたサイトが見受けられるのだが…
とりあえず、今まではこれらのサーバーセットをインストールした後、下記のサイトにある方法でこれらの文字化けを回避していた。
http://cl.pocari.org/2006-06-17-1.html
要するに、-> の場所にある phpMyAdmin/libraries/database_interface.lib.php <-のファイルを編集するという方法。
4.1からの分岐処理部分をごっそり消してしまうという方法ですね。
823~877までの行をごっそりコメントアウトしてしまう方法。
![ダウン](https://stat.ameba.jp/blog/ucs/img/char/char2/175.gif)
※XAMPPのパッケージバージョンは当方の環境では1.6.3a
*****************************************************************
// If $lang is defined and we are on MySQL >= 4.1.x,
// we auto-switch the lang to its UTF-8 version (if it exists and user
// didn't force language)
if ( !empty($GLOBALS['lang'])
&& (substr($GLOBALS['lang'], -5) != 'utf-8')
&& !isset($GLOBALS['cfg']['Lang']) ) {
$lang_utf_8_version =
substr($GLOBALS['lang'], 0, strpos($GLOBALS['lang'], '-'))
. '-utf-8';
if (!empty($GLOBALS['available_languages'][$lang_utf_8_version])) {
$GLOBALS['lang'] = $lang_utf_8_version;
$GLOBALS['charset'] = 'utf-8';
define('PMA_LANG_RELOAD', 1);
}
}
// and we remove the non-UTF-8 choices to avoid confusion
if (!defined('PMA_REMOVED_NON_UTF_8')) {
foreach ( $GLOBALS['available_languages'] as $each_lang => $dummy ) {
if ( substr($each_lang, -5) != 'utf-8' ) {
unset( $GLOBALS['available_languages'][$each_lang] );
}
}
define('PMA_REMOVED_NON_UTF_8', 1);
}
$mysql_charset = $GLOBALS['mysql_charset_map'][$GLOBALS['charset']];
if ( $is_controluser
|| empty($GLOBALS['collation_connection'])
|| (strpos($GLOBALS['collation_connection'], '_')
? substr($GLOBALS['collation_connection'], 0, strpos($GLOBALS['collation_connection'], '_'))
: $GLOBALS['collation_connection']) == $mysql_charset) {
PMA_DBI_query('SET NAMES ' . $mysql_charset . ';', $link,
PMA_DBI_QUERY_STORE);
} else {
PMA_DBI_query('SET CHARACTER SET ' . $mysql_charset . ';', $link,
PMA_DBI_QUERY_STORE);
}
if (!empty($GLOBALS['collation_connection'])) {
PMA_DBI_query('SET collation_connection = \'' . $GLOBALS['collation_connection'] . '\';',
$link, PMA_DBI_QUERY_STORE);
}
if (!$is_controluser) {
$GLOBALS['collation_connection'] = PMA_DBI_get_variable('collation_connection',
PMA_DBI_GETVAR_SESSION, $link);
$GLOBALS['charset_connection'] = PMA_DBI_get_variable('character_set_connection',
PMA_DBI_GETVAR_SESSION, $link);
}
// Add some field types to the list, this needs to be done once per session!
if (!in_array('BINARY', $GLOBALS['cfg']['ColumnTypes']))
$GLOBALS['cfg']['ColumnTypes'][] = 'BINARY';
if (!in_array('VARBINARY', $GLOBALS['cfg']['ColumnTypes']))
$GLOBALS['cfg']['ColumnTypes'][] = 'VARBINARY';
*****************************************************************
しかーし!他のサイトもよく読んでみると照合順序を変更するだとか…って良く見かけるんですが、これ他の設定ファイル類を開いていじってみても、なかなか解決しないことが多い。
っていうか…ちゃんとみてませんでした( ´・ω・`)
![](https://stat.ameba.jp/user_images/77/70/10038794659_s.jpg?caw=800)
MySQL の接続照合順序の変更ではなく、DBを作成するとき
![重要](https://emoji.ameba.jp/img/user/ii/iinanihon/22265.gif)
個別のDB自身でそれぞれの照合順序を持つということですね…
![(´-ω-`)](https://emoji.ameba.jp/img/user/re/red-tear/3448.gif)
マニュアルでDB作成すれば、そういった部分にも気づくはずなのですが、便利なツールを使ってしまうとついつい見落としてしまいます。
そして、mysql の my( .cnf )ファイルを以下のように編集することでばっちりUTFで動作しました。
※ xamppの場合などは xampp/mysql/bin にある my.ini
===============================================
[mysqld]
port= 3306
socket = "C:/xampp/mysql/mysql.sock"
basedir = "C:/xampp/mysql"
tmpdir = "C:/xampp/tmp"
datadir = "C:/xampp/mysql/data"
pid_file = "mysql.pid"
# enable-named-pipe
key_buffer = 16M
max_allowed_packet = 1M
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
log_error = "mysql_error.log"
character-set-server = utf8
collation-server = utf8_unicode_ci
skip-character-set-client-handshake
===============================================
もしくは
character-set-server = latin1
collation-server = latin1_general_ci
![矢印](https://emoji.ameba.jp/img/user/mi/mikan0318/63881.gif)
character-set-server = utf8
collation-server = utf8_unicode_ci
skip-character-set-client-handshake
*********************************** バージョンが違う場合ではこんな追記を
[client]
default-character-set = utf8
[mysqld]
skip-character-set-client-handshake
default-character-set = utf8
character-set-server = utf8
collation-server = utf8_general_ci
init-connect = SET NAMES utf8
[mysqldump]
default-character-set = utf8
[mysql]
default-character-set = utf8