MySql乱码问题一直让人很头疼。下面是我自己的经验,只是做个总结加深记忆,写的不好,重在学习!
首先解释一下大家经常说MySql数据库,MySql其实是管理数据库的软件系统,也可以说是一个服务器。
MySql服务器上部署很多数据库,虽然解释的有些大白话,但是它更好的帮我理解了为什么!
MySql产生乱码的原因:
在我们操作数据库的客户端可以是dos也可以是一些sql-yong等,你操作数据库数据需要编码格式,所以有一个
客户端设置编码,然后你连接MySql数据库信息还需要以哪个字符集进行编码,设置连接编码,MySql服务器
端也会加载数据所以也需要编码,数据库操纵数据需要编码,表存储数据需要编码,查询结果需要编码这几个环节
一定了解,其中任何一处不匹配都有可能引起乱码。
可以在dos下查看当前MySql数据库服务器状态!
cmd打开dos—mysql -h(目标主机地址)-u 用户名 -p (密码)后边不要加冒号因为mysql命令是dosmingl不是MySQL服务器命令
进入指定用户MySql服务器后,输入status查看数据库服务器状态可以看到:
Server characterset: gb2312(服务器编码格式)
Db characterset: gb2312(数据库编码格式,这里的格式并不是你创建数据库的编码格式,所以你创建的时候必须指定编码格式)
Client characterset: gb2312(客户端编码格式)
Conn. characterset: gb2312 (连接数据信息的编码格式)
设置上边格式可以通过软件方式:打开MySql的bin目录执行MySQLInstanceConfig.exe文件设置编码格式,设置完以后上边的编码都会变成你所设置
的编码。这之上是配置数据库环境的编码格式。例如:服务器、客户端、连接。
下面是配置数据库和数据表的编码格式
查看数据库的编码格式方法:
show create database 数据库名;
查看数据表的编码格式方法:
show create table 表名;
如果上述编码格式与你不符需要修改
数据库
alter database 数据库名字 character set 字符集;
数据表
alter table 表名 character set 表名;
创建数据库时指定字符集是一个很好的习惯,否则后期麻烦。如果你指定后,后期创建数据库默认第一次。
查看更全的编码字符集
show variables(后边的s千万别忘) like "char%"; #大意为查询所有含有char字符集变量
显示内容大概:
| character_set_client | gb2312
|
| character_set_connection | gb2312
|
| character_set_database | gb2312
|
| character_set_filesystem | binary
|
| character_set_results | gb2312
|
| character_set_server | gb2312
|
| character_set_system | utf8
前提你必须选择一个数据库,如果你不选择数据库直接执行show variables(后边的s千万别忘) like "char%";你所看到的 character_set_database | gb2312
个编码是不正确的。必须选择数据库后应用。为什么我也不知道,上网搜了半天也没找到结果。
如果你在当前dos下执行set character_set_database=utf8;只能针对当前dos窗口的数据库,如果你退出
dos,此设置失效。
首先解释一下大家经常说MySql数据库,MySql其实是管理数据库的软件系统,也可以说是一个服务器。
MySql服务器上部署很多数据库,虽然解释的有些大白话,但是它更好的帮我理解了为什么!
MySql产生乱码的原因:
在我们操作数据库的客户端可以是dos也可以是一些sql-yong等,你操作数据库数据需要编码格式,所以有一个
客户端设置编码,然后你连接MySql数据库信息还需要以哪个字符集进行编码,设置连接编码,MySql服务器
端也会加载数据所以也需要编码,数据库操纵数据需要编码,表存储数据需要编码,查询结果需要编码这几个环节
一定了解,其中任何一处不匹配都有可能引起乱码。
可以在dos下查看当前MySql数据库服务器状态!
cmd打开dos—mysql -h(目标主机地址)-u 用户名 -p (密码)后边不要加冒号因为mysql命令是dosmingl不是MySQL服务器命令
进入指定用户MySql服务器后,输入status查看数据库服务器状态可以看到:
Server characterset: gb2312(服务器编码格式)
Db characterset: gb2312(数据库编码格式,这里的格式并不是你创建数据库的编码格式,所以你创建的时候必须指定编码格式)
Client characterset: gb2312(客户端编码格式)
Conn. characterset: gb2312 (连接数据信息的编码格式)
设置上边格式可以通过软件方式:打开MySql的bin目录执行MySQLInstanceConfig.exe文件设置编码格式,设置完以后上边的编码都会变成你所设置
的编码。这之上是配置数据库环境的编码格式。例如:服务器、客户端、连接。
下面是配置数据库和数据表的编码格式
查看数据库的编码格式方法:
show create database 数据库名;
查看数据表的编码格式方法:
show create table 表名;
如果上述编码格式与你不符需要修改
数据库
alter database 数据库名字 character set 字符集;
数据表
alter table 表名 character set 表名;
创建数据库时指定字符集是一个很好的习惯,否则后期麻烦。如果你指定后,后期创建数据库默认第一次。
查看更全的编码字符集
show variables(后边的s千万别忘) like "char%"; #大意为查询所有含有char字符集变量
显示内容大概:
| character_set_client | gb2312
|
| character_set_connection | gb2312
|
| character_set_database | gb2312
|
| character_set_filesystem | binary
|
| character_set_results | gb2312
|
| character_set_server | gb2312
|
| character_set_system | utf8
前提你必须选择一个数据库,如果你不选择数据库直接执行show variables(后边的s千万别忘) like "char%";你所看到的 character_set_database | gb2312
个编码是不正确的。必须选择数据库后应用。为什么我也不知道,上网搜了半天也没找到结果。
如果你在当前dos下执行set character_set_database=utf8;只能针对当前dos窗口的数据库,如果你退出
dos,此设置失效。