我进行了服务器迁移并进行了审计。在新服务器上,我终于可以自由地将 MariaDB 升级到 10.11(需要 10.10 才能获得 Unicode 14.0 支持),之前一直停留在 Unicode 5.2 支持。
我已经通过 PHP 跟踪了这个问题print_r(mysqli_get_charset($db));
。更改服务器排序规则 ( SHOW VARIABLES LIKE '%coll%';
) 后,所有内容都正确显示为utf8mb4_uca1400_ai_ci
。我尚未更新数据库或表,它们utf8mb4_unicode_520_ci
目前都还好。
问题是print_r(mysqli_get_charset($db));
返回utf8mb4_general_ci
。因此,我通过从本地 MariaDB 安装开始进行调查,因为我正在运行所有查询日志。当您在 PHP 中运行该命令时,它会转换为以下查询:
SELECT `DEFAULT_COLLATION_NAME` FROM `information_schema`.`SCHEMATA` WHERE `SCHEMA_NAME`='__database_name_here__';
好的,我接受了该查询并在实时服务器上运行它并得到结果utf8mb4_unicode_520_ci
(再次,目前一切正常)。出于不相关的原因,我多次重启服务器,因此这不应该是“卡在内存中”的问题。
那么从哪里mysqli_get_charset($db)
获取utf8mb4_general_ci
排序规则以便我可以更新它?
我提交了一份 PHP 错误报告,简而言之:它们有一个内部静态字符集数组作为
utf8mb4_general_ci
后备。因此,获取字符集信息的适当方法是通过以下查询: