暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL大小写敏感

MYSQL轻松学 2021-10-18
1143

在MySQL中,数据库、表、triggers实际上都对应了datadir目录(或子目录)下的文件,因此,这些对象的名字是否大小写敏感主要是依赖于操作系统和文件系统的,因此这些内容在Windows中是大小写是不敏感的,而在大多数类Unix系统中是敏感的(Mac OS X除外),当然对于建立在这些类Unix系统上的MySQL,敏感性可以在一定程度上通过参数的修改来设定。

一、column(包括别名)、 index、routine和 event names在所有平台上大小写都是不敏感的;
二、logfile groups名称在所有平台上都是大小写敏感的;

三、database,table(包括别名)的大小写敏感性可以通过系统参数lower_case_table_names来配置(修改参数的值需要重启数据库);

value
说明
0
大小写敏感,数据按照CREATE 语句中的定义存储在磁盘,且在查询的时候是区分大小写的;
1
大小写不敏感,MySQL将数据全部转化为小写形式存储在磁盘上,而且在查询的时候也是全部转化为小写进行比较;
2
大小写不敏感,大多数引擎是将数据按照CREATE 语句中的定义存储在磁盘上(Innodb是小写存储),但是在查询的时候全部转化为小写进行比较;这种设置仅适用于大小写不敏感的操作系统;
注意:不要在大小写不敏感的系统上使用此设置,因为容易导致像MyISAM引擎表的索引崩溃;

四、trigger,identifiers的大小写敏感性不受lower_case_table_names参数影响,在Windows和MAC OS X上是不敏感的,在其他类Unix系统上也是不敏感的;

五、数据敏感性:由Mysql的校对字符集规则来控制(Collation),默认大小写不敏感;
  1. 每一个字符型column都有一个“字符集属性(character set)”和一个“校对集属性(collation set)”,其中character set影响列的存储编码,collation影响列数据的排序规则(或者说比较规则);

  2. 可以通过“show collation”命令查看当前版本DB支持的所有collation,其中“_ci”代表case-insensitive大小写不敏感,“_cs”代表case-sensitive大小写敏感,“_bin”的大小写敏感依赖于character的二进制编码;

  3. collation可以在数据库对象(server、database、table、column)的定义中指定,也可以在SQL语句中使用;可以通过“show variables like 'collation%'”查看数据库级别设置的各种collation规则,分为connection、database和server;

  4. collation的声明需要和字符集一一对应,例如utf8_general_ci不能和latin1同时使用;


例如:有如下2条记录,如果我们只想查询小写的'a'怎么办?

    root@[test]>select * from t1 where name ='a';
    +------+------+
    | id   | name |
    +------+------+
    |    1 | a    |
    |    2 | A    |
    +------+------+


    # 可以在字段name前加个binary,使其区分大小写:


    root@[test]>select * from t1 where binary name ='a';
    +------+------+
    | id   | name |
    +------+------+
    |    1 | a    |
    +------+------+

    六、如果不调参数,各种类型大小写敏感如下:
    类型
    敏感
    不敏感
    database

    table

    index

    column

    value

    routine

    trigger

    event



    文章转载自MYSQL轻松学,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

    评论