• mysql 字符集


    mysql支持使用不同的字符集存储数据,支持四个级别的字符集设置:server、database、table 和 column。 MyISAMMEMORY, and InnoDB 三个存储引擎都支持不同的字符集设置。

    本文参考:mysql 官网 http://www.mysql.com/ 

     

    一、字符集和比对规则

    字符集(character set):是一组符号和编码

    比对规则(collation):是一组字符比对的规则

    举例:

    假设 A=0 , B=1 ,a=2, b=3。那么其中A 就是一个符号,0就是一个编码。 4个字母和他们编码的总和被称为字符集。

    1.如果我们想要比较字符 A 和 B的大小,那么我们使用他们的编码 0 和 1 进行比较,得A<B。

    这种比对规则 只包含了一种规则(编码的比较),我们称之为二进制比对规则。

    2.如果我们不区分大小写,那么A 是=a的。

    这种比对规则包含了两种规则,1)大小写字母相等。 2)比较编码。我们称之为大小写敏感的比对规则

    但是,在实际生活中,字符集都包含大量的字母和符号。比对规则也包含众多的规则。

    mysql可以做什么呢?

    1)使用不同的字符集来存储字符。

    2)使用不同的比对规则来进行字符的比较。

    3)在同一台服务器、数据库甚至数据表中,混合使用不同的字符集。

    二、mysql 中支持的字符集和比对规则

    安装好mysql server之后,可以通过两种方式来查看其支持的character sets 和 collation。

    1)查看系统表:INFOMATION_SCHEMA   CHARACTER_SETS

    2)使用命令:SHOW CHARACTER_SET (可跟 like where 条件表达式)

    一套字符集可能会使用多种比对规则,查看方法如下:

    1)查看系统表:INFOMATION_SCHEMA   COLLATIONS

    2)使用命令:SHOW COLLATION  (可跟 like where 条件表达式)

    三、在mysql中指定字符集和比对规则

    Server character set 和 collation-server(服务器级别的字符集)
    1.启动服务时指定
    Mysqld --character-set-server=latin1 --collation-server=latin1_swedish_ci
    2.配置文件指定
    [mysqld]
    character-set-server=latin1
    collation-server=latin1_swedish_ci

    Database character set 和 collation (数据库级别)
    1.创建时
    Create database db_name
    [[DEFAULT] CHARACTER SET charset_name]
    [[DEFAULT] COLLATE collation_name]

    2.修改时
    ALTER DATABASE db_name
    [[DEFAULT] CHARACTER SET charset_name]
    [[DEFAULT] COLLATE collation_name]
    注:所有的database options 都保存在database文件的 db.opt 文本文件中

    查看当前数据库设置的字符集信息

    USE db_name;
    SELECT @@character_set_database, @@collation_database;

    SELECT DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME
    FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = 'db_name';

    Table character set 和 collation (表级别)

    同database level

    CREATE TABLE tbl_name (column_list)

        [[DEFAULT] CHARACTER SET charset_name]

        [COLLATE collation_name]]

    ALTER TABLE tbl_name

        [[DEFAULT] CHARACTER SET charset_name]

        [COLLATE collation_name]

    Column character set 和 collation (列级别)

    col_name {CHAR | VARCHAR | TEXT} (col_length)

        [CHARACTER SET charset_name]

        [COLLATE collation_name]

     

    Examples:

    CREATE TABLE t1

    (

        col1 VARCHAR(5)

          CHARACTER SET latin1

          COLLATE latin1_german1_ci

    );

    ALTER TABLE t1 MODIFY

        col1 VARCHAR(5)

          CHARACTER SET latin1

          COLLATE latin1_swedish_ci;

    字符串的 character 和 collation (普通字符串级别)

    Select ‘string’ 使用的是character_set_connection 指定的字符集

    字符 的 字符集指定语法

    [_charset_name]'string' [COLLATE collation_name]

    Examples:

    SELECT 'abc';

    SELECT _latin1'abc';

    SELECT _binary'abc';

    SELECT _utf8'abc' COLLATE utf8_danish_ci;

     

    四、client-server 程序交互涉及到的字符集和比对规则

    数据最终的存储编码

    1.系统变量Character_set_server和 collation_server 设置服务器程序的字符集及比对顺序

    1.系统变量character_set_database和collation_database 标识了数据库默认的字符集

    Client 和 server 进行信息交互所使用的编码

    1.系统变量character_set_client标识了客户端程序发送到服务端程序所使用的字符集

    2.Server使用 character_set_connection 和collation_connection 标识的字符集来翻译来自client的sql 命令

    3.Character_set_results:server返回执行结果所使用的编码

    Client 程序所使用的字符编码

    注:默认使用OS上的默认编码。若、mysql不支持OS默认编码,则使用mysql默认编码latin1

    编码修改方法:

    1. client 启动时,增加选项 --default-character-set=char-name

    2. 配置文件my.ini中指定

    [mysql]

    Default-character-set=char-name

    注:此时c-s交互编码会自动被设置为 以上编码

  • 相关阅读:
    windwos 安全基线
    Linux 安全基线
    OWASP top 10 (2017) 学习笔记--跨站脚本(XSS)
    OWASP top 10 (2017) 学习笔记--安全错误配置
    OWASP top 10 (2017) 学习笔记--失效的访问控制
    OWASP top 10 (2017) 学习笔记--XML外部实体(XXE)
    How to Install MongoDB 4.2 on CentOS/RHEL 8/7/6
    C# 正则表达式 双引号
    转载-js判断数组是否有重复值
    如何在Nginx.conf中使用环境变量
  • 原文地址:https://www.cnblogs.com/ahguSH/p/7155528.html
Copyright © 2020-2023  润新知