字符编码:字符与符号的二进制文件表示方法。
ASCII:英文编码。
utf-8-16:utf-8的扩展。
utf-8:几乎支持所有的语言. 可以说是各种编码的桥梁。
gbk:中文编码
set names gb2312;
遇到字符乱码先冷静。可能是下列两种情况:
1,数据库写入乱码。
2,数据库读出乱码。
mysql> show variables like ‘%char%‘;
|
character_set_client | gbk
//客户端字符集
| character_set_connection | gbk
//客户端与服务器端连接采用的字符集
|
character_set_database | gbk
// 数据库采用的字符集
| character_set_filesystem
| binary
|
character_set_results | gbk
//SELECT查询返回数据的字符集
|
character_set_server | gbk
| character_set_system | utf8
在查询结果中可以看到mysql
数据库系统中客户端、数据库连接、数据库、文件系统、查询
结果、服务器、系统的字符集设置
在这里,文件系统字符集是固定的,系统、服务器的字符集在安装时确定,与乱码问题无关
乱码的问题与客户端、数据库连接、数据库、查询结果的字符集设置有关
*注:客户端是看访问mysql
数据库的方式,通过命令行访问,命令行窗口就是客户端,通
过JDBC 等连接访问,程序就是客户端
编码转换的规则是,在输入数据时将编码由“客户端编码”转换为“服务器端编码”,输出时将数据由“服务器端编码”转换为“客户端编码”。
在登录数据库时,我们用mysql --default-character-set=字符集-u root -p 进行连接,这时我们
再用show variables like ‘%char%‘;命令查看字符集设置情况,可以发现客户端、数据库连接、
查询结果的字符集已经设置成登录时选择的字符集了。
数据库的字符集可以修改mysql 的启动配置来指定字符集,也可以在create database 时加上
default character set 字符集来强制设置database 的字符集
1.使用GBK编码的解决方案
这个最简单
遇到设置编码的地方就是用GBK数据库gbk 然后在使用个过滤器过滤编码为gbk一切搞定。
效果为添加数据无乱码 读出无乱码
数据库管理工具无乱码
到处sql结构和数据无乱码
2.使用UTF-8编码解决方案
所有编码都设置为UTF-8
数据库编码utf8
设置过滤器编码utf8
数据库连接?characterEncoding=utf8
然后在数据库管理工具或mysql命令行
运行 SET character_set_results = gbk;
效果为添加数据无乱码 读出无乱码 数据库管理工具无乱码
到处sql结构和数据时存在乱码
3.页面使用UTF8 数据库使用latin1的解决方案
jap java
tomcat 设置为UTF-8
过滤器
utf8
数据库连接?characterEncoding=latin1
数据库其他latin1
然后在数据库管理工具或mysql命令行
运行 SET character_set_results = gbk;
效果为添加数据无乱码 读出无乱码 数据库管理工具无乱码
到处sql结构和数据时存在乱码