当前位置: 首页 > 知识库问答 >
问题:

mysql - docker run 无法指定MySQL字符集?

徐翔
2023-05-12

Docker Hub MySQL中给了一个例子,说是可以在启动容器的时候指定字符集:

$ docker run \ 
    --name some-mysql \ 
    -e MYSQL_ROOT_PASSWORD=my-secret-pw \
    -d mysql:tag \
    --character-set-server=utf8mb4 \
    --collation-server=utf8mb4_unicode_ci

复制这个命令实际启动了一个容器,进去后看了下字符集好像没有变化:

$ show variables like '%char%';
+--------------------------+--------------------------------+
| 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     | utf8mb3                        |
| character_sets_dir       | /usr/share/mysql-8.0/charsets/ |
+--------------------------+--------------------------------+
8 rows in set (0.00 sec)

有大佬知道这是为什么吗?

共有1个答案

章宏峻
2023-05-12

自定义配置文件可以实现。

在宿主机新建一个配置文件,文件名随意,后缀须为.cnf

$ vim character_set.cnf

拷贝以下内容粘贴至文件:

[mysqld]
character-set-server = utf8mb4
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4

保存并退出。

然后启动时将容器的/etc/mysql/conf.d挂载到该文件所在目录:

$ docker run \
    --name mysql \
    -v /path/to/cusotm:/etc/mysql/conf.d \
    -e MYSQL_ROOT_PASSWORD=my-secret-pw \
    -d mysql:tag

启动后进入容器登录MySQL

$ show variables like '%char%';
+--------------------------+--------------------------------+
| Variable_name            | Value                          |
+--------------------------+--------------------------------+
| character_set_client     | utf8mb4                        |
| character_set_connection | utf8mb4                        |
| character_set_database   | utf8mb4                        |
| character_set_filesystem | binary                         |
| character_set_results    | utf8mb4                        |
| character_set_server     | utf8mb4                        |
| character_set_system     | utf8mb3                        |
| character_sets_dir       | /usr/share/mysql-8.0/charsets/ |
+--------------------------+--------------------------------+
8 rows in set (0.01 sec)

可以看到字符集已正确设置。


MySQL - 设置字符集

 类似资料:
  • 问题内容: Cookie是使用big5集编码的,因此无法插入MySQL。您能帮我解决这个问题吗? 字段:是eng,是日期,是汉字。 问题答案: 创建表时使用 UTF-8 。 插入表格时使用 UTF-8 阅读更多 和更多 详细代码 下面的代码是经过测试的代码,请执行以下工作。 如果您已经创建了数据库,请按以下代码更改它。如果没有创建数据库,则创建数据库并将Collat​​ion设置为utf8_uni

  • 问题内容: 在两台计算机的HTML文件中显示数据库的结果时出现问题。 因此,在一台计算机上它显示的名称是这样的: 数据库的排序规则为,表的排序规则为。 在另一台计算机上,它显示如下(我希望这样): 名称在标签中列出。两种浏览器的语言是英语,并且Html文件在两种环境下都相同,所以我认为这与php.ini文件的字符集或编码有关 我曾尝试更改中的值,但没有任何变化,我在任何地方都找不到答案。 唯一的区

  • 问题内容: 我正在使用 mysql dbms存储来自Wikipedia的页面。我已使用指令在my.cnf文件中将字符集编码设置为(维基百科编码): 并使用属性定义创建了我的数据库。 我还通过以下方式更改了mysqld客户端的字符集编码: 在初始化我的jdbc驱动程序时插入属性。 进行查询 但是我注意到mysql服务器用其他字符替换了一些字符。 例如,它替换为。 更新 我已经运行的命令确保这两个和的

  • 我无法使用MySQL和phpMyAdmin进行基本的编码工作。我想在我的数据中使用简单的法语字符(如é和è)。如果运行UPDATE,则字符插入正确。但不是在我导入剧本的时候... 下面是我在phpMyAdmin上导入的脚本: 导入时出现的两个错误: 在phpMyAdmin上导入脚本时,唯一接近utf8mb4的选项是utf8 表和数据库也采用类似的编码 但是数据被剥离了... 我想做什么 将COLL

  • 我有一个名为的表,它只有一列。 的输出是: 当我运行此查询:时,将插入这些值。 但是,当我尝试执行此查询:时,结果是: 的结果为: 我哪里犯错了?

  • 我开始使用函数,而不是PHP中的旧函数,我对这段代码有一点问题: 该代码返回以下两个错误: 警告:mysqli::准备():无法在第136行的C:\用户\Grega\Server\Application\inc\class\APIConnect.php中获取MySQL 致命错误:调用成员函数在第137行的C:\用户\Grega\服务器\应用程序\inc\类\APIConnect.php中的非对象上