PHPMyAdmin强制使用ut8mb4作为默认排序规则

时间:2016-03-17 15:45:30

标签: mysql utf-8 collation

好的,所以我上午尝试更改XAMPP设置的默认排序规则。

问题在于:我在视图中使用Format(),将double转换为字符串

{{1}}

当我查看返回的列时,它显示为utf8mb4_general_ci。 我在my.ini和phpMyAdmin的config.inc.php中尝试了各种设置 无济于事。

作为最后的手段,我准备将collat​​ion参数添加到view。

我很感激任何测试的解决方案

2 个答案:

答案 0 :(得分:1)

好的 - 我会为其他在此登陆的人发布自己的答案: (我在其他地方见过这个,但是没有时间相信它,因为没有解释)。

当SQL Format()将数字转换为字符串时,它使用变量 character_set_results 。 PMA的变量标签显示为" utf8"但是在下面的一行上,它说(会话值)= utf8mb4 所以我知道PMA覆盖了服务器默认值。 我真正的问题是我无法通过使用[mysqld] skip-character-set-client-handshake设置或编辑php.config.inc文件来找到更改此覆盖的方法。 今天我有一个突破..我确定如果我使用相同的PMA连接到较旧的MySQL服务器,问题没有发生。 这表明PMA在新的(有能力的)服务器上强制使用utf8mb4,而不是旧服务器。 我对phpmyadmin进行了文本搜索,找到字符串' mb4'并在类中找到以下代码: phpMyAdmin / libraries / DatabaseInterface.class.php

        // Skip charsets for Drizzle
    if (!PMA_DRIZZLE) {
        if (PMA_MYSQL_INT_VERSION >  50503) {
            $default_charset = 'utf8mb4';
            $default_collation = 'utf8mb4_general_ci';
        } else {
            $default_charset = 'utf8';
            $default_collation = 'utf8_general_ci';
        }

PMA_MYSQL_INT_VERSION> 50503 似乎符合我关于较旧的mysql版本的理论,所以我已经备份了该文件,并在此编辑了用 utf8 替换 utf8mb4 的类功能。 phpMyAdmin现在在其变量选项卡中显示我想要的内容,而Format()函数现在返回我期望的内容。

答案 1 :(得分:0)

(如果没有失败的测试用例,我不会给你一个经过测试的解决方案。)

这是一个可能的解释:

mysql> SELECT FORMAT(2e7, 0);
+----------------+
| FORMAT(2e7, 0) |
+----------------+
| 20,000,000     |
+----------------+

但您使用的是“区域设置”,其中“千位分隔符”为.,而不是,

该解决方案与COLLATION无关。相反,请查看FORMAT()的参数。

mysql> SELECT FORMAT(2e7, 0, 'de_DE');
+-------------------------+
| FORMAT(2e7, 0, 'de_DE') |
+-------------------------+
| 20.000.000              |
+-------------------------+

我猜测MS Access和MySQL假设不同的“Locales”,因此绊倒了数千个分隔符,可能还有其他差异。

区域设置参考:
http://dev.mysql.com/doc/refman/5.7/en/locale-support.html
http://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_lc_time_names