MySQL中BINARY怎么用

技术MySQL中BINARY怎么用这篇文章给大家分享的是有关MySQL中BINARY怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。数据库版本:MySQL 5.6.26线上某业务表为了区分

这篇文章给大家分享的是有关关系型数据库中二进制的怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

数据库版本:

MySQL 5.6.26

线上某业务表为了区分大小写,使用二进制的关键字,正常来说使用这个关键字是走索引的,测试过程如下:

创建测试表,插入数据:

如果学生存在,则删除表;

创建表格”学生”(

` id ` int(11)PRIMAry key auto _ increment,

` name` varchar(20) DEFAULT NULL,

键` idx_name`(`name `)

)ENGINE=Innodb DEFAULT CHARSET=ut F8;

插入“学生”(“身份证”、“姓名”)值(“1”、“迈克尔”);

插入“学生”(“身份证”、“姓名”)值(“2”、“露西”);

插入“学生”(“身份证”、“姓名”)值(“3”、“nacy”);

插入“学生”(“身份证”、“姓名”)值(“4”、“麦克”);

插入”学生”(“身份证”、“姓名”)值(空,“国”);

插入”学生”(“身份证”、“姓名”)值(“6″、”国”);

不加二进制的关键字可以走索引:

mysql desc从学生中选择*其中姓名=’郭’

– – – – – – – – – –

| id | select _ type | table | type | optional _ keys | key | key _ len | ref | row | Extra |

– – – – – – – – – –

| 1 | SIMPLE | student | ref | idx _ name | idx _ name | 63 | const | 2 |使用位置;使用索引|

– – – – – – – – – –

一行一组(0.03秒)

正常来说二进制的关键字是可以走索引的:

mysql desc从学生中选择*其中BINARY name=’ guo ‘

– – – – – – – – – –

| id | select _ type | table | type | optional _ keys | key | key _ len | ref | row | Extranbs

p;              |
+—-+————-+———+——-+—————+———-+———+——+——+————————–+
| 1  | SIMPLE      | student | index | NULL          | idx_name | 63      | NULL | 6    | Using where; Using index |
+—-+————-+———+——-+—————+———-+———+——+——+————————–+
1 rows in set (0.04 sec)
不使用BINARY关键字默认不会区分大小写:

mysql> select * from student where name = 'guo';
+—-+——+
| id | name |
+—-+——+
| 5  | guo  |
| 6  | Guo  |
+—-+——+
2 rows in set (0.03 sec)

mysql> select * from student where name = 'Guo';
+—-+——+
| id | name |
+—-+——+
| 5  | guo  |
| 6  | Guo  |
+—-+——+
2 rows in set (0.03 sec)
使用BINARY关键字可以区分大小写:

mysql>  select * from student where BINARY name = 'guo';
+—-+——+
| id | name |
+—-+——+
| 5  | guo  |
+—-+——+
1 rows in set (0.04 sec)

mysql>  select * from student where BINARY name = 'Guo';
+—-+——+
| id | name |
+—-+——+
| 6  | Guo  |
+—-+——+
1 rows in set (0.03 sec)

mysql>
到这里以上都没问题,但关键在于,业务的表结构大于索引的最大长度即字串长度超过255。

