问题描述
前端页面内容输入中文,或执行过程中生成的log信息夹带中文,都会报与数据库相关的编码错误的问题。 经查看docker 生成的mysql的数据库编码字符集默认是latin, 不是utf-8,需要修改数据库编码字符集,除了修改数据库的编码,还需要修改数据表,数据表的字段的编码字符集
关于mysql字符集知识
我们创建表的时候,有一个charset字段,同时还会有一个collate字段。 以下文字来自网络,讲的很不错。
COLLATE通常是和数据编码(CHARSET)相关的,一般来说每种CHARSET都有多种它所支持的COLLATE,并且每种CHARSET都指定一种COLLATE为默认值。例如Latin1编码的默认COLLATE为latin1_swedish_ci,GBK编码的默认COLLATE为gbk_chinese_ci,utf8mb4编码的默认值为utf8mb4_general_ci。
mysql中有utf8和utf8mb4两种编码,在mysql中请大家忘记**utf8** ,永远使用**utf8mb4**。这是mysql的一个遗留问题,mysql中的utf8最多只能支持3bytes长度的字符编码,对于一些需要占据4bytes的文字,mysql的utf8就不支持了,要使用utf8mb4才行。
很多COLLATE都带有_ci字样,这是Case Insensitive的缩写,即大小写无关,也就是说"A"和"a"在排序和比较的时候是一视同仁的。selection * from table1 where field1="a"同样可以把field1为"A"的值选出来。与此同时,对于那些_cs后缀的COLLATE,则是Case Sensitive,即大小写敏感的
登录docker mysql
登录可以有多种方式
一种通过docker 容器命令行
如图找到命令行按钮,点击进入命令行终端

在终端输入登录mysql的命令: mysql -uname -ppwd

一种通过数据库管理软件
我用的是dbeaver, 注意连接数据库的port要和docker里的port端口保持一致
修改数据库编码
在这里,我直接在dbeaver执行如下语句 第一行是显示mysql当前数据库的字符集设置 其余几行都是设置字符集为utf-8 执行成功后,可以再执行以下show语句验证以下。
show variables like 'character%';
set character_set_database =utf8;
set character_set_results =utf8;
set character_set_server =utf8;
set character_set_system =binary;
SET collation_server = utf8_general_ci;
SET collation_database = utf8_general_ci;

修改数据表及数据表字段
核心sql语句如下:
'alter table tableName  character set utf8mb4;修改数据表,要指定具体的数据表名
show create tableName ;验证是否修改成功
alter table  tableName   convert to character set utf8 collate utf8_general_ci; 修改数据表字段
批量修改数据表及数据表字段
因为数据表比较多,就写了一个python脚本来批量执行 直接上代码










