mysql字符集和字符排序


mysql的字符集和字符序:
    字符序:字符序(Collation)是指在同一字符集内字符之间的比较规则
    一个字符序惟一对应一种字符集,但一个字符集能够对应多种字符序,其中有一个是默认字符序(Default Collation)

    mysql的字符集和字符序有四个级别的默认设置:服务器级,数据库级,数据表级,字段级

    mysql中的字符序的命名按照规范,以字符序对应的字符集名称开头.以_ci(大小写不敏感),_cs(大小写敏感)或者_bin(按编码值比较)
        例如:在字符序“utf8_general_ci”下,字符“a”和“A”是等价的

    mysql字符集设置:
        系统变量:
            – character_set_server:默认的内部操做字符集
            – character_set_client:客户端来源数据使用的字符集
            – character_set_connection:链接层字符集
            – character_set_results:查询结果字符集
            – character_set_database:当前选中数据库的默认字符集
            – character_set_system:系统元数据(字段名等)字符集
            – 还有以collation_开头的同上面对应的变量,用来描述字符序

        MySQL中的字符集转换过程:
            1.MySQL Server收到请求时将请求数据从character_set_client转换为character_set_connection
            2.进行内部操做前将请求数据从character_set_connection转换为内部操做字符集,其肯定方法以下
                   - 使用每一个数据字段的CHARACTER SET设定值
                   - 若上述值不存在,则使用对应数据表的DEFAULT CHARACTER SET设定值(MySQL扩展,非SQL标准)
                   - 若上述值不存在,则使用对应数据库的DEFAULT CHARACTER SET设定值
                   - 若上述值不存在,则使用character_set_server设定值
            3.将操做结果从内部操做字符集转换为character_set_results


        检测字符集问题的命令;
                SHOW CHARACTER SET;
                SHOW COLLATION;
                SHOW VARIABLES LIKE ‘character%’;
                SHOW VARIABLES LIKE ‘collation%’;
                SQL函数HEX、LENGTH、CHAR_LENGTH
                SQL函数CHARSET、COLLATION

        注意事项:
            1.my.cnf中的default_character_set设置只影响mysql命令链接服务器时的链接字符集,不会对使用libmysqlclient库
            的应用程序产生任何做用
            2.对字段进行的SQL操做一般都是之内部操做字符集来进行的,不受链接字符集设置的影响

        总结:
            mysql的字符集能够细化到一个库,一张表,一列.可是通常是使用默认的设置
                1.编译mysql时,指定了一个默认的字符集,这个字符集是latin1
                2.安装mysql时,能够在配置文件中指定一个默认的字符集,若是没有指定,这个值继承编译时的字符集
                3.启动mysqld时,可使用character_set_server来指定默认的字符集,若是没有指定就继承配置文件中的配置
                4.安装mysql时选择多语言支持,在程序安装时会自动将配置设置为UTF-8

            默认状况下的mysql默认字符集是latin1


        修改默认字符集:
            1.最简单的修改方法:
                在mysql的配置文件中加入default-character-set = utf8
                                    character_set_server = utf8
                    修改完后重启服务器
            2.在线修改字符集
                     mysql> SET character_set_client = utf8;
                     mysql> SET character_set_connection = utf8;
                     mysql> SET character_set_database = utf8;
                     mysql> SET character_set_results = utf8;
                     mysql> SET character_set_server = utf8;
                     mysql> SET collation_connection = utf8;
                     mysql> SET collation_database = utf8;
                     mysql> SET collation_server = utf8;

            设置了表的默认字符集为utf8而且经过UTF-8编码发送查询,存入数据库的仍然是乱码.那connection链接层上可能出了问题
            解决方法是在发送查询前执行一下下面这句:SET NAMES 'utf8';它至关于下面的三句指令:
                SET character_set_client = utf8;
                SET character_set_results = utf8;
                SET character_set_connection = utf8;

本身周末放假没事学习的心得,若有不对请指出.谢谢!mysql