千家信息网

MySQL中BINARY怎么用

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这篇文章给大家分享的是有关MySQL中BINARY怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。数据库版本:MySQL 5.6.26线上某业务表为了区分大小写,使用B
千家信息网最后更新 2026年10月31日MySQL中BINARY怎么用

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

数据库版本:
MySQL 5.6.26

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

创建测试表,插入数据:

drop table if EXISTS student;

CREATE TABLE `student` (
`id` int(11) PRIMARY key auto_increment,
`name` varchar(20) DEFAULT NULL,
key `idx_name`(`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;

insert into `student` ( `id`, `name`) values ( '1', 'michael');
insert into `student` ( `id`, `name`) values ( '2', 'lucy');
insert into `student` ( `id`, `name`) values ( '3', 'nacy');
insert into `student` ( `id`, `name`) values ( '4', 'mike');
insert into `student` ( `id`, `name`) values ( null, 'guo');
insert into `student` ( `id`, `name`) values ( '6', 'Guo');
不加BINARY关键字可以走索引:

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 | 2 | Using where; Using index |
+----+-------------+---------+------+---------------+----------+---------+-------+------+--------------------------+
1 rows in set (0.03 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 | 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怎么用"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

关键 关键字 索引 大小 数据 业务 内容 数据库 更多 校对 篇文章 结构 长度 测试 不错 实用 最大 之间 可以通过 字符 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 百单网互联网科技有限公司 华服互联网科技靠谱吗 鸠鸠互联网科技 科技制造互联网公司 西安互联网科技 北京互联网络科技有限公司 百单互联网科技有限公司 汇久创客互联网科技 西安互联网科技公司 互联网科技咨询 上海电发互联网科技有限公司 宁夏众和广鑫互联网科技有限公司 威龙国际互联网科技公司 特约风豹互联网科技为什么扣费 本届互联网大会上的黑科技 风投北京互联网科技 普陀区互联网教育科技管理办法 互联网科技对化妆品行业 东风日产互联网科技公司叫什么 高科技和互联网的现代国家 互联网是第几次科技革命的成果 互联网科技深圳 互联网中国科技 互联网科技开发公司 互联网科技集团 华夏恒生科技与互联网科技 互联网相关科技技术 米泉互联网科技专业怎么样 长沙易易互联网科技有限公司 互联网科技自媒体灵感
0