character_set_connection、character_set_results、 character_set_client的作用

如题。通常的使用中,character_set_client,character_set_connection这两个变量的值是一样的,也就是说查询不需要进行编码转换。这样看来变量character_set_connection有些多余。当查询进入时,查询会被服务器从 character_set_client转换到character_set_connection,当查询执行时,查询会被服务器从 character_set_connection转换到列字符集。查询反回时,数据直接被服务器从列字符集转换到 character_set_results。很显然查询进入比查询返回多经历了一次转换,这是必须的吗,意义何在?

参考mysql中文手册:

10.3.6. 连接字符集和校对
一些字符集和校对规则系统变量与客户端和服务器的交互有关。在前面的章节中已经提到过部分内容:
· 服务器字符集和校对规则可以用作character_set_server和collation_server变量的值。

· 默认数据库的字符集和校对规则可以用作character_set_database和collation_database变量的值。

在客户端和服务器的连接处理中也涉及了字符集和校对规则变量。每一个客户端有一个连接相关的字符集和校对规则变量。

考虑什么是一个“连接”:它是连接服务器时所作的事情。客户端发送SQL语句,例如查询,通过连接发送到服务器。服务器通过连接发送响应给客户端,例如结果集。对于客户端连接,这样会导致一些关于连接的字符集和 校对规则的问题,这些问题均能够通过系统变量来解决:

· 当查询离开客户端后,在查询中使用哪种字符集?

服务器使用character_set_client变量作为客户端发送的查询中使用的字符集。

· 服务器接收到查询后应该转换为哪种字符集?

转换时,服务器使用 character_set_connection和collation_connection系统变量。它将客户端发送的查询从 character_set_client系统变量转换到character_set_connection(除非字符串文字具有象_latin1或 _utf8的引介词)。collation_connection对比较文字字符串是重要的。对于列值的字符串比较,它不重要,因为列具有更高的 校对规则优先级。

· 服务器发送结果集或返回错误信息到客户端之前应该转换为哪种字符集?

character_set_results 变量指示服务器返回查询结果到客户端使用的字符集。包括结果数据,例如列值和结果元数据(如列名)

时间: 2024-08-04 03:39:04

character_set_connection、character_set_results、 character_set_client的作用的相关文章

PHP简单MVC架构

http://blog.csdn.net/haiqiao_2010/article/details/12166283 由于需要搭建一个简单的框架来进行API接口开发,所以简单的mvc框架当然是首选.最原始,最简洁的mvc框架.下面来介绍下. 一. 项目目录结构: app  |-controller    存放控制器文件  |-model        存放模型文件  |-view        存放视图文件 core |-lib        存放自定义类库  |-config    存放配置文

mysql 乱码解决方案

如何解决MYSQL数据中文乱码问题? 第一种方法,总结: 经常更换虚拟主机,而各个服务商的MYSQL版本不同,当导入数据后,总会出现乱码等无法正常显示的问题,查了好多资料,总结出自己的一点技巧: WINDOWS 下导入应该这样使用MYSQL的命令在DOS命令下进入mysql的bin目录下,输入mysql -uroot -p密码 数据库名称<要恢复的数据库, 例如我们要把D盘的一个名称为test.sql的数据库恢复到本地的test2这个数据库,那么就这样: mysql -uroot -p密码 te

MySQL创建数据表

*  创建数据表 * *       *      一.什么是数据表 * *           * *      二.创建数据表的SQL语句模型 * *          DDL * *          CREATE TABLE [IF NOT EXISTS] 表名称( *            字段名1 列类型 [属性] [索引] *            字段名2 列类型 [属性] [索引] *            ... *            字段名n 列类型 [属性] [索引]

解决mysql数据库乱码问题

MySQL的SQL语言是用于访问数据库的最常用标准化语言.MySQL软件采用了双授权政策,它分为社区版和商业版,由于其体积小.速 度快.总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择MySQL作为网站数据库.那么对于mysql数据库乱码问题该如何处理呢? 专职优化.域名注册.网站空间.美国虚拟主机.服务器托管.vps主机.服务器租用的中国信息港来为你详细介绍! 备注:如果您是买空间网的客户,您可以直接咨询技术支持为您提供针对特定问题最简单的解决方案 以下内容转自网络: 1.

字符集和比较规则

字符集 字符集指的是某个字符范围的编码规则 ASCII(128个):1个字节进行编码,包含空格,标点符号,数字,大小写字母,一些不可见字符 ISO 8859-1/latin1(256个):1个字节进行编码,ASCII基础上扩充了128个西欧常见字符 GB2312(6762个):因兼容ASCII字符集,所以在ASCII内的1个字节进行编码,反之2个字节:包含6763个汉字,682个拉丁字母,希腊字母,日本平假名/片假名,俄语西里尔字母 GBK:对GB2312进行扩充 Unicode UTF8:收录

第四节:乱码的前世今生——字符集和比较规则

一.字符集和比较规则简介 字符集简介        字符集是描述某个字符范围的编码规则.        必须清楚的两个事情.            你要把那些字符映射成二进制数据?也就是界定清楚字符范围            怎么映射?字符串映射成二进制数据叫做编码,二进制数据映射到字符过程叫解码.    比较规则的简介        同一种字符集可以有多种比较规则.        二进制比较规则 略    一些重要的字符集        不同的字符集字符范围和用到的编码规则可能都不一样.  

MySQL 是怎样运行的:从根儿上理解 MySQL:字符集和比较规则

本文章借鉴自https://juejin.im/book/5bffcbc9f265da614b11b731 字符集和比较规则简介 一些重要的字符集 ASCII字符集 共收录128个字符,包括空格.标点符号.数字.大小写字母和一些不可见字符.由于总共才128个字符,所以可以使用1个字节来进行编码,我们看一些字符的编码方式: 'L' -> 01001100(十六进制:0x4C,十进制:76) 'M' -> 01001101(十六进制:0x4D,十进制:77) ISO 8859-1字符集 共收录25

字符集(CHARACTER SET)和校对集(COLLATE)

http://blog.sina.com.cn/s/blog_9707fac301016wxm.html http://www.th7.cn/db/mysql/201412/84636.shtml 从上文中可以看出character_set_connection.character_set_client. character_set_results三个字符集什么时候用到.从实际上可以看到,当客户端连接服务器的时候,它会将自己想要的字符集名称发给 mysql服务器,然后服务器就会使用这个字符集去设

PHP网页乱码的问题

在自己制作一个网页时,时常会遇到网页乱码的问题. 其实导致网页乱码主要有几个原因,以下给出解决方法. 1.HTML的字符编码问题 该问题较常见,也是最明显和最容易解决的. 在网页<head>中加上: <meta http-equiv="Content-Type" Content="text/html;charset=utf8"/> 即可. 2.PHP的字符编码问题 这与上面类似. 在文件上方加上: header("Content-t