• 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
             
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    使用json序列化类型为“ajax学习.DataSetComment+T_CommentDataTable”的对象时检测到循环引用。
    CKEditor在asp.net上使用的图例详解
    去掉 win7 “测试模式 windows7 内部版本7601” 字样
    Java中非静态方法是否共用同一块内存?
    最长公共子串(LCS)
    [链表]复杂链表的复制
    最长公共子序列
    最大子序列和问题
    [ 队列]从上往下遍历二元树
    [链表]在O(1)时间删除链表结点
  • 原文地址:https://www.cnblogs.com/kaspar/p/15303980.html
Copyright © 2020-2023  润新知