精华内容
下载资源
问答
  • 您可能感兴趣的文章:MySql查询不区分大小写解决方案(两种)MySQL中查询的有关英文字母大小写问题的分析Mysql大小写敏感的问题Mysql中大小写敏感问题导致的MySql Error 1146 Tabel doen’t exist错误教你如何在...
  • 原来Linux下的MySQL默认是区分表名大小写的,通过如下设置,可以让MySQL区分表名大小写:1、用root登录,修改 /etc/my.cnf;2、在[mysqld]节点下,加入一行: lower_case_table_names=13、重启MySQL即可; 其中 ...
  • Mysql区分大小写问题

    万次阅读 2018-12-24 11:34:34
    项目基础数据修改代码后测试,测试的时候不小心全输成了大写字母,结果还能查到数据,试了别的数据,发现是区分大小写的,于是...要想需要mysql(某个表)区分大小写,有以下几种方法: 方法一: 修改MySql Server...

    项目基础数据修改代码后测试,测试的时候不小心全输成了大写字母,结果还能查到数据,试了别的数据,发现是区分大小写的,于是对比了两个表的建表信息,发现了不同。

    区分大小写的:

    不区分大小写的:

    关键就出在COLLATE的设置上。 (先说一下大小写的问题,在介绍COLLATE的具体用法)

    要想需要mysql(某个表)区分大小写,有以下几种方法:

    方法一:

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

    方法二:

    设置表或行的collation,使其为binary或case sensitive。在MySQL中,对于Column Collate其约定的命名方法如下:

    *_bin: 表示的是binary case sensitive collation,也就是说是区分大小写的
    *_cs: case sensitive collation,区分大小写
    *_ci: case insensitive collation,不区分大小写

    方法三:

    要让mysql查询区分大小写,可以:

    1

    2

    select * from some_table where binary str='abc'

    select * from some_table where binary str='ABC'

    方法四:

    在建表时时候加以标识

    1

    2

    create table some_table(

       str char(20) binary )

     推荐使用方法二,直接在建表的时候设置对应的字符集,也不用改sql语句。

    下面详细介绍下COLLATE,转载的,转载地址:https://cloud.tencent.com/developer/article/1366841?fromSource=waitui

    所谓utf8_unicode_ci,其实是用来排序的规则。对于mysql中那些字符类型的列,如VARCHARCHARTEXT类型的列,都需要有一个COLLATE类型来告知mysql如何对该列进行排序和比较。简而言之,COLLATE会影响到ORDER BY语句的顺序,会影响到WHERE条件中大于小于号筛选出来的结果,会影响DISTINCTGROUP BYHAVING语句的查询结果。另外,mysql建索引的时候,如果索引列是字符类型,也会影响索引创建,只不过这种影响我们感知不到。总之,凡是涉及到字符类型比较或排序的地方,都会和COLLATE有关

    各种COLLATE的区别

    COLLATE通常是和数据编码(CHARSET)相关的,一般来说每种CHARSET都有多种它所支持的COLLATE,并且每种CHARSET都指定一种COLLATE为默认值。例如Latin1编码的默认COLLATElatin1_swedish_ciGBK编码的默认COLLATEgbk_chinese_ciutf8mb4编码的默认值为utf8mb4_general_ci

    这里顺便讲个题外话,mysql中有utf8utf8mb4两种编码,在mysql中请大家忘记utf8,永远使用utf8mb4。这是mysql的一个遗留问题,mysql中的utf8最多只能支持3bytes长度的字符编码,对于一些需要占据4bytes的文字,mysql的utf8就不支持了,要使用utf8mb4才行。

    很多COLLATE都带有_ci字样,这是Case Insensitive的缩写,即大小写无关,也就是说"A"和"a"在排序和比较的时候是一视同仁的。selection * from table1 where field1="a"同样可以把field1为"A"的值选出来。与此同时,对于那些_cs后缀的COLLATE,则是Case Sensitive,即大小写敏感的。

    在mysql中使用show collation指令可以查看到mysql所支持的所有COLLATE。以utf8mb4为例,该编码所支持的所有COLLATE如下图所示。

     

    图中我们能看到很多国家的语言自己的排序规则。在国内比较常用的是utf8mb4_general_ci(默认)、utf8mb4_unicode_ciutf8mb4_bin这三个。我们来探究一下这三个的区别:

    首先utf8mb4_bin的比较方法其实就是直接将所有字符看作二进制串,然后从最高位往最低位比对。所以很显然它是区分大小写的。

    utf8mb4_unicode_ciutf8mb4_general_ci对于中文和英文来说,其实是没有任何区别的。对于我们开发的国内使用的系统来说,随便选哪个都行。只是对于某些西方国家的字母来说,utf8mb4_unicode_ci会比utf8mb4_general_ci更符合他们的语言习惯一些,general是mysql一个比较老的标准了。例如,德语字母“ß”,在utf8mb4_unicode_ci中是等价于"ss"两个字母的(这是符合德国人习惯的做法),而在utf8mb4_general_ci中,它却和字母“s”等价。不过,这两种编码的那些微小的区别,对于正常的开发来说,很难感知到。本身我们也很少直接用文字字段去排序,退一步说,即使这个字母排错了一两个,真的能给系统带来灾难性后果么?从网上找的各种帖子讨论来说,更多人推荐使用utf8mb4_unicode_ci,但是对于使用了默认值的系统,也并没有非常排斥,并不认为有什么大问题。结论:推荐使用utf8mb4_unicode_ci,对于已经用了utf8mb4_general_ci的系统,也没有必要花时间改造。

    另外需要注意的一点是,从mysql 8.0开始,mysql默认的CHARSET已经不再是Latin1了,改为了utf8mb4,并且默认的COLLATE也改为了utf8mb4_0900_ai_ciutf8mb4_0900_ai_ci大体上就是unicode的进一步细分,0900指代unicode比较算法的编号( Unicode Collation Algorithm version),ai表示accent insensitive(发音无关),例如e, è, é, ê 和 ë是一视同仁的。

    COLLATE设置级别及其优先级

    设置COLLATE可以在示例级别、库级别、表级别、列级别、以及SQL指定。实例级别的COLLATE设置就是mysql配置文件或启动指令中的collation_connection系统变量。

    库级别设置COLLATE的语句如下:

    CREATE DATABASE <db_name> DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

    如果库级别没有设置CHARSETCOLLATE,则库级别默认的CHARSETCOLLATE使用实例级别的设置。在mysql8.0以下版本中,你如果什么都不修改,默认的CHARSETLatin1,默认的COLLATElatin1_swedish_ci。从mysql8.0开始,默认的CHARSET已经改为了utf8mb4,默认的COLLATE改为了utf8mb4_0900_ai_ci

    表级别的COLLATE设置,则是在CREATE TABLE的时候加上相关设置语句,例如:

    CREATE TABLE (
     …… 
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

    如果表级别没有设置CHARSETCOLLATE,则表级别会继承库级别的CHARSETCOLLATE

    列级别的设置,则在CREATE TABLE中声明列的时候指定,例如

    CREATE TABLE ( 
    `field1` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '',
     …… 
    ) ……

    如果列级别没有设置CHARSETCOLATE,则列级别会继承表级别的CHARSETCOLLATE

    最后,你也可以在写SQL查询的时候显示声明COLLATE来覆盖任何库表列的COLLATE设置,不太常用,了解即可:

    SELECT DISTINCT field1 COLLATE utf8mb4_general_ci FROM table1; 
    SELECT field1, field2 FROM table1 ORDER BY field1 COLLATE utf8mb4_unicode_ci;

    如果全都显示设置了,那么优先级顺序是 SQL语句 > 列级别设置 > 表级别设置 > 库级别设置 > 实例级别设置。也就是说列上所指定的COLLATE可以覆盖表上指定的COLLATE,表上指定的COLLATE可以覆盖库级别的COLLATE。如果没有指定,则继承下一级的设置。即列上面没有指定COLLATE,则该列的COLLATE和表上设置的一样。

    以上就是关于mysql的COLLATE相关知识。不过,在系统设计中,我们还是要尽量避免让系统严重依赖中文字段的排序结果,在mysql的查询中也应该尽量避免使用中文做查询条件。

    还有一篇关于字符集的介绍,也挺全的,是5.7.17

    地址:https://blog.csdn.net/u014711094/article/details/78821809

     

    展开全文
  • 【MySQL】mysql区分大小写问题

    万次阅读 2019-06-08 20:35:42
    最近模糊查询数据库里面的内容时,发现查询出来的内容与自己想要的不一样,筛选的结果区分了大小写...1、MySQL默认情况下是否区分大小写,使用show Variables like '%table_names'查看lower_case_table_names的值,0...

    最近模糊查询数据库里面的内容时,发现查询出来的内容与自己想要的不一样,筛选的结果区分了大小写。

    参考博客链接:https://www.cnblogs.com/457248499-qq-com/p/7360284.html

     

    1、MySQL默认情况下是否区分大小写,使用show Variables like '%table_names'查看lower_case_table_names的值,0代表区分,1代表不区分。



    2、mysql对于类型为varchar数据默认不区分大小写,但如果该字段以“*_bin”编码的话会使mysql对其区分大小写。

    utf8_general_ci --不区分大小写

    utf8_bin--区分大小写


     

     

    Linux下的MYSQL默认是要区分表名大小写的 ,而在windows下表名不区分大小写

      让MYSQL不区分表名大小写的方法其实很简单:

      1.用ROOT登录,修改/etc/my.cnf

      2.在[mysqld]下加入一行:lower_case_table_names=1

      3.重新启动数据库即可

    展开全文
  • MySQL默认是不区分大小写的,但是在很多情况下需要大小敏感,以下总结了多种设置MySQL大小写敏感的方法。 方法一: 修改MySql Server安装目录下的 my.ini 文件,在mysqld节下加入下面一行 set-variable=lower_...

    MySQL默认是不区分大小写的,但是在很多情况下需要大小敏感,以下总结了多种设置MySQL大小写敏感的方法。


    方法一:

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

    方法二:

    一种方法是可以设置表或行的collation,使其为binary或case sensitive。在MySQL中,对于Column Collate其约定的命名方法如下: 

    *_bin: 表示的是binary case sensitive collation,也就是说是区分大小写的 
    *_cs: case sensitive collation,区分大小写 
    *_ci: case insensitive collation,不区分大小写 


    ########### 
    # Start binary collation example 
    ########### 
    mysql> create table case_bin_test (word VARCHAR(10)) CHARACTER SET latin1 COLLATE latin1_bin; 
    Query OK, 0 rows affected (0.02 sec) 

    mysql> INSERT INTO case_bin_test VALUES ('Frank'),('Google'),('froogle'),('flickr'),('FlicKr'); 
    Query OK, 5 rows affected (0.00 sec) 
    Records: 5 Duplicates: 0 Warnings: 0 

    mysql> SELECT * FROM case_bin_test WHERE word LIKE 'f%'; 
    +---------+ 
    | word | 
    +---------+ 
    | froogle | 
    | flickr | 
    +---------+ 
    2 rows in set (0.00 sec) 

    mysql> SELECT * FROM case_bin_test WHERE word LIKE 'F%'; 
    +---------+ 
    | word | 
    +---------+ 
    | Frank | 
    | FlicKr | 
    +---------+ 
    4 rows in set (0.00 sec) 

    ########### 
    # End 
    ########### 

    方法三:

    ########### 
    # Start case sensitive collation example 
    ########### 

    mysql> create table case_cs_test (word VARCHAR(10)) CHARACTER SET latin1 COLLATE latin1_general_cs; 
    Query OK, 0 rows affected (0.08 sec) 

    mysql> INSERT INTO case_cs_test VALUES ('Frank'),('Google'),('froogle'),('flickr'),('FlicKr'); 
    Query OK, 5 rows affected (0.00 sec) 
    Records: 5 Duplicates: 0 Warnings: 0 

    mysql> SELECT * FROM case_cs_test WHERE word LIKE 'F%'; 
    +---------+ 
    | word | 
    +---------+ 
    | Frank | 
    | FlicKr | 
    +---------+ 
    4 rows in set (0.00 sec) 

    mysql> SELECT * FROM case_cs_test WHERE word LIKE 'f%'; 
    +---------+ 
    | word | 
    +---------+ 
    | froogle | 
    | flickr | 
    +---------+ 
    2 rows in set (0.00 sec) 

    ########### 
    # end 
    ########### 


    方法四:就是在查询时指定collation 

    mysql> create table case_test (word VARCHAR(10)) CHARACTER SET latin1; 
    Query OK, 0 rows affected (0.01 sec) 

    mysql> INSERT INTO case_test VALUES ('Frank'),('Google'),('froogle'),('flickr'),('FlicKr'); 
    Query OK, 7 rows affected (0.01 sec) 
    Records: 7 Duplicates: 0 Warnings: 0 
    mysql> SELECT * FROM case_test WHERE word LIKE 'f%'; 
    +---------+ 
    | word | 
    +---------+ 
    | Frank | 
    | froogle | 
    | flickr | 
    | FlicKr | 
    +---------+ 
    6 rows in set (0.01 sec) 

    mysql> SELECT * FROM case_test WHERE word LIKE 'F%'; 
    +---------+ 
    | word | 
    +---------+ 
    | Frank | 
    | froogle | 
    | flickr | 
    | FlicKr | 
    +---------+ 
    6 rows in set (0.01 sec) 


    mysql> SELECT * FROM case_test WHERE word COLLATE latin1_bin LIKE 'F%'; 
    +---------+ 
    | word | 
    +---------+ 
    | Frank | 
    | FlicKr | 
    +---------+ 
    4 rows in set (0.05 sec) 

    mysql> SELECT * FROM case_test WHERE word COLLATE latin1_bin LIKE 'f%'; 
    +---------+ 
    | word | 
    +---------+ 
    | froogle | 
    | flickr | 
    +---------+ 
    2 rows in set (0.00 sec) 



    mysql> SELECT * FROM case_test WHERE word LIKE 'f%' COLLATE latin1_bin; 
    +---------+ 
    | word | 
    +---------+ 
    | froogle | 
    | flickr | 
    +---------+ 
    2 rows in set (0.00 sec) 

    mysql> SELECT * FROM case_test WHERE word LIKE 'F%' COLLATE latin1_bin; 
    +---------+ 
    | word | 
    +---------+ 
    | Frank | 
    | FlicKr | 
    +---------+ 
    4 rows in set (0.01 sec) 


    mysql> SELECT * FROM case_test WHERE word LIKE 'F%' COLLATE latin1_general_cs; 
    +---------+ 
    | word | 
    +---------+ 
    | Frank | 
    | FlicKr | 
    +---------+ 
    4 rows in set (0.04 sec)

     方法五:

    要让mysql查询区分大小写,可以: 

    1. select  * from  table_name where  binary  a like  'a%'   
    2. select  * from  table_name where  binary  a like  'A%'   
     



    也可以在建表时,加以标识 

    create  table  table_name(  

         a varchar (20) binary


    展开全文
  • 今天小编就为大家分享一篇关于解决MySQl查询不区分大小写的方法讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
  • MySQL8.0之后,数据库和表名称的大小写问题与之前的MySQL设置不同,需要引起重视,不然后续修改很麻烦。
  • 就是mysql默认的字段值不区分大小写?这点是比较令人头痛的事。直接使用客户端用sql查询数据库。 发现的确是大小不敏感 。 通过查询资料发现需要设置collate(校对) 。 collate规则: *_bin: 表示的是binary case...
  • Mysql 查询 区分大小写吗

    千次阅读 2017-08-18 13:55:55
    Mysql 查询 区分大小写吗?  答案是:不区分。 如果业务需要:SELECT * from tb_user WHERE BINARY userName = 'quanbu' 关键字 或者建表时: create table some_table(  str char(20) binary )

    Mysql 查询 区分大小写吗?

           答案是:不区分。

    如果业务需要:SELECT * from tb_user WHERE BINARYuserName = 'quanbu' 关键字


    或者建表时:

    create table some_table(
        str char (20)binary
    )

    展开全文
  • 登录mysql区分大小写

    2019-06-05 15:33:08
    登录区分大小写有两种实现方式: java代码实现 ; mysql实现 ; java代码实现 先从数据库取出数据,在代码中进行登录账号的对比,此处,我拿出代码中的一部分,可参考,无法直接使用。 采用java字符串的compareTo...
  •  *_bin: 表示的是binary case sensitive collation,也就是说是区分大小写的  *_cs: case sensitive collation,区分大小写  *_ci: case insensitive collation,不区分大小写 解决方法。 1.
  • oracle中查询默认是区分大小写的,但是在mysql中默认不区分大小写。 解决办法: mysql可以在SQL语句中加入 binary来区分大小写。BINARY不是函数,是类型转换运算符,它用来强制它后面的字符串为一个二进制字符串...
  • https://blog.csdn.net/qq_29246225/article/details/52293549一、Linux中MySQL大小写详情:1、数据库名严格区分大小写2、表名严格区分大小写的3、表的别名严格区分大小写4、变量名严格区分大小写5、列名在所有的...
  • 问题引发: 假设现在有 表A 和 表B(A和B分别为表名),具体设计如下: 其中,表B的 aid 是外键,关联...上网找,说是因为 MYSQL 数据库大小写敏感的问题: 查看数据库大小写敏感设置的语句: show variables like '
  • 在Linux系统中MySQL默认是严格区分大小写MySQL在Linux下数据库名、表名、列名、别名大小写规则是这样的:   1、数据库名与表名是严格区分大小写的;   2、表的别名是严格区分大小写的;   3、列名与列的...
  • mysql表名区分大小写

    千次阅读 2017-02-19 16:02:01
    访问项目的时候总是提示forum.T_BASE_USER表不存在,我就郁闷了,这个表明明在的呢今天郁闷死了,在LINUX下调一个程序老说找不到表,但是我明明是建了表的,在MYSQL的命令行下也可以查到,为什么程序就找不到表呢?...
  • 一开发同事在linux下调一个程序老是报错说找不到表,但是登陆mysql,show tables查看明明是已经创建了这张表的!!如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 ...
  • 1、mysql查询是否区分大小写。 2、mysql查询区分大小写的设置。
  • 这就意味着数据库和表名在 Windows 中是大小写不敏感的,而在大多数类型的 Unix 系统中是大小写敏感的。一个特例是 Mac OS X,当缺省的 HFS+ 文件系统使用时。然而 Mac OS X 还支持 UFS 卷,那些在 Mac OS X 是大小...
  • mysql 区分大小写(大小写敏感)配置

    千次阅读 2019-11-29 13:13:29
    Linux下mysql默认区分大小写 Windows下mysql默认不区分大小写 查看是否区分大小写 show variables like 'lower%' lower_case_table_names参数详解: lower_case_table_names = 0其中 0:区分大小写,1:不...
  • MySQL大小写问题 不是一个很大的问题,但是如果不了解的话,却会使用户产生迷惑 ;如下面 Sql代码 insert into t values(‘A’); insert into t values(‘a’); 当第二条执行的时候,如果是主键或者有唯一性...
  • springboot+mybatis plus获取数据时,发现mysql竟然没有区分大小写都能识别出来,具体的sql如下: select * from user where username = #{username} 二、分析 Mysql默认的字符检索策略:utf8_general_ci,表示不...
  • MySQL中,对于Column Collate其约定的命名方法如下: *_bin: 表示的是binary case sensitive collation,也就是说是区分大小写的 *_cs: case sensitive collation,区分大小写 *_ci: case insensitive collation,...
  • mysql设置不区分大小写 windows下 到安装mysql的目录,修改my.ini文件 在文件最后一行加上下面一句话 lower_case_table_names=1 说明 0:区分大小写,1:不区分大小写 效果如下 [mysqld] port = 3306 basedir=F...
  • 查看当前mysql大小写敏感配置: $ show global variables like '%lower_case%'; lower_case_file_system表示当前系统文件是否大小写敏感,只读参数,无法修改。 ON表示大小写不敏感。 OFF表示大小写敏感。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 98,684
精华内容 39,473
关键字:

mysql区分大小写吗

mysql 订阅