mysql 中文编码选择,Mysql中文乱码问题之分析

Mysql中文乱码问题

之前被mysql中总是出现中文乱码搞得云里雾里,在网上也搜了些相关资料,可结果更让我觉得字符集的转换是相当复杂,甚至有了抵触心理,不过还好在最后搜到几篇经典的文章,经过研读总算明白过来!好文章,不敢独享,现将文章稍作整理与大家分享。

字符集基本概念:

http://home.phpchina.com/space.php?uid=57965&do=blog&id=181970

mysql中文乱码原因剖析:

对编程有影响的主要是客户端字符集和数据库字符集,数据库中常用的操作就是保存数据和读取数据,在这个过程中,乱不乱码和数据库字符集貌似没有什么关系。我们只要保证写入时选择的字符集和读取时的选择的字符集一致,即只需保证两次操作的客户端字符集一致即可。在MySQL的客户端上执行一次查询过程一般是,在客户端的提示符后面输入一条SQL语句,回车,然后终端显示出查询的结果。这个过程中,只有终端和三个MySQL的系统变量指定了正确的字符集,才能保证我们将一个正确的SQL语句送到服务器,然后服务器返回正确的结果,并且在终端正确显示。三个MySQL的系统变量是:

1. character_set_client,终端字符集,告诉Server客户端提交的SQL语句的编码格式

2. character_set_connection,连接字符集,是服务器翻译SQL语句时用到的编码格式

3. character_set_results,返回的结果集的字符集,是服务器返回结果集之前把结果集转换成的编码格式 。

在MySQL终端通过执行命令 show variables like ‘char%’ 可以查看这几个变量的值。这三个变量通常都设定为同一种字符集,用命令set names [charset name]就可以修改这三个变量的值。一般来说,只要你设定了能够表示你的数据的字符集,你查询的结果都可以在终端正确显示。

举个例子:使用的表t1是utf8编码,表中的字段c1继承了这个编码,表创建如下

mysql> create table t1 ( c1 text not null ) character set utf8;

用的字符是汉字“范”,gbk编码为B7 B6,utf8编码为E8 8C 83

用下面的SQL语句插入数据

mysql> insert into t1 values( ‘范’);

a)如果终端设置为utf8,并且执行了 set names utf8,那么插入到数据库中的就是“范”这个字的utf8编码,这个过程中MySQL不需要做编码转换。写入数据库的内容可以通过执行 select hex( c1 ) from t1 得到数据的十六进制编码来验证。

b)如果终端设置为 utf8,并且执行了set names g

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值