mysql - MySQL 8.0官方和Oracle Docker镜像的排序差异
问题描述
我们有一个使用mysql:8.0.18
Docker 库启动的开发环境。此映像不提供多架构(阅读:arm64)构建,因此我们想mysql/mysql-server:8.0.18
改用。
但是 - 我们在我们的应用容器启动期间(运行迁移时)一直遇到问题,mysql/mysql-server
仅使用:
ERROR: Illegal mix of collations (utf8mb4_unicode_ci,IMPLICIT) and (utf8mb4_0900_ai_ci,IMPLICIT) for operation '='
查看故障服务器的字符/排序规则变量:
mysql> show variables like "%collat%";
+-------------------------------+--------------------+
| Variable_name | Value |
+-------------------------------+--------------------+
| collation_connection | latin1_swedish_ci |
| collation_database | utf8mb4_0900_ai_ci |
| collation_server | utf8mb4_0900_ai_ci |
| default_collation_for_utf8mb4 | utf8mb4_0900_ai_ci |
+-------------------------------+--------------------+
4 rows in set (0.01 sec)
mysql> show variables like "%character%";
+--------------------------+--------------------------------+
| Variable_name | Value |
+--------------------------+--------------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql-8.0/charsets/ |
+--------------------------+--------------------------------+
8 rows in set (0.01 sec)
mysql>
我们有一个小的my.cnf
,它被放入两个图像中:
[mysqld]
explicit_defaults_for_timestamp=ON
sql_mode=NO_ENGINE_SUBSTITUTION
character_set_server=utf8 # removing this line has no effect on this issue
我有两个主要问题:
- MySQL 8.0.18 的官方 Docker 镜像和 Oracle 提供的副本之间的根本区别是什么,以及
- 我们如何配置我们的
mysql/mysql-server
容器以使其表现得更像mysql
?
链接:
解决方案
原来我们的习惯my.cnf
没有被阅读。我们把它放在:
/etc/mysql/conf.d/my.cnf
哪个适用于官方mysql
图像,但在mysql/mysql-server
变体中,它应该放在:
/etc/my.cnf
推荐阅读
- reactjs - 有什么方法可以将 Saga 与新的 React 钩子一起使用?
- jquery - 如何根据来自 JSON 数据源的搜索为文本框提供建议
- r - 在鼠标悬停弹出窗口中显示 r Shiny actionButton Title
- python - 查找从一个列表中的点到另一个列表中的点的最小距离之和?
- java - JUNG 库可以根据预定义的属性制作边吗?
- java - 如何在 Java Web 服务中嵌入和绑定 JSON 数据到 HTML 模板
- python - 输入不同城市的人口,然后打印各自城市的最大、最小人口
- bash - Bash 脚本:如何自动启动 VSC 并在集成终端内运行一些命令?
- electron - 修改源代码以及构建和退出我的桌面应用程序会影响其声誉吗?
- android - 检查按钮文本的正确方法?