mysql中composekey定义_mysql编排进docker-compose:踩坑记录

1. 容器编码目录结构

test

└─docker-compose

│ ├─app

│ │ Dockerfile

│ │

│ └─mysql

│ └─initdb

│ erp_db.sql

└─docker-compose.yml

复制代码

1.1 app/Dockerfile作为应用在本篇略过

1.2 erp_db.sql

create database if not exists erp_db;

use erp_db;

CREATE TABLE `m_code` (

`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',

`kind` varchar(3) NOT NULL COMMENT '分类',

`code` varchar(3) NOT NULL COMMENT '编码',

`name` varchar(30) DEFAULT NULL COMMENT '含义',

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='编码主数据'

;

INSERT INTO `m_code` (`id`, `kind`, `code`, `name`) VALUES (1,'PUR','001','标准采购');

INSERT INTO `m_code` (`id`, `kind`, `code`, `name`) VALUES (2,'PUR','002','批量采购');

INSERT INTO `m_code` (`id`, `kind`, `code`, `name`) VALUES (3,'SAL','001','批发');

INSERT INTO `m_code` (`id`, `kind`, `code`, `name`) VALUES (4,'SAL','002','零售');

INSERT INTO `m_code` (`id`, `kind`, `code`, `name`) VALUES (5,'SAL','003','在线');

复制代码

1.3 docker-compose.yml

services:

erp_server:

container_name: mysql5.7_erp

image: mysql:5.7

environment:

MYSQL_DATABASE: erp_db

MYSQL_USER: admin

MYSQL_PASSWORD: password

MYSQL_ROOT_PASSWORD: rootpassword

expose:

- 3306

ports:

- 3306:3306

volumes:

# 起動スクリプト

- ./docker-compose/mysql/initdb:/docker-entrypoint-initdb.d/

# DBの永続化

- mysql_db:/var/lib/mysql

volumes:

mysql_db:

driver: local

复制代码

2. 踩坑记录

2.1 现象

按照上述的编排后,发现进到数据库的数据是乱码

7129b47b6ce64fb6f794b975bf594472.png

2.2 查看charset

81c71927f6dfee94b5157cefd7ace984.png

show variables like '%chara%';

复制代码

2.3 根据charset,就有了如下两个思路

2.3.1 思路一:把红线部分变成utf8,docker-compose.yml追加command

services:

erp_server:

container_name: mysql5.7_erp

image: mysql:5.7

command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci

environment:

MYSQL_DATABASE: erp_db

MYSQL_USER: admin

MYSQL_PASSWORD: password

MYSQL_ROOT_PASSWORD: rootpassword

expose:

- 3306

ports:

- 3306:3306

volumes:

# 起動スクリプト

- ./docker-compose/mysql/initdb:/docker-entrypoint-initdb.d/

# DBの永続化

- mysql_db:/var/lib/mysql

volumes:

mysql_db:

driver: local

复制代码

再重做一遍

$ docker-compose down

$ docker-compose up -d

复制代码

注意:此时如果没有反应到mysql

$ docker volume ls

$ docker volume rm [volume-name]

复制代码

424c11575d0d0eba6dd65efc04113a36.png

再确认下表数据是否变好

56b910e94799597cd00f7dc8fa7db513.png

2.3.2 思路二,直接在erp_db.sql写

docker-compose.yml恢复如初 erp_db.sql

create database if not exists erp_db;

use erp_db;

SET CHARACTER_SET_CLIENT = utf8;

SET CHARACTER_SET_CONNECTION = utf8;

CREATE TABLE `m_code` (

`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',

`kind` varchar(3) NOT NULL COMMENT '分类',

`code` varchar(3) NOT NULL COMMENT '编码',

`name` varchar(30) DEFAULT NULL COMMENT '含义',

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='编码主数据'

;

INSERT INTO `m_code` (`id`, `kind`, `code`, `name`) VALUES (1,'PUR','001','标准采购');

INSERT INTO `m_code` (`id`, `kind`, `code`, `name`) VALUES (2,'PUR','002','批量采购');

INSERT INTO `m_code` (`id`, `kind`, `code`, `name`) VALUES (3,'SAL','001','批发');

INSERT INTO `m_code` (`id`, `kind`, `code`, `name`) VALUES (4,'SAL','002','零售');

INSERT INTO `m_code` (`id`, `kind`, `code`, `name`) VALUES (5,'SAL','003','在线');

复制代码

再重做一遍

$ docker-compose down

$ docker-compose up -d

复制代码

注意:此时如果没有反应到mysql

$ docker volume ls

$ docker volume rm [volume-name]

复制代码

7174a47838b1bc9bc04d0602ab2916b9.png 和最初现象一样

再确认表数据

703910406f9f6fffb6c9ac06fc1b4f63.png

3. 结论

修改配置文件或者容器编排文件,都没有解决问题;只有在sql文中修改才能最终解决问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值