最近遇到不同终端显示MySQL数据中文乱码的问题,故记录一下。
一、本机安装MySQL
环境:windows 10
MySQL版本:5.7.18 MySQL Community Server (GPL) 解压缩免安装版
将文件解压缩到某个文件目录,如我的路径为:E:\BigData\tools。
此时mysql的根目录会有一个my-default.ini文件,这是MySQL的配置文件,配置说明请参考MySQL配置文件-my.ini
1.1配置环境变量
MySQL_HOME E:\BigData\tools\mysql\bin,如图
1.2 my-default.ini文件中增加数据目录配置
#Path to installation directory. All paths are usually resolved relative to this.
basedir="E:/BigData/tools/mysql"
#Path to the database root
datadir="E:/BigData/tools/mysql/data"
# The default character set that will be used when a new schema or table is
# created and no character set is defined
1.3 mysql 初始化
参见官方文档MySQL初始化
进入命令行,输入'mysqld --initialize-insecure --user=mysql --console'回车,如果提示mysqld命令不是内部或外部命令,说明环境变量未配置好。
其中'mysqld --initialize-insecure'表示初始化为root账号,无密码;如果没有'-insecure',则表示初始化为一个随机密码。
'--user=mysql ' 参数如果没有,则启动的时候会报错,缺少一个什么东西。
等待一会,如果没有报错,说明初始化成功。
1.4 注册MySQL服务,并启动
执行命令'mysqld install',即注册mysql服务;
执行命令'net start mysql', 启动mysql服务。
1.5遇到的问题
参见官方文档MySQL默认配置
a: 初始化未加'--user=mysql'参数,导致install失败,缺少组件;
b: 网查资料,my-default.ini可以改为my.ini,还有些说my.ini放到\bin目录下,我就遇到了错误。经证实:my-default.ini可以改为my.ini,就放在安装的根目录;
c: 'mysql install' 不要带参数,之前带参数指定my-default.ini配置文件,然后目录下如果有my.ini就要报错。my-default.ini可以改为my.ini,install不带指定参数即可,官方文档也说了会自动使用my.ini为配置文件。
二、MySQL编码设置
连接上MySQL服务后,可通过show variables like 'char%';查看各个字符编码的设置,如:
因my.ini中配置不同,字符编码可能不同。
2.1 编码设置
这里仅以中文为例。
my.ini中
[mysqld]节点下配置character-set-server=utf8
对应character_set_database/character_set_server/character_set_system的编码。
[client]节点配置 default-character-set=gbk
对应character_set_client/character_set_connection/character_set_resuts的编码。
2.2 注意事项
my.ini中编码设置后,执行命令'sc delete mysql'删除mysql服务;
执行命令'mysqld --initialize-insecure --user=mysql --console'初始化服务;
执行命令'mysqld install'注册服务;
执行命令'net start mysql'启动服务。
必须新建数据库和表,新建的数据库和表的字符集才为配置中设置的字符集,如图:
这样命令行显示中文就正常了。
三、Navicat中文乱码
先断开连接,再编辑连接,编码中选择'自动',中文即正常了。
至此:Navicat、Java代码、MySQL命令行,三处的插入及显示中文均正常。