phpMyAdminが文字化けする
PHP+MySQLで開発の際は文字コードをUTF-8に統一しているのですが、
何故かphpMyAdminで日本語が化ける…
ネットで調べていくつかやってみました。
因みに環境はこちら
CeontOS5.6
PHP5.1.6
MySQL5.0.77
phpMyAdmin2.11.11.3
php_value default_charset UTF-8 php_value mbstring.internal_encoding UTF-8 php_value mbstring.script_encoding UTF-8 php_value mbstring.http_output UTF-8
[mysqld] character-set-server = utf8 collation-server = utf8_general_ci init-connect = SET NAMES utf8 default-character-set = utf8 skip-character-set-client-handshake [mysqldump] default-character-set = utf8 [mysql] default-character-set = utf8
対策3.
phpMyAdminの文字コード設定
config.inc.phpに
$cfg['DefaultLang'] = 'ja-utf-8'; $cfg['DefaultCharset'] = 'utf-8';
対策4.
DBのテーブル毎の文字セットを設定する。
今回はutf8_general_ciに統一。
結果。。。
解決せず…
最終的に解決した対策はこちら
http://ma-bank.com/item/643
phpMyAdmin/libraries/database_interface.lib.phpの820行付近にある
function PMA_DBI_postConnectを書き換える。
function PMA_DBI_postConnect($link, $is_controluser = false) { if (!defined('PMA_MYSQL_INT_VERSION')) { $mysql_version = PMA_DBI_fetch_value( 'SELECT VERSION()', 0, 0, $link, PMA_DBI_QUERY_STORE); if ($mysql_version) { $match = explode('.', $mysql_version); define('PMA_MYSQL_INT_VERSION', (int) sprintf('%d%02d%02d', $match[0], $match[1], intval($match[2]))); define('PMA_MYSQL_STR_VERSION', $mysql_version); unset($mysql_version, $match); } else { define('PMA_MYSQL_INT_VERSION', 32332); define('PMA_MYSQL_STR_VERSION', '3.23.32'); } } if (!defined('PMA_ENGINE_KEYWORD')) { if (PMA_MYSQL_INT_VERSION >= 40102) { define('PMA_ENGINE_KEYWORD','ENGINE'); } else { define('PMA_ENGINE_KEYWORD','TYPE'); } } if (PMA_MYSQL_INT_VERSION >= 40100) { // 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 // (unless there is a forced language) if (!defined('PMA_REMOVED_NON_UTF_8') && ! isset($GLOBALS['cfg']['Lang'])) { 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'; } } else { require_once './libraries/charset_conversion.lib.php'; } }
から以下へ
function PMA_DBI_postConnect($link, $is_controluser = false) { require_once('./libraries/charset_conversion.lib.php'); }
参考:
http://d.hatena.ne.jp/do-low/20090325/1237950871
http://studyroom.g.hatena.ne.jp/pha/20080309/p2