Mysql PHPMyAdmin强制使用ut8mb4作为默认排序规则
好的,我花了一上午的时间试图更改XAMPP设置中的默认排序规则 问题是:我在视图中使用Format()将double转换为字符串Mysql PHPMyAdmin强制使用ut8mb4作为默认排序规则,mysql,utf-8,collation,Mysql,Utf 8,Collation,好的,我花了一上午的时间试图更改XAMPP设置中的默认排序规则 问题是:我在视图中使用Format()将double转换为字符串 CREATE VIEW `test` AS SELECT Format(some_data_table.double_number,0) AS string_result FROM some_data_table; 当我查看返回的列时,它显示为utf8mb4\u general\u ci。 我在my.ini和phpMyAdm
CREATE VIEW `test` AS
SELECT
Format(some_data_table.double_number,0) AS string_result
FROM some_data_table;
当我查看返回的列时,它显示为utf8mb4\u general\u ci。
我在my.ini和phpMyAdmin的config.inc.php中尝试了各种设置
无济于事
最后,我准备将collation参数添加到视图中
对于任何经过测试的解决方案,我将不胜感激(如果测试用例没有通过,我不会给你一个经过测试的解决方案。)
这里有一个可能的解释:
mysql> SELECT FORMAT(2e7, 0);
+----------------+
| FORMAT(2e7, 0) |
+----------------+
| 20,000,000 |
+----------------+
但是您在一个“区域设置”中工作,“千位分隔符”是
,而不是,
解决方案与排序规则无关。相反,请查看FORMAT()
的参数
我猜MS Access和MySQL采用了不同的“区域设置”,因此在数千个分隔符以及其他可能的差异上遇到了障碍
关于区域设置的引用:好的-我将为登陆这里的其他人发布我自己的答案: (我在别的地方见过这个,但当时不相信,因为没有解释) 当SQL Format()将数字转换为字符串时,它使用变量character\u set\u results。 PMA的变量选项卡将其显示为“utf8”,但在下面的一行上,它表示(会话值)=utf8mb4。
所以我知道PMA正在覆盖服务器默认值。 我真正的问题是,我找不到改变这种覆盖的方法——或者使用[mysqld]跳过字符集客户端握手设置。。或者通过编辑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\u MYSQL\u INT\u VERSION>50503似乎符合我关于较旧MYSQL版本的理论,因此我备份了该文件并编辑了类,在该函数中将utf8mb4替换为utf8。
phpMyAdmin现在在其变量选项卡中显示了我想要的内容,Format()函数现在返回了我期望的内容。在那里使用utf8mb4排序规则到底有什么问题…?它会导致MS Access在遇到该列时崩溃。这里的所有其他系统都是utf8_general_ciLet’s see the顽皮的字符串。谢谢rick-这是一个pMA问题-与MS Access无关。
// 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';
}