zoukankan      html  css  js  c++  java
  • mysql字段值如何区分大小写

    今天做sql查询,发现字段值没区分大小写

    mysql> select guid,type,parent_guid from api_assets where guid='3rfI2PsSrCz91mTMDgrZjE';
    +------------------------+--------+------------------------+
    | guid | type | parent_guid |
    +------------------------+--------+------------------------+
    | 3rfI2PsSrCz91mTMDgrZjE | Window | 3rfI2PsSrCz91mTMDgry9E |
    | 3rfI2PsSrCz91mTMDgrzje | Member | 3rfI2PsSrCz91mTMDgrzj1 |
    | 3rfI2PsSrCz91mTMDgrzjE | Plate | 3rfI2PsSrCz91mTMDgrzjU |
    +------------------------+--------+------------------------+

    系统:

      win7

    数据库版本

    mysql> select version();
    +------------+
    | version() |
    +------------+
    | 5.7.26-log |
    +------------+

    解决方法

      1.查询时指定大小写敏感

        在查询时指定大小写“敏感”,加关键字“BINARY”

    mysql> select guid,type,parent_guid from api_assets where BINARY guid='3rfI2PsSrCz91mTMDgrZjE';
    +------------------------+--------+------------------------+
    | guid | type | parent_guid |
    +------------------------+--------+------------------------+
    | 3rfI2PsSrCz91mTMDgrZjE | Window | 3rfI2PsSrCz91mTMDgry9E |
    +------------------------+--------+------------------------+

    mysql> select guid,type,parent_guid from api_assets where guid= BINARY '3rfI2PsSrCz91mTMDgrZjE';
    +------------------------+--------+------------------------+
    | guid | type | parent_guid |
    +------------------------+--------+------------------------+
    | 3rfI2PsSrCz91mTMDgrZjE | Window | 3rfI2PsSrCz91mTMDgry9E |
    +------------------------+--------+------------------------+

      2.定义表结构时指定字段大小写敏感

      关键字“BINARY”指定guid字段大小写敏感

    CREATE TABLE `api_assets` (
      `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
      `guid` varchar(255) BINARY NOT NULL,
      ……
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

    MySQL允许在大多数字符串类型上使用BINARY关键字,用于指明所有针对该字段的运算是大小写敏感的 

      3.修改排序规则(COLLATION)

    mysql> show variables like 'collation\_database';
    +--------------------+-----------------+
    | Variable_name | Value |
    +--------------------+-----------------+
    | collation_database | utf8_general_ci |
    +--------------------+-----------------+

      Collation以 "_ci"结尾的不区分大小写(ci——Case Ignore),以"_bin"或者"_cs"结尾的区分大小写

      将Collation改为 utf8_bin(大小写敏感的)

      可以为库、表、列指定Collation。

      优先级为 列>表>库

      eg:

    mysql> CREATE DATABASE test COLLATE utf8_bin;
    Query OK, 1 row affected

    mysql> use test;
    Database changed
    mysql> show variables like 'collation\_database';
    +--------------------+----------+
    | Variable_name | Value |
    +--------------------+----------+
    | collation_database | utf8_bin |
    +--------------------+----------+

    mysql> select guid,type,parent_guid from api_assets where
    guid='3rfI2PsSrCz91mTMDgrZjE';
    +------------------------+--------+------------------------+
    | guid | type | parent_guid |
    +------------------------+--------+------------------------+
    | 3rfI2PsSrCz91mTMDgrZjE | Window | 3rfI2PsSrCz91mTMDgry9E |
    | 3rfI2PsSrCz91mTMDgrzje | Member | 3rfI2PsSrCz91mTMDgrzj1 |
    | 3rfI2PsSrCz91mTMDgrzjE | Plate | 3rfI2PsSrCz91mTMDgrzjU |
    +------------------------+--------+------------------------+
    3 rows in set

    mysql> ALTER TABLE `api_assets` DEFAULT CHARACTER SET=utf8 COLLATE=utf8_bin;
    Query OK, 0 rows affected
    Records: 0 Duplicates: 0 Warnings: 0

    mysql> select guid,type,parent_guid from api_assets where guid='3rfI2PsSrCz91mTMDgrZjE';
    +------------------------+--------+------------------------+
    | guid | type | parent_guid |
    +------------------------+--------+------------------------+
    | 3rfI2PsSrCz91mTMDgrZjE | Window | 3rfI2PsSrCz91mTMDgry9E |
    | 3rfI2PsSrCz91mTMDgrzje | Member | 3rfI2PsSrCz91mTMDgrzj1 |
    | 3rfI2PsSrCz91mTMDgrzjE | Plate | 3rfI2PsSrCz91mTMDgrzjU |
    +------------------------+--------+------------------------+
    3 rows in set

    mysql> ALTER TABLE `api_assets` MODIFY COLUMN `guid` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL AFTER `id`;
    Query OK, 3344 rows affected
    Records: 3344 Duplicates: 0 Warnings: 0

    mysql> select guid,type,parent_guid from api_assets where guid='3rfI2PsSrCz91mTMDgrZjE';
    +------------------------+--------+------------------------+
    | guid | type | parent_guid |
    +------------------------+--------+------------------------+
    | 3rfI2PsSrCz91mTMDgrZjE | Window | 3rfI2PsSrCz91mTMDgry9E |
    +------------------------+--------+------------------------+
    1 row in set

  • 相关阅读:
    深度学习100问之深度学习的本质
    Docker在Windows下的安装以及Hello World
    杂谈——如何在CSDN上上传图片,并添加到自定义栏目中
    打造livecd的注意事项
    打造livecd的注意事项
    磁盘管理基础
    磁盘管理基础
    磁盘管理基础
    磁盘管理基础
    LFS资料和SSH远程登录全过程
  • 原文地址:https://www.cnblogs.com/baby123/p/11384492.html
Copyright © 2011-2022 走看看