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

  • 相关阅读:
    【python】虎牙直播爬虫项目
    【python】读取文件夹中所有文件名,os.walk( )
    【人工智能】使用百度api批量识别图片上的文字,进阶版
    【人工智能】使用百度api识别图片上的文字
    【python】词云图,超简单入门版
    【python】词云图,轮廓+着色,进阶版
    【python】词云图,进阶版
    【python】词云图,入门版
    【python】前程无忧51job岗位招聘信息爬虫程序,自动翻页,进阶版
    【HTML】使用百度地图api制作地图热力图,带控件,进阶版
  • 原文地址:https://www.cnblogs.com/baby123/p/11384492.html
Copyright © 2011-2022 走看看