• [MySQL] 字符集和排序方式


    字符串类型

    MySQL的字符串分为两大类:

    1)二进制字符串:即一串字节序列,对字节的解释不涉及字符集,因此它没有字符集和排序方式的概念

    2)非二进制字符串:由字符构成的序列,字符集用来解释字符串的内容,排序方式决定字符的大小


    字符集和排序方式

    字符集和排序方式的关系是这样的:一个字符集可以有一个或多个排序方式,有一个默认的排序方式,我们可以通过以下例子说明:

    mysql> show character set like '%gbk%';
    +---------+------------------------+-------------------+--------+
    | Charset | Description            | Default collation | Maxlen |
    +---------+------------------------+-------------------+--------+
    | gbk     | GBK Simplified Chinese | gbk_chinese_ci    |      2 | 
    +---------+------------------------+-------------------+--------+
    1 row in set (0.00 sec)
    
    mysql> show collation like '%gbk%';
    +----------------+---------+----+---------+----------+---------+
    | Collation      | Charset | Id | Default | Compiled | Sortlen |
    +----------------+---------+----+---------+----------+---------+
    | gbk_chinese_ci | gbk     | 28 | Yes     | Yes      |       1 | 
    | gbk_bin        | gbk     | 87 |         | Yes      |       1 | 
    +----------------+---------+----+---------+----------+---------+
    2 rows in set (0.00 sec)

    从上例中我们可以看出字符集gbk有两个排序方式(分别为gbk_chinese_ci何gbk_bin),其中默认的排序方式为gbk_chinese_ci。

    排序方式的命名规则为:字符集名字_语言_后缀,其中各个典型后缀的含义如下:

    1)_ci:不区分大小写的排序方式

    2)_cs:区分大小写的排序方式

    3)_bin:二进制排序方式,大小比较将根据字符编码,不涉及人类语言,因此_bin的排序方式不包含人类语言

    因此,gbk_chinese_ci排序方式就表示:字符集为gbk,人类语言使用中文来比较大小,比较时区分大小写。


    常用函数

    字符集引导

    字符集引导可以让MySQL指定一种字符集来解释字符常量,其语法为:

    _charset str

    如:

    _utf8 'ABCD'   表示以utf8字符集来介绍字符串常量'ABCD'

    字符集转换

    convert()函数可以把一个字符串转换成指定字符集,其语法为:

    convert(str using charset)

    如 convert('ABCD' using utf8)  表示把'ABCD'的字符集转换成uft8

    length()函数  --返回字节的长度

    char_length()  --返回字符长度


    与字符集有关的系统变量

    通过以下语句可以查看与字符集有关的系统变量:
    mysql> show variables like 'character\_set\_%';
    +--------------------------+--------+
    | Variable_name            | Value  |
    +--------------------------+--------+
    | character_set_client     | latin1 | 
    | character_set_connection | latin1 | 
    | character_set_database   | gbk    | 
    | character_set_filesystem | binary | 
    | character_set_results    | latin1 | 
    | character_set_server     | gbk    | 
    | character_set_system     | utf8   | 
    +--------------------------+--------+
    7 rows in set (0.01 sec)
    
    mysql> show variables like 'collation\_%';              
    +----------------------+-------------------+
    | Variable_name        | Value             |
    +----------------------+-------------------+
    | collation_connection | latin1_swedish_ci | 
    | collation_database   | gbk_chinese_ci    | 
    | collation_server     | gbk_chinese_ci    | 
    +----------------------+-------------------+
    3 rows in set (0.00 sec)
    它们的含义如下:
    character_set_system:MySQL数据库标识符使用的字符集,永远是utf8
    character_set_server和collation_server:服务器的默认字符集和排序方式
    character_set_database和collation_database:当前数据库的默认字符集和排序方式
    以下三个变量将影响客户端和服务器之间的通信:
    character_set_client:客户端向服务器发送SQL语句使用的字符集
    character_set_results:服务器向客户端返回结果时使用的字符集
    character_set_connection:如果它和character_set_client不同,从客户端发来的SQL语句将转换为它指定的字符集
    默认情况下,上述三个变量都设为为相同的值,如果某个客户端想使用另一种字符集与服务器通信,可以修改它们,如:
    set character_set_client = utf8;
    set character_set_results = utf8;
    set character_set_connection = utf8;
    或者,更简单的方法是使用如下一条语句也能达到相同的效果:
    set names 'utf8';


  • 相关阅读:
    Git合并
    Git对象
    Git储藏和引用日志
    小小c#算法题 4 子数组最大和
    小小c#算法题 2 求素数
    小小c#算法题 5 插入排序
    小小c#算法题 1 找出数组中满足条件的两个数
    [转] WPF – Editing Mode with Save and Cancel Capability
    小小c#算法题 0 单循环冒泡排序
    小小c#算法题 3 字符串语句反转
  • 原文地址:https://www.cnblogs.com/fuhaots2009/p/3373684.html
Copyright © 2020-2023  润新知