zoukankan      html  css  js  c++  java
  • Mysql区分大小写问题以及两表处理

    Mysql区分大小写问题

    修改MySql Server安装目录下的 my.ini 文件,在mysqld节下加入下面一行 set-variable=lower_case_table_names=0 (0:大小写敏感;1:大小写不敏感)最后重启一下MySql服务即可。

    Mysql查询语句中字符型字段不区分大小写解决方法
      项目中和前端联调的时候,发现Mysql查询语句中字符型字段值过滤是不区分大小写的,之前没有关注过这个设置,特意去网上看了下,原因是Mysql中“COLLATE”属性区分大小写,而该属性默认值为“utf8_general_ci”,这个值表示是不区分大小写的。现将解决方法记录如下:

      1.设置“COLLATE”属性值为“utf8_bin”或者“utf8_gerneral_cs”,utf8_bin表示二进制比较,同时也支持区分大小写;在Mysql5.6.10版本中,不支持utf8_genral_cs;

      2.在创建表的时候,指定表字段COLLATE 为utf8_bin或者utf8_general_cs(注意版本),如:

       alter table sample modify column module varchar(128) COLLATE utf8_bin ;

      3.修改字段为BINARY:

       alter table sample modify column module varchar(128) BINARY;

      4.查询语句字段前面加BINARY:

       select * from sample where BINARY module='SAMPLE';

    Keep moving.

    这边补充一下,建表时候utf8各个字段微小的差异。
    utf8_general_ci 不区分大小写,这个你在注册用户名和邮箱的时候就要使用。

    utf8_general_cs 区分大小写,如果用户名和邮箱用这个 就会造成不良后果

    utf8_bin:字符串每个字符串用二进制数据编译存储。 区分大小写,而且可以存二进制的内容

    utf8_general_ci校对速度快,但准确度稍差。

    utf8_unicode_ci准确度高,但校对速度稍慢。

    下面两种查询方式都帮我解决了大小写的问题:

    SELECT DISTINCT BINARY text_pw FROM `dictionary_library`.`test001`

    SELECT DISTINCT
    (CAST(text_pw AS CHAR CHARACTER SET utf8) COLLATE utf8_bin) AS text_pw FROM `dictionary_library`.`test001`

    测试语句:

    insert into
    test003
    SELECT DISTINCT BINARY text_pw FROM `dictionary_library`.`test001`
    UNION
    SELECT DISTINCT BINARY text_pw FROM `dictionary_library`.`test002`
    --------------------------------------------------------------------
    insert into
    dictionary_kaspar
    SELECT DISTINCT BINARY text_pw FROM `dictionary_library`.`dictionary_passper_15466385`
    UNION
    SELECT DISTINCT BINARY text_pw FROM `dictionary_library`.`rockyou_kali202101_14343751`
    UNION
    SELECT DISTINCT BINARY text_pw FROM `dictionary_library`.`shentouzidian_17140`

    Distinct可以说是数据查询中最耗时最耗性能的操作了,去重统计是数据查询不可言说的痛,所以不到万不得已不要用,另外,union all 后在distinct的效率如果更高的话,那union存在的意义是什么?所以可想而知,union的效率更高啊”

    在 MySQL 和 Oracle 中,SELECT 执行顺序基本相同)

    FROM > WHERE > GROUP BY > HAVING > SELECT的字段 > DISTINCT > ORDER BY > LIMIT

    修改过后(两张表区分大小写去重插入第三张表):

    INSERT INTO
    test003

    SELECT BINARY text_pw FROM `dictionary_library`.`test001`
    UNION
    SELECT BINARY text_pw FROM `dictionary_library`.`test002`

    区分大小写查询一张表在另一张表没有的数据:

    (使用关键字:NOT EXISTS或NOT IN)

    select BINARY text_pw from test001 AS t1 WHERE NOT EXISTS (SELECT BINARY text_pw FROM test002 AS t2 WHERE BINARY t2.text_pw=BINARY t1.text_pw)

    select BINARY text_pw from test001 AS t1 WHERE  BINARY text_pw NOT IN (SELECT BINARY text_pw FROM test002 AS t2 WHERE BINARY t2.text_pw=BINARY t1.text_pw)

    插入第三张表选择其一前面加上

    INSERT INTO   test003

    作者:Kaspar_Choo
             
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    剑指offer——最小的K个数和数组中第K大的元素
    Leetcode刷题指南链接整理
    160. Intersection of Two Linked Lists
    100. Same Tree
    92. Reverse Linked List II
    94. Binary Tree Inorder Traversal
    79. Word Search
    78,90,Subsets,46,47,Permutations,39,40 DFS 大合集
    0x16 Tire之最大的异或对
    0x16 Tire
  • 原文地址:https://www.cnblogs.com/kaspar/p/15303980.html
Copyright © 2011-2022 走看看