You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL:如何更新session_variables中的collation_database变量?

解决MySQL 8.0会话变量collation_database无法修改的问题

核心原因说明

  1. performance_schema.session_variables是只读监控表,不允许直接UPDATE修改,哪怕root用户也没有权限,这是MySQL的设计规则,该表仅用于查看会话变量状态。
  2. collation_database会话变量的值并非通过SET SESSION直接设置生效,它是当前默认数据库的排序规则的镜像值——当你切换或使用某个数据库时,这个变量会自动同步该数据库本身的排序规则,手动执行SET SESSION collation_database = ...不会产生实际效果。

具体解决步骤

1. 检查当前默认数据库的排序规则

先确认你当前会话使用的数据库:

SELECT DATABASE();

再查询该数据库的排序规则:

SELECT collation_name FROM information_schema.schemata WHERE schema_name = '你的数据库名称';

如果结果是utf8mb3_general_ci,说明问题出在数据库本身的排序规则设置上。

2. 修改数据库的排序规则

执行以下语句修改目标数据库的字符集和排序规则:

ALTER DATABASE 你的数据库名称 CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;

3. 同步会话变量

修改数据库后,你需要:

  • 关闭当前会话,重新连接MySQL;
  • 或者在当前会话中重新执行USE 你的数据库名称;,此时collation_database会自动同步为数据库的新排序规则utf8mb4_0900_ai_ci。

4. 全局配置持久化(可选)

为了让新创建的数据库默认使用utf8mb4字符集,修改MySQL配置文件(my.cnf或my.ini),在[mysqld]段添加:

character-set-server=utf8mb4
collation-server=utf8mb4_0900_ai_ci

保存后重启MySQL服务,后续新创建的数据库和会话都会默认使用该配置。

5. 修改现有表和列的字符集(可选)

注意:修改数据库的排序规则不会自动更新现有表和列的设置,若需要统一所有表的字符集,需逐个执行:

ALTER TABLE 表名 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;

内容的提问来源于stack exchange,提问作者peppy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 04:12:46