mysql - Mariadb 不会将 CHARACTER_SET_RESULTS 从 latin1 更改为 utf8

标签 mysql vagrant mariadb

我正在使用 5.5.64-MariaDB MariaDB 服务器。我一生都无法将character_set_results更改为utf8。我试过ALTER DATABASE DBNAME CHARACTER SET utf8 COLLATE utf8_general_ci;我也尝试过SET SESSION CHARACTER_SET_CLIENT = utf8mb4; SET SESSION CHARACTER_SET_RESULTS = utf8mb4;

然后我进入 my.cnf,它看起来像这样

[mysqld]
datadir                         = /var/database/db
innodb_flush_log_at_trx_commit  = 2
query_cache_size                = 16M
collation-server = utf8mb4_unicode_ci
init-connect='SET NAMES utf8mb4'
character-set-server = utf8mb4
character_set_server   = utf8mb4
collation_server       = utf8mb4_unicode_ci
character_set_client: utf8mb4
character_set_database: utf8mb4
character_set_results: utf8mb4
character_set_connection: utf8mb4
character_set_server: utf8mb4

更改 my.cnf 后,我重新启动 mariadb,结果成功。

当我运行mysqladmin -u root -p var | grep -E 'character|collation' | tr -s ' '时我明白了

[vagrant@localhost vagrant]$ mysqladmin -u root -p var | grep -E 'character|collation' | tr -s ' '
Enter password:
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
| collation_connection | latin1_swedish_ci |
| collation_database | latin1_swedish_ci |
| collation_server | latin1_swedish_ci |

如何更改 CHARACTER_SET_RESULTS?我也尝试过SET SESSION CHARACTER_SET_RESULTS = utf8mb4;SET character_set_results = utf8mb4;但当我运行 java 集成测试时,它不断重置回 latin1。我搜索了我的项目,但找不到 latin1。我不知道为什么它不断重置为 latin1 以及如何将其更改为 utf8。有任何想法吗?我不认为将 mariadb 升级到 10.X 有帮助,但如果有人遇到这个问题,而这就是解决方案,我会尝试一下

最佳答案

全局设置是正确的,但是当客户端连接到服务器时,客户端会强制服务器更改字符集(默认情况下客户端工具和 Connector/C 使用 latin1)。

mysqladmin 的输出显示 session 变量已更改为 latin1,因为在连接握手期间 mysqladmin 告诉服务器使用 latin1。

mysqladmin 不从 [mysqld] 读取值,而是从 [mysql]、[client] 和 [mysqladmin] 组读取值。

如果您想强制所有客户端使用 utf8mb4,您可以在 [mysqld] 部分中执行此操作:

例如 init_connect=设置名称 utf8mb4

或者 跳过字符集客户端握手

关于mysql - Mariadb 不会将 CHARACTER_SET_RESULTS 从 latin1 更改为 utf8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59329914/

相关文章:

php - 如何在 php 中正确连接/转义此 sql 查询

mysql - 映射一对多关系时是否应该有一个单独的表?

mysql - 用于航空公司预订应用程序的动态结构化 mySQL 数据库

Docker 容器无法通过覆盖网络连接

rubygems - 如何控制 Vagrant 用于配置虚拟机的 Chef 版本?

mysql - Loadfile mysql 的问题

Mysql ALTER DATABASE 在外部 NTFS 驱动器上失败,错误代码 5

virtualbox - 从 VM 到主机共享目录

mysql - 为什么在 MariaDB 上创建表时出现此错误? "Could not getColumn for MyMariaDB: Unknown system variable ' 选项'"

mysql - mariadb 性能差 vs mysql