Mysql (控制台,C++,Java,PHP等等)各种中文乱码的详细解释
2012-11-16 02:02
323 查看
与数据库字符集相关的变量有下面几个:可以用show variables like 'char%' 来查询。mysql> show variables like 'char%';+--------------------------+----------------| Variable_name | Value+--------------------------+----------------| character_set_client | gbk| character_set_connection | gbk| character_set_database | latin1| character_set_filesystem | binary| character_set_results | gbk| character_set_server | latin1| character_set_system | utf8| character_sets_dir | C:/Program File+--------------------------+----------------8 rows in set (0.00 sec) mysql>其中 character_set_database 为数据库所使用的字符集。在Mysql中字符集级别有三个层次:服务器级别,数据库级别,数据表级别,数据项级别。当下一层没有指定时,使用上一层的级别。比如说创建一个数据库时,没有指定数据库级别时,会使用服务器默认的级别。数据库的级别由系统变量:character_set_system来显示。在安装Mysql服务器时可以设置,也可以通过设置配置文件来指定。默认是latin1.支持中文的字符集主要有这么几个:GBK,GB2312,UTF8(UNICODE的一种)。所以数据库中数据项的字符集如果不是这些中的一种,就无法存储汉字了。当然由于下一级别会掩盖上一级别,所以即使服务器为latin1仍然没有关系。如果要让客户端和服务器端通信,
character_set_client
character_set_connection
character_set_results
这三个要能够支持中文字符,即是GBK,GB2312,UTF8中的一种。
否则一定会出现乱码。
可以通过从客户端执行Sql:show variables like 'char%来查看。
这些变量控制客户端和服务器通信使用的字符集。'
这三个变量可以在客户端连接了之后进行修改,
set character_set_client 'gbk';
也可以一次性设置三个:
set names 'gbk';
在JDBC进行连接时,如果没有指定连接字符集,characterEncoding
则客户端会去查询服务器的字符集,
如果是默认的情况,服务器端是latin1。
不能进行中文字符传输,所以一定会是乱码。
如果设置了set names 'utf8';
则是一定可以进行连接传输中文的,
这里不需要和数据库中 character_set_database的字符集相同。
但是,如果是用utf8来传输的话,
那么客户端这边不支持utf8的显示,
那么就需要把它转换成可支持的显示即可。
控制台默认使用的字符集ISO8859_1
C++里可以使用多字节字符集I和UNICODE字符集,需要对utf8进行转换才能显示。
Java中使用的是UNICODE字符集。String类可以识别UTF8,不需要转换。
如果使用GBK来传输,
则在C++中使用多字节就不用转换了,
在Java中,String也能识别GBK,所以也不用转换了。
总结:
如何才能不出现中文乱码:
1,存储数据库的数据表是支持中文的字符集,一般采用UNICODE,UTF8,GBK存储较好。
2,数据库的连接也一定要采用支持中文的字符集,可以和数据库中的字符集不一致,数据库会自动完成转换;
3,显示端口语言(Java,PHP,C++)也一定要支持传输过来的字符集,不支持时可以进行转换即可。
相关文章推荐
- 最近遇到的mysql php 中的各种中文乱码问题,记录一下
- MySQL详解各种乱码错误,java调用mysql中文参数查不到结果等解决方案(大章集合)
- 【MySQL】统一控制台-pma-PHP编码!解决中文乱码问题
- 【MySQL】统一控制台-pma-PHP编码!解决中文乱码问题
- java-mysql-apm(apache+php+mysql)中文乱码解决方法
- MySQL中文乱码,phpmyadmin乱码,php乱码 产生原因及其解决方法
- java;jsp;tomcat;mysql;hibernate;j2ee 编码中文乱码全面解决方案
- java 在控制台运行的时候有中文乱码
- java 处理 mysql 中文乱码问题
- mysql控制台中文显示乱码
- Java连接MySQL中文乱码处理
- PHP+MySQL存储数据出现中文乱码的问题
- Android studio中java控制台输出中文乱码
- JAVA写入Mysql中文乱码解决方法
- MySQL中文乱码,phpmyadmin乱码,php乱码 产生原因及其解决方法
- PHP读取MySQL显示中文乱码
- java mysql 中文乱码
- php+mysql的utf-8中文乱码问题的解决方法
- java-jsp--mysql中文乱码
- java+mysql 中文乱码问题解决