mysql数据库与字符编码

使用mysql数据库,中文乱码,在网上搜索了资料,修改了my.ini文件:default-character-set=utf8,创建数据库、表、

 

字段的编码都为utf8;SHOW VARIABLES LIKE 'character%':

 

mysql jietu

 

 

命令行下插入中文数据,报错。通过mysql GUI插入中文数据,而查询出来的结果乱码;不知道为什么!

 

既然utf8乱码了,就 set nams gbk; set character_set_database=gbk;

 

 

dd

 

中文插入和查询正确。

 

 

下面是几个变量的含义:

 

character_set_client:客户端字符集;

character_set_connection:客户端与服务器连接采用的字符集;

character_set_results:SELECT查询返回数据的字符集;

character_set_database:数据库采用的字符集;

 

character_set_client, character_set_connection 这两个变量用于保证与character_set_database编码的一致,而character_set_results则用于保证SELECT返回的结果与程序的编码一致。

 

Mysql字符集处理流程是这样的:

1、发送请求

(1)客户端发送请求到服务区端。

(2)服务器端把请求的数据从客户端字符集(character_set_client)转成服务器连接字符集(character_set_connect)转位存取区域(table,column)的字符集,然后在存取或查询

2、返回请求

(1)服务器将存储区域(table,column)的字符集转换成服务器连接字符集(character_set_connect)

(2)将服务器连接字符集(character_set_connect)转换成结果字符集(character_set_results),再发送到客户端。

 

所以:

 

1、一般情况下当上面几个变量采用一致的字符集,就不会出现乱码;

 

2、要保证发送的数据与数据库的字符集一致,即 character_set_client,character_set_connection 与character_set_database 一致。

 

3、要保证数据库中存储的数据与数据库编码一致,即数据的编码(table、column)与character_set_database一致。

 

4、要保证 SELECT 的返回与程序的编码一致,即 character_set_results 与程序(PHP、Java等)编码一致。

 

5、要保证程序编码与浏览器编码一致,即程序编码与 一致。

 

 

按照这样的规则的话,那么用utf8应该是没错的,但是却出错???

 

事实上这样设置的话只在控制台乱码,从数据库中读出后显示在页面上是没有错的。

 

:以上资料大多来自 http://www.oklinux.cn/html/sql/mysql/20090227/67808.html,记录为学习笔记之用。


 

你可能感兴趣的:(mysql乱码,字符编码,msql)