mysql中character_set_connection的作用

character_set_client = x character_set_results = xcharacter_set_connection = x;

我们常用在mysql操作类中使用这三面,下面大概说下作用:

  character_set_client 客户端使用的编码,如GBK, UTF8 比如你写的sql语句是什么编码的。  character_set_results 查询返回的结果集的编码(从数据库读取的数据是什么编码的)。  character_set_connection 连接使用的编码

它们之前存在一个转换过程(具本的还请见手册):

character_set_client -> character_set_connection >内部操作字符集->character_set_results见一篇文章:http://www.cnblogs.com/discuss/articles/1862248.html
如:utf8->utf8->utf8  gbk->utf8->utf8类似于gbk->utf8->utf8这样的转换,有些同学可能有个疑问:
  character_set_client 是gbk  character_set_connection 是utf8  character_set_results 也是utf8     为什么不滤过character_set_connection部分,而它在这个中间阶段起到一个什么样的作用。google时,http://stackoverflow.com/questions/16082480/what-is-the-purpose-of-character-set-connection老外也提到过样的问题,本人英语差得很,也没怎么看完,最后转而去看手册去了。

    在手册中发现一句话:转换时,服务器使用character_set_connection和collation_connection系统变量。它将客户端发送的查询从character_set_client系统变量转换到character_set_connection(除非字符串文字具有象_latin1或_utf8的引介词)。collation_connection对比较文字字符串是重要的。对于列值的字符串比较,它不重要,因为列具有更高的 校对规则优先级。   请反复读下这段话,尤其是红色部分。现在说下我的理解:我们操作数据库时,大多于表有关,但是并不是说操作数据库一定要于表有关,如果使用表,则表和字段的字符集有优先,比如直接select length(‘中国人‘),如果character_set_connection是utf8的则输出9,如果是gbk则输出6。各位可以通过修改字符集变量测试下。我想character_set_connection存在的意义大多是类似于此类用法吧。

如有说的不对的地方,请指正下,或者有更多的说法,也请说下。
时间: 2024-11-05 21:03:29

mysql中character_set_connection的作用的相关文章

MySql中delimiter的作用是什么?

MySql中delimiter的作用是什么? 这个命令与存储过程没什么关系吧.其实就是告诉mysql解释器,该段命令是否已经结束了,mysql是否可以执行了.默认情况下,delimiter是分号;.在命令行客户端中,如果有一行命令以分号结束,那么回车后,mysql将会执行该命令.如输入下面的语句mysql> select * from test_table;然后回车,那么MySQL将立即执行该语句. 但有时候,不希望MySQL这么做.在为可能输入较多的语句,且语句中包含有分号.如试图在命令行客户

mysql中BLACKHOOL的作用

* { margin: 0; padding: 0; } .forFlow { margin: 0 16px 0 266px; } #mainContent { float: right; margin-left: -250px; width: 100%; } body { font-family: Helvetica,Verdana,Arial,sans-serif; } body { color: #333; background: #fff; font-family: Verdana,Ar

mysql中EXPLAIN 的作用

(一)id列: (1).id 相同执行顺序由上到下 mysql> explain -> SELECT*FROM tb_order tb1 -> LEFT JOIN tb_product tb2 ON tb1.tb_product_id = tb2.id -> LEFT JOIN tb_user tb3 ON tb1.tb_user_id = tb3.id; +----+-------------+-------+--------+---------------+---------+

MySQL数据库中delimiter的作用概述

以下的文章主要是向大家描述的是MySQL数据库中delimiter的作用是什么?我们一般都认为这个命令和存储过程关系不大,到底是不是这样的呢?以下的文章将会给你相关的知识,望你会有所收获. 其实就是告诉MySQL解释器,该段命令是否已经结束了,MySQL数据库是否可以执行了.默认情况下,delimiter是分号;.在命令行客户端中,如果有一行命令以分号结束,那么回车后,MySQL将会执行该命令.如输入下面的语句 MySQL> select * from test_table; 然后回车,那么My

MySQL中的外键是什么、有什么作用

最近自学数据库MySQL,然后有个疑问,一直不得其解,查询了相关资料,最后还是没有解决. 我的疑问是 "使用外键约束" ,然后我对 "外键" 这个词不是很理解,查询相关资料都是讲一些术语,说外键的主要作用是:保持数据的一致性.完整性.听得我是一头雾水. 关于外键,我有自己的一些理解,但是不晓得是否正确,举个例子来表达我的看法:假如现在需要建立一个表,一个什么样的表呢?一个班级的学生个人信息表: 所以在设计的时候,就给表1添加一个外键,这个外键就是表2中的学号字段,那

MySql中的变量定义

MySql中的变量定义 根据mysql手册,mysql的变量分为两种:系统变量和用户变量.但是在实际使用中,还会遇到诸如局部变量.会话变量等概念.根据个人感觉,mysql变量大体可以分为四种类型: 一.局部变量. 局部变量一般用在sql语句块中,比如存储过程的begin/end.其作用域仅限于该语句块,在该语句块执行完毕后,局部变量就消失了. 局部变量一般用declare来声明,可以使用default来说明默认值. 例如在存储过程中定义局部变量: drop procedure if exists

关于一些 MYSQL中的字符集概念

最近遇到mysql乱码的问题,找了些资料,先保存,后面慢慢总结自己的处理方法. 笔记: 问题环境总结: 1.前台php代码没有改变 2.原数据库,所有表的都是utf8 mysql> show variables like '%char%';+--------------------------+----------------------------------+| Variable_name            | Value                            |+---

【个人笔记】《知了堂》MySQL中的数据类型

MySQL中的数据类型 1.整型 MySQL数据类型 含义(有符号) tinyint(m) 1个字节  范围(-128~127) smallint(m) 2个字节  范围(-32768~32767) mediumint(m) 3个字节  范围(-8388608~8388607) int(m) 4个字节  范围(-2147483648~2147483647) bigint(m) 8个字节  范围(+-9.22*10的18次方) 取值范围如果加了unsigned,则最大值翻倍,如tinyint un

在Mysql中如何显示所有用户?

在Mysql中如何显示所有用户? 这是一个mysql初学者经常问到的一个问题,今天我们就带大家看看是如何在Mysql中显示所有用户的.通常我们在mysql中使用SHOW DATABASES可以显示所有的数据库,SHOW TABLES将会显示所有的数据表,那么你是不是会猜测显示所有用户的命令是SHOW USERS呢?不不不,并不是的,现在让我们一起来看看如何显示所有用户吧. 在Mysql中显示所有用户 1.登录数据库 首先,你需要使用如下命令登录到数据库,注意,必须是root用户哦~ ## mys