zoukankan      html  css  js  c++  java
  • mysql字符集与比较规则

    MySQL有4个级别的字符集和比较规则,分别是:

    • 服务器级别
    • 数据库级别
    • 表级别
    • 列级别

    查看服务器级别命令:

    mysql> SHOW VARIABLES LIKE 'character_set_server';
    +----------------------+-------+
    | Variable_name        | Value |
    +----------------------+-------+
    | character_set_server | utf8  |
    +----------------------+-------+
    1 row in set (0.00 sec)
    
    mysql> SHOW VARIABLES LIKE 'collation_server';
    +------------------+-----------------+
    | Variable_name    | Value           |
    +------------------+-----------------+
    | collation_server | utf8_general_ci |
    +------------------+-----------------+
    1 row in set (0.00 sec)

    创建与修改服务器级别命令:

    server]
    character_set_server=gbk
    collation_server=gbk_chinese_ci

    查看数据库级别命令:

    mysql> USE charset_demo_db;
    Database changed
    
    mysql> SHOW VARIABLES LIKE 'character_set_database';
    +------------------------+--------+
    | Variable_name          | Value  |
    +------------------------+--------+
    | character_set_database | gb2312 |
    +------------------------+--------+
    1 row in set (0.00 sec)
    
    mysql> SHOW VARIABLES LIKE 'collation_database';
    +--------------------+-------------------+
    | Variable_name      | Value             |
    +--------------------+-------------------+
    | collation_database | gb2312_chinese_ci |
    +--------------------+-------------------+
    1 row in set (0.00 sec)

    创建与修改数据库级别命令:

    CREATE DATABASE 数据库名
        [[DEFAULT] CHARACTER SET 字符集名称]
        [[DEFAULT] COLLATE 比较规则名称];
    
    ALTER DATABASE 数据库名
        [[DEFAULT] CHARACTER SET 字符集名称]
        [[DEFAULT] COLLATE 比较规则名称];

    创建与修改表级别命令:

    CREATE TABLE 表名 (列的信息)
        [[DEFAULT] CHARACTER SET 字符集名称]
        [COLLATE 比较规则名称]]
    
    ALTER TABLE 表名
        [[DEFAULT] CHARACTER SET 字符集名称]
        [COLLATE 比较规则名称]

    创建与修改列名级别命令:

    CREATE TABLE 表名(
        列名 字符串类型 [CHARACTER SET 字符集名称] [COLLATE 比较规则名称],
        其他列...
    );
    
    ALTER TABLE 表名 MODIFY 列名 字符串类型 [CHARACTER SET 字符集名称] [COLLATE 比较规则名称];

    各级别字符集和比较规则小结

    我们介绍的这4个级别字符集和比较规则的联系如下:

    • 如果创建或修改列时没有显式的指定字符集和比较规则,则该列默认用表的字符集和比较规则
    • 如果创建或修改表时没有显式的指定字符集和比较规则,则该表默认用数据库的字符集和比较规则
    • 如果创建或修改数据库时没有显式的指定字符集和比较规则,则该数据库默认用服务器的字符集和比较规则

    MySQL中字符集的转换

    我们知道从客户端发往服务器的请求本质上就是一个字符串,服务器向客户端返回的结果本质上也是一个字符串,而字符串其实是使用某种字符集编码的二进制数据。这个字符串可不是使用一种字符集的编码方式一条道走到黑的,从发送请求到返回结果这个过程中伴随着多次字符集的转换,在这个过程中会用到3个系统变量,我们先把它们写出来看一下:

    系统变量描述
    character_set_client 服务器解码请求时使用的字符集
    character_set_connection 服务器处理请求时会把请求字符串从character_set_client转为character_set_connection
    character_set_results 服务器向客户端返回数据时使用的字符集
  • 相关阅读:
    重新想象 Windows 8 Store Apps (46)
    重新想象 Windows 8 Store Apps (45)
    重新想象 Windows 8 Store Apps (44)
    重新想象 Windows 8 Store Apps (43)
    重新想象 Windows 8 Store Apps (42)
    重新想象 Windows 8 Store Apps (41)
    重新想象 Windows 8 Store Apps (40)
    重新想象 Windows 8 Store Apps (39)
    重新想象 Windows 8 Store Apps (38)
    重新想象 Windows 8 Store Apps (37)
  • 原文地址:https://www.cnblogs.com/caohanren/p/11879381.html
Copyright © 2011-2022 走看看