zoukankan      html  css  js  c++  java
  • MySQL中校验规则(collation)的选取对实际数据筛选的影响

    在mysql中存在着各种utf8编码格式,如下表:
    1)utf8_bin
    2)utf8_general_ci


    utf8_bin将字符串中的每一个字符用二进制数据存储,区分大小写。
    utf8_genera_ci不区分大小写,ci为case insensitive的缩写,即大小写不敏感。


    现在假设执行如下命令:
    create table test_bin (
    name varchar(32) not null primary key,
    age int unsigned not null
    ) engine = InnoDB COLLATE=utf8_bin;
    以上命令能够执行成功。

    create table test_ci (
    name varchar(32) not null primary key,
    age int unsigned not null
    ) engine = InnoDB COLLATE=utf8_general_ci;

    以上命令能够执行成功。
    insert into test_bin values('Alice', 18);

    以上命令能够执行成功。
    insert into test_bin values('alice', 18);

    以上命令能够执行成功,因为utf8_bin是以十六进制方式存储数据,两条记录的主键不重复。
    insert into test_ci values('Alice', 18);

    以上命令能够执行成功。
    insert into test_ci values('alice', 20);
    以上命令执行失败,因为utf8_general_ci不区分大小写,两条记录的主键重复。

    因为校验规则不同,所以使用两种校验规则的非唯一列相同结果的排序结果也会不同。建议使用utf8_bin校验规则

    mysql> select * from  test_paixu_ci order by name desc;
    +----+------+---------+
    | id | name | address |
    +----+------+---------+
    |  1 | huzj | hunan   |
    | 12 | huzj | hunan   |
    | 13 | Huzj | hunan   |
    | 14 | huzj | hunan   |
    | 15 | Huzj | hunan   |
    | 16 | huzj | hunan   |
    | 17 | HuzJ | hunan   |
    | 18 | huzj | hunan   |
    | 19 | HUZJ | hunan   |
    | 11 | hUzj | hunan   |
    | 10 | hUZj | hunan   |
    |  2 | huzJ | hunan   |
    |  3 | huzj | hunan   |
    |  4 | huZj | hunan   |
    |  5 | hUzj | hunan   |
    |  6 | huZj | hunan   |
    |  7 | huzj | hunan   |
    |  8 | huZj | hunan   |
    |  9 | hUzj | hunan   |
    | 20 | hUzj | hunan   |
    +----+------+---------+
    20 rows in set (0.00 sec)
    
    mysql> select * from  test_paixu_bin order by name desc;
    +----+------+---------+
    | id | name | address |
    +----+------+---------+
    |  1 | huzj | hunan   |
    | 14 | huzj | hunan   |
    | 16 | huzj | hunan   |
    |  7 | huzj | hunan   |
    | 12 | huzj | hunan   |
    | 18 | huzj | hunan   |
    |  3 | huzj | hunan   |
    |  2 | huzJ | hunan   |
    |  4 | huZj | hunan   |
    |  8 | huZj | hunan   |
    |  6 | huZj | hunan   |
    | 11 | hUzj | hunan   |
    |  9 | hUzj | hunan   |
    |  5 | hUzj | hunan   |
    | 20 | hUzj | hunan   |
    | 10 | hUZj | hunan   |
    | 13 | Huzj | hunan   |
    | 15 | Huzj | hunan   |
    | 17 | HuzJ | hunan   |
    | 19 | HUZJ | hunan   |
    +----+------+---------+
    20 rows in set (0.00 sec)
    
  • 相关阅读:
    配置webstorm使用supervisor时出现 /usr/bin/env: node: 没有那个文件或目录 解决方法
    解决Ubuntu不能挂载ntfs格式硬盘
    git远程操作
    git重写历史记录
    git撤销命令
    git查看历史命令
    git分支管理和stash
    git的忽略文件和删除文件操作
    homebrew学习(四)之取消homebrew自动更新
    homebrew学习(三)之homebrew命令
  • 原文地址:https://www.cnblogs.com/janehoo/p/6549776.html
Copyright © 2011-2022 走看看