MariaDB设置默认字符集排序规则后Symfony创建数据库不生效问题
问题原因及解决方案
- 你执行的SET命令为临时会话配置,重启后自动失效
SET character_set_server/SET collation_server不加GLOBAL关键字时,仅对当前MariaDB控制台的会话生效,即便加了GLOBAL关键字,配置也只会保留到服务重启前,不会永久写入系统。
要永久配置服务端默认字符集和排序规则,需要修改MariaDB的配置文件:
- Linux系统修改
/etc/my.cnf或/etc/mysql/mariadb.conf.d/下的对应配置文件 - Windows系统修改安装目录下的
my.ini
在配置文件的[mysqld]段落添加以下两行:
character-set-server = utf8mb4 collation-server = utf8mb4_slovak_ci
修改完成后重启MariaDB服务,执行以下命令验证全局配置是否生效:
SHOW GLOBAL VARIABLES LIKE 'character_set_server'; SHOW GLOBAL VARIABLES LIKE 'collation_server';
- Symfony的Doctrine配置会覆盖服务端默认值
doctrine:database:create命令创建数据库时,会优先使用Doctrine自身配置的字符集和排序规则,而非MariaDB服务端的全局默认值。
你需要修改Symfony项目下config/packages/doctrine.yaml配置,确认dbal段落的字符集和排序规则配置正确:
doctrine: dbal: charset: utf8mb4 default_table_collation: utf8mb4_slovak_ci # 其余原有配置保持不变即可
如果使用的是旧版本Doctrine,将default_table_collation替换为collation参数即可。
修改配置后重新执行数据库创建命令即可得到符合预期的字符集配置。
内容的提问来源于stack exchange,提问作者Čamo
相关产品推荐
相关产品推荐

