MySQL 欄位內容區分大小寫

來源:互聯網
上載者:User

MySQL 欄位內容區分大小寫

資料由Oracle 遷入MySQL ,由於之前Oracle區分大小寫,MySQL的配置使用了預設配置,導致一些資料匯入失敗,有的唯一鍵報錯,衝突。

將測試過程記錄在下面。

資料庫版本:MySQL 5.7.11

校對規則一般有這些特徵:

  • 兩個不同的字元集不能有相同的校對規則。
  • 每個字元集有一個預設校對規則。例如,utf8預設校對規則是utf8_general_ci。
  • 存在校對規則命名規範:它們以其相關的字元集名開始,通常包括一個語言名,並且以_ci(大小寫不敏感)、_cs(大小寫敏感)或_bin(二元)結束。

查看支援的校正規則:

mysql> SHOW COLLATION  like  'utf8%' ; + --------------------------+---------+-----+---------+----------+---------+ | Collation                | Charset | Id  |  Default  | Compiled | Sortlen | + --------------------------+---------+-----+---------+----------+---------+ | utf8_general_ci          | utf8    |  33 | Yes     | Yes      |       1 | | utf8_bin                 | utf8    |  83 |         | Yes      |       1 | | utf8_unicode_ci          | utf8    | 192 |         | Yes      |       8 | ... | utf8mb4_general_ci       | utf8mb4 |  45 | Yes     | Yes      |       1 | | utf8mb4_bin              | utf8mb4 |  46 |         | Yes      |       1 | | utf8mb4_unicode_ci       | utf8mb4 | 224 |         | Yes      |       8 | | utf8mb4_icelandic_ci     | utf8mb4 | 225 |         | Yes      |       8 |

查看本地的校正規則:

mysql> show  global  variables  like  '%coll%' ; + ----------------------+--------------------+ | Variable_name        | Value              | + ----------------------+--------------------+ | collation_connection | utf8mb4_unicode_ci | | collation_database   | utf8mb4_unicode_ci | | collation_server     | utf8mb4_unicode_ci | + ----------------------+--------------------+

生產中資料庫使用的編碼為utf8mb4, 校正規則為 utf8mb4_unicode_ci,對大小寫不敏感

如果需要大小寫敏感,需要將定序修改為utf8mb4_bin.

測試後結果:修改資料庫配置後,不會對已經存在的表造成影響,如要生效需要修改特定列的定序。優先順序大概是這樣:列>表>資料庫>伺服器

有兩種方法使查詢區分大小寫:

第一種方法為修改列層級的校正規則為utf8mb4_bin

T表

CREATE  TABLE  `T` (   ` name varchar (20)  COLLATE  utf8mb4_unicode_ci  DEFAULT  NULL ) ENGINE=InnoDB  DEFAULT  CHARSET=utf8mb4  COLLATE =utf8mb4_unicode_ci mysql>  select  from  T; + ------+ name  | + ------+ | YOU  | | You  | | you  | | you  | | yOU  | + ------+

T2表:將列校對規則修改為utf8mb4_bin

CREATE  TABLE  `T2` (   ` name varchar (20)  CHARACTER  SET  utf8mb4  COLLATE  utf8mb4_bin  DEFAULT  NULL ) ENGINE=InnoDB  DEFAULT  CHARSET=utf8mb4  COLLATE =utf8mb4_unicode_ci mysql>  select  from  T2; + ------+ name  | + ------+ | yOU  | | you  | + ------+

查詢:

T:(未區分大小寫)

mysql>  select  from  where  name  'you' ; + ------+ name  | + ------+ | YOU  | | You  | | you  | | you  | | yOU  | + ------+

T2:(已經區分大小寫)

mysql>  select  from  T2  where  name  'you' ; + ------+ name  | + ------+ | you  | + ------+

第二種方法:  不修改配置,表結構,而使用如下的查詢語句:

T:(未修改表)

mysql>  select  from  where  name  binary 'you' ; + ------+ name  | + ------+ | you  | | you  | + ------+

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.