PhpMyAdmin

From LeakonWiki

Jump to: navigation, search

解决 PhpMyAdmin 字符乱码问题

PMA 强制使用 utf8 字符集连接 MySQL,忽略服务器本身的设置,以及 MySQL connection collation 的设置。

解决方法

找到 libraries/database_interface.lib.php 文件,找到下述代码,全部注释掉。

    if (! empty($GLOBALS['collation_connection'])) {
    	PMA_DBI_query("SET CHARACTER SET 'utf8';", $link, PMA_DBI_QUERY_STORE);
        $mysql_charset = explode('_', $GLOBALS['collation_connection']);
        PMA_DBI_query("SET collation_connection = '" . PMA_sqlAddslashes($GLOBALS['collation_connection']) . "';", $link, PMA_DBI_QUERY_STORE);
    } else {
        PMA_DBI_query("SET NAMES 'utf8' COLLATE 'utf8_general_ci';", $link, PMA_DBI_QUERY_STORE);
    }

看这段代码,他一定会强制设置 utf8 字符集的,注释掉,可以跳过这个设置。

打开 PMA 的 Variables 标签,能看到下面的几项配置:

character set client	latin1
character set connection	latin1
character set database	latin1
character set filesystem	binary
character set results	latin1
character set server	latin1
character set system	utf8

根据你的程序和服务器环境要求,想办法让这几项改为正确值,就能保证 PMA 字符集正确显示。

在我的这个项目环境中,服务器和数据库都是 latin1,修改 PMA 之前,看 Variables,"character set connection" 和 "character set results" 都被橘红色高亮,提示我全局设置是 latin1,但当前设置是 utf8,因此不论我怎么修改浏览器的字符集,都不能正确显示中文。

另外需要注意的地方,你要确定写入数据库的文字用的是什么字符集,比如你是把 gbk 字符写入数据库,那浏览器也应该设置为 gbk。

其实不难理解,数据库和表、字段,设置为任何字符集都可以,他就是一个数据的存储媒介,就好像一个文本文件,可以存到软盘、硬盘、DVD上,随你怎么存,文件里面的内容是固定不变的,你用 word 编辑的文件,那就要用 word 打开,用 ultraedit 打开一定是乱码。

Personal tools