首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用docker-compose更改mysql的默认字符集?

问如何使用docker-compose更改mysql的默认字符集?
EN

Stack Overflow用户
提问于 2017-08-17 15:45:47
回答 4查看 31K关注 0票数 33

当我保存中文字符串时,mysql出现错误"Exception Value:

(1366,“第1行的'name‘列的字符串值不正确:'\xE5\xB0\x8F\xE6\x98\x8E’)”)“,我检查了mysql的字符,显示如下:

代码语言:javascript
复制
mysql> show variables like 'character%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| 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/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

我的docker-compose.yml是as伙伴:

代码语言:javascript
复制
web:
    image: yetongxue/docker_test:1.2
    links:
      - "db"
    ports:
      - "8100:8000"
    volumes:
      - "/Users/yetongxue/docker_v/docker_test/media:/root/media"
    restart: always

db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: qwerasdf
      MYSQL_DATABASE: docker_db
    restart: always
    volumes:
      - "/Users/yetongxue/docker_v/docker_test/db:/var/lib/mysql"

我知道如何使用my.cnf设置mysql的字符,但是如何在docker-compose.yml中设置?有人知道这个吗?谢谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-05-25 20:33:59

您可以在修改my.cnf的地方构建自己的mysql镜像,也可以修改启动mysql守护进程的命令。

和

..。

代码语言:javascript
复制
web:
    image: yetongxue/docker_test:1.2
    links:
      - "db"
    ports:
      - "8100:8000"
    volumes:
      - "/Users/yetongxue/docker_v/docker_test/media:/root/media"
    restart: always

db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: qwerasdf
      MYSQL_DATABASE: docker_db
    restart: always
    volumes:
      - "/Users/yetongxue/docker_v/docker_test/db:/var/lib/mysql"
    command: ['mysqld', '--character-set-server=utf8mb4', '--collation-server=utf8mb4_unicode_ci']

我推荐使用utf8mb4,因为它最多可以存储“每个多字节字符4字节”(

https://dev.mysql.com/doc/refman/5.5/en/charset-unicode-utf8mb4.html

)

票数 82
EN

Stack Overflow用户

发布于 2018-12-05 18:15:56

如果你想用上面的设置创建你自己的docker镜像,而不是在docker-compose中指定它们,你可以这样做:

代码语言:javascript
复制
FROM mysql:5.5.60

RUN ln -sf /usr/share/zoneinfo/Europe/London /etc/localtime

VOLUME ["/docker-entrypoint-initdb.d"]

CMD ["--character-set-server=utf8mb4", "--collation-server=utf8mb4_general_ci", "--skip-character-set-client-handshake"]
票数 4
EN

Stack Overflow用户

发布于 2017-08-17 15:53:37

compose文件用于运行容器(并且可以构建镜像)。您不能自定义docker-compose文件中的图像。您需要创建一个自定义图像来扩展

mysql

图像。创建Dockerfile:

代码语言:javascript
复制
FROM mysql:5.7
RUN

然后构建此镜像:

代码语言:javascript
复制
docker build -t  .

更新合成文件:

代码语言:javascript
复制
db:
    image:
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45729326

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档