phpMyAdminが文字化けする

PHP+MySQLで開発の際は文字コードUTF-8に統一しているのですが、
何故かphpMyAdminで日本語が化ける…

ネットで調べていくつかやってみました。

因みに環境はこちら
CeontOS5.6
PHP5.1.6
MySQL5.0.77
phpMyAdmin2.11.11.3


対策1.
PHPの内部文字コード設定

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


対策2.
MySQL文字コード設定

[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