使MySQL查询区分轻重缓急写的达成格局,MySQL查询时强制区分轻重缓急写

MySQL查询时强制区分大小写的方法

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

平时很少会考虑数据存储需要明确字符串类型字段的大小写,MySQL默认的查询也不区分大小写。但作为用户信息,一旦用户名重复,又会浪费很多资源。再者,李逵、李鬼的多起来,侦辨起来很困难。要做到这一点,要么在建表时,明确大小写敏感(字段明确大小写敏感)。如果通盘数据库所有字段都需要大小写敏感,不如在字符集设置时做好调整。不过,通常不建议这么做。

 

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

如果跟我一样,数据库已经在线上跑了,一个表上百万条数据,做字段类型变更有可能导致数据库宕机。那么好吧,在查询时,多加个单词好了!
例如,一般查询:

平时很少会考虑数据存储需要明确字符串类型字段的大小写,MySQL默认的查询也不区分大小写。但作为用户信息,一旦用户名重复,又会浪费很多资源。再者,李逵、李鬼的多起来,侦辨起来很困难。要做到这一点,要么在建表时,明确大小写敏感(字段明确大小写敏感)。如果通盘数据库所有字段都需要大小写敏感,不如在字符集设置时做好调整。不过,通常不建议这么做。

###########
# 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)

SELECT * FROM `user` WHERE name LIKE 'a%';  
SELECT * FROM `user` WHERE name LIKE 'A%';  

   www.2cto.com  

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

其结果是一样的,为了区分’A%’和’a%’,可以这么做:

如果跟我一样,数据库已经在线上跑了,一个表上百万条数据,做字段类型变更有可能导致数据库宕机。那么好吧,在查询时,多加个单词好了!

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

SELECT * FROM `user` WHERE binary name LIKE 'a%';  
SELECT * FROM `user` WHERE binary name LIKE 'A%';  

 

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

仅仅多了一个binary,就可以得到不同的结果!

例如,一般查询:

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

当然,如果需要建表时强制区分大小写,可以这么写:

 

**2、另外一种方法

create  table  `user`(    
     name varchar (20) binary      
); 

Sql代码  

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

SELECT * FROM U WHERE name LIKE ‘a%’;  

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

SELECT * FROM U WHERE name LIKE ‘A%’;  

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

其结果是一样的,为了区分’A%’和’a%’,可以这么做:

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)

Sql代码  

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

SELECT * FROM U WHERE binary name LIKE ‘a%’;  

**3、还有一种方法就是在查询时指定collation

SELECT * FROM U WHERE binary name LIKE ‘A%’;  

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

仅仅多了一个binary,就可以得到不同的结果!

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)

   www.2cto.com  

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)

Sql代码  

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

create  table  table_name(    

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

     name varchar (20) binary      

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

);  

您可能感兴趣的文章:

  • MySql查询不区分大小写解决方案(两种)
  • MySQL中查询的有关英文字母大小写问题的分析
  • Mysql大小写敏感的问题
  • Mysql中大小写敏感问题导致的MySql Error 1146 Tabel doen’t
    exist错误
  • 教你如何在windows与linux系统中设置MySQL数据库名、表名大小写敏感
  • MySQL表名不区分大小写的设置方法
  • MYSQL的binary解决mysql数据大小写敏感问题的方法
  • Mysql数据库名和表名在不同系统下的大小写敏感问题
  • MySQL修改配置 区分大小写
  • 详解MySQL查询时区分字符串中字母大小写的方法

 就这么简单!

平时很少会考虑数据存储需要明确字符串类型字段的大小写,MySQL默认的查询也不区分大小写。但作为用…

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website