zoukankan      html  css  js  c++  java
  • mysql中character_set_connection的作用

    character_set_client = x 
    character_set_results = x
    character_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存在的意义大多是类似于此类用法吧。


    如有说的不对的地方,请指正下,或者有更多的说法,也请说下。
  • 相关阅读:
    设置iterm可配色
    Java权限管理
    npm添加淘宝镜像
    新版同义词
    maven打包加时间戳方法总结
    python中的实例方法、类方法、静态方法的区别
    15个流行的python框架
    python学习笔记
    前置声明和包含头文件的区别(待补充)
    数组和链表的时间复杂度
  • 原文地址:https://www.cnblogs.com/lazyno/p/4278544.html
Copyright © 2011-2022 走看看