CREATE TABLE `student` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(2000) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_name` (`name`(255))
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8

mysql> desc select * from student where name = 'guo';
+—-+————-+———+——+—————+———-+———+——-+——+————-+
| id | select_type | table   | type | possible_keys | key      | key_len | ref   | rows | Extra       |
+—-+————-+———+——+—————+———-+———+——-+——+————-+
| 1  | SIMPLE      | student | ref  | idx_name      | idx_name | 768     | const | 2    | Using where |
+—-+————-+———+——+—————+———-+———+——-+——+————-+
1 rows in set (0.04 sec)
加上BINARY关键字不再走索引:

mysql> desc select * from student where BINARY name = 'guo';
+—-+————-+———+——+—————+——+———+——+——+————-+
| id | select_type | table   | type | possible_keys | key  | key_len | ref  | rows | Extra       |
+—-+————-+———+——+—————+——+———+——+——+————-+
| 1  | SIMPLE      | student | ALL  | NULL          | NULL | NULL    | NULL | 6    | Using where |
+—-+————-+———+——+—————+——+———+——+——+————-+
1 rows in set (0.05 sec)

mysql>
这时需要在表结构里加上BINARY

mysql>ALTER TABLE student MODIFY COLUMN name VARCHAR(20) BINARY;
Query OK, 6 rows affected (0.06 sec)
数据库会自动转换成COLLATE utf8_bin
collate关键字为校对集,主要是对字符集之间的比较和排序,可以通过 show collation查看所有的校对集

mysql> show create table student\G
*************************** 1. row ***************************
Table       : student
Create Table: CREATE TABLE `student` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8
1 rows in set (0.39 sec)

mysql>

mysql> desc select * from student where name = 'guo';
+—-+————-+———+——+—————+———-+———+——-+——+————————–+
| id | select_type | table   | type | possible_keys | key      | key_len | ref   | rows | Extra                    |
+—-+————-+———+——+—————+———-+———+——-+——+————————–+
| 1  | SIMPLE      | student | ref  | idx_name      | idx_name | 63      | const | 1    | Using where; Using index |
+—-+————-+———+——+—————+———-+———+——-+——+————————–+
1 rows in set (0.07 sec)

mysql>
即可区分大小写:

mysql> select * from student where name = 'guo';
+—-+——+
| id | name |
+—-+——+
| 5  | guo  |
+—-+——+
1 rows in set (0.07 sec)

mysql> select * from student where name = 'Guo';
+—-+——+
| id | name |
+—-+——+
| 6  | Guo  |
+—-+——+
1 rows in set (0.06 sec)

mysql>

感谢各位的阅读!关于“MySQL中BINARY怎么用”这篇文章就分享到这里了,希望

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/65910.html

(0)

相关推荐

  • Hibernate在HQL中查询的方法有哪些

    技术Hibernate在HQL中查询的方法有哪些本篇内容介绍了“Hibernate在HQL中查询的方法有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧

    攻略 2021年12月4日
  • web设计模式中的单例模式是什么

    技术web设计模式中的单例模式是什么本篇内容介绍了“web设计模式中的单例模式是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够

    攻略 2021年11月15日
  • 形容沙尘暴的搞笑句子,形容天气寒冷的搞笑句子

    技术形容沙尘暴的搞笑句子,形容天气寒冷的搞笑句子1.寒冷的冬日,你清早的一个微笑让我暖入心底,开始美好的一天形容沙尘暴的搞笑句子。2.北风怒号,像一匹脱缰的烈马卷着杂物在半空里肆虐,打到脸上像鞭子抽一样疼,但是你的一句话

    生活 2021年10月25日
  • 抖音刷粉网址,快来点击优质的刷赞平台

    技术抖音刷粉网址,快来点击优质的刷赞平台谈到抖音自然涨粉,而抖音热门话题自然涨粉,只有热门推荐才有可能涨粉,但想要成为热门话题,必须有一定的基础点赞量,基础留言量。如果没有这些指标就很难成为热门,所以我们需要重新审视一下

    测评 2021年10月19日
  • 喵喵喵是什么意思,猫往人身上蹭是什么意思

    技术喵喵喵是什么意思,猫往人身上蹭是什么意思猫咪蹭人可是有着很丰富的含义呢,各位铲屎官快点跟着喵大侠来了解一下吧喵喵喵是什么意思。1、如果猫咪用小脑袋的一侧、身体的一侧,或者是用尾巴对着你蹭来蹭去,这是给你打个招呼呢!一

    生活 2021年10月26日
  • Java程序员需要掌握的技能有哪些

    技术Java程序员需要掌握的技能有哪些这篇文章主要介绍“Java程序员需要掌握的技能有哪些”,在日常操作中,相信很多人在Java程序员需要掌握的技能有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望

    攻略 2021年11月30日