【本文为转载】http://www.jb51.net/article/41546.htm
BINARY不是函数,是类型转换运算符,它用来强制它后面的字符串为一个二进制字符串,可以理解为在字符串比较的时候区分大小写
复制代码代码如下:
(说明不用binary是大写不敏感,用了binary后大小写敏感了)
mysql> select binary 'ABCD'='abcd' COM1, 'ABCD'='abcd' COM2;
+--------+-----------+
| COM1 | COM2 |
+--------+-----------+
|      0     |      1      |
+---------+-----------+
1 row in set (0.00 sec)

(仅仅有些而已!4.*以前)

因为有的MySQL特别是4.*以前的对于中文检索会有不准确的问题,可以在检索的时候加上binary。
建表:

复制代码代码如下:

create TABLE usertest (
id int(9) unsigned NOT NULL auto_increment,
username varchar(30) NOT NULL default '',
primary key (id)
)

插入数据:

复制代码代码如下:

insert into usertest (username) VALUES('美文');
insert into usertest (username) VALUES('美国项目');
insert into usertest (username) VALUES('李文');
insert into usertest (username) VALUES('老唐');
insert into usertest (username) VALUES('梦漂');
insert into usertest (username) VALUES('龙武');
insert into usertest (username) VALUES('夏');

例如:select * from usertest where username like '%夏%' ,结果七条记录都出来了,比较郁闷。
如果使用=而不是like的时候,select * from usertest where username = '夏' ,只出现一个结果。

因为mysql 的LIKE操作是按照ASCII 操作的,所以LIKE的时候是可能有问题的。问题继续:如果再加上:
复制代码代码如下:

insert into usertest (username) VALUES('文');
insert into usertest (username) VALUES('唐');

还是使用select * from usertest where username = '夏' ,结果还是出现3条记录,又郁闷了。解决办法如下:
1.在create的时候就使用binary

复制代码代码如下:

username varchar(30) BINARY NOT NULL default '', 如果表已经建好了,使用:
alter table usertest modify username varchar(32) binary; 来就该表的属性。

2.在query的时候加上binary

select * from usertest where username like binary  '%夏%' ,就可以准确的查询出一条记录来。(类型一致)

char使用固定长度的空间进行存储,char(4)存储4个字符,根据编码方式的不同占用不同的字节,gbk编码方式,不论是中文还是英文,每个字符占用2个字节的空间,utf8编码方式,每个字符占用3个字节的空间。

如果需要存储的字符串的长度跟所有值的平均长度相差不大,适合用char,如MD5。
对于经常改变的值,char优于varchar,原因是固定长度的行不容易产生碎片。
对于很短的列,char优于varchar,原因是varchar需要额外一个或两个字节存储字符串的长度。

varchar保存可变长度的字符串,使用额外的一个或两个字节存储字符串长度,varchar(10),除了需要存储10个字符,还需要1个字节存储长度信息(10),超过255的长度需要2个字节来存储
例外:Myisam引擎中使用ROW_FORMAT=FIXED时,每行使用相同的空间,造成浪费

char和varchar后面如果有空格,char会自动去掉空格后存储,varchar虽然不会去掉空格,但在进行字符串比较时,会去掉空格进行比较

复制代码代码如下:

+-------+--------------+------+-----+---------+----------------+
| Field | Type         | Null | Key | Default | Extra          |
+-------+--------------+------+-----+---------+----------------+
| id    | int(11)      | NO   | PRI | NULL    | auto_increment |
| name  | varchar(4)   | YES  |     | NULL    |                |
| addr  | char(8)      | YES  |     | NULL    |                |
| bn    | varbinary(4) | YES  |     | NULL    |                |
| b     | binary(8)    | YES  |     | NULL    |                |
+-------+--------------+------+-----+---------+----------------+
+----------------------+----------------------+
| concat("$",name,"$") | concat("$",addr,"$") |
+----------------------+----------------------+
| $asdf$               | $a$                  |
| $asdf$               | $a$                  |
| $a $                 | $a$                  |
| $a$                  | $a$                  |
| $t a$                | $a$                  |
+----------------------+----------------------+
mysql> select * from zcy where name='a ';   //由于name是varchar,比较时,'a '自动转换为'a'
+----+------+------+------+----------+
| id | name | addr | bn   | b        |
+----+------+------+------+----------+
|  3 | a    | a    | ab   | ab       |
|  4 | a    | a    | ab   | a        |
+----+------+------+------+----------+
2 rows in set (0.00 sec)

mysql> select * from zcy where name='a';
+----+------+------+------+----------+
| id | name | addr | bn   | b        |
+----+------+------+------+----------+
|  3 | a    | a    | ab   | ab       |
|  4 | a    | a    | ab   | a        |
+----+------+------+------+----------+
2 rows in set (0.00 sec)

+-------+--------------+------+-----+---------+----------------+
| Field | Type         | Null | Key | Default | Extra          |
+-------+--------------+------+-----+---------+----------------+
| id    | int(11)      | NO   | PRI | NULL    | auto_increment |
| name  | varchar(4)   | YES  |     | NULL    |                |
| addr  | char(8)      | YES  |     | NULL    |                |
| bn    | varbinary(4) | YES  |     | NULL    |                |
| b     | binary(8)    | YES  |     | NULL    |                |
+-------+--------------+------+-----+---------+----------------+
+--------------------+-------------------+
| concat("$",bn,"$") | concat("$",b,"$") |
+--------------------+-------------------+
| $ab a$             | NULL              |
| $ab $              | $ab      $        |
| $ab$               | $ab      $        |
| $ab  $             | $a       $        |
| NULL               | $a       $        |
| NULL               | $abcde   $        |
| NULL               | $abcd1234$        |
+--------------------+-------------------+

binary保存二进制字符串,它保存的是字节而不是字符,没有字符集限制
binary(8)可以保存8个字符,每个字符占1个字节,共占8个字节
进行比较时是按字节进行比较,而不是按字符(char),按字节比较比字符简单快速
按字符比较不区分大小写,而binary区分大小写,结尾使用\0填充,而不是空格

复制代码代码如下:

mysql> select * from zcy where b='a\0\0\0\0\0\0\0';
+----+------+------+------+----------+
| id | name | addr | bn   | b        |
+----+------+------+------+----------+
|  5 | t a  | a    | NULL | a        |
+----+------+------+------+----------+
mysql> select * from zcy where b='a \0\0\0\0\0\0'; 
+----+------+------+------+----------+
| id | name | addr | bn   | b        |
+----+------+------+------+----------+
|  4 | a    | a    | ab   | a        |
+----+------+------+------+----------+

varbinary保存变长的字符串,后面不会补\0
mysql> select * from zcy where bn='ab';
+----+------+------+------+----------+
| id | name | addr | bn   | b        |
+----+------+------+------+----------+
|  3 | a    | a    | ab   | ab       |
+----+------+------+------+----------+
1 row in set (0.01 sec)

mysql> select * from zcy where bn='ab ';
+----+------+------+------+----------+
| id | name | addr | bn   | b        |
+----+------+------+------+----------+
|  2 | asdf | a    | ab   | ab       |
+----+------+------+------+----------+
1 row in set (0.00 sec)

mysql> select * from zcy where bn='ab  ';
+----+------+------+------+----------+
| id | name | addr | bn   | b        |
+----+------+------+------+----------+
|  4 | a    | a    | ab   | a        |
+----+------+------+------+----------+
1 row in set (0.00 sec)

MYSQL的binary解决mysql数据大小写敏感问题相关推荐

  1. mysql binary 查询_MYSQL的binary解决mysql数据大小写敏感问题 《转载》

    BINARY不是函数,是类型转换运算符,它用来强制它后面的字符串为一个二进制字符串,可以理解为在字符串比较的时候区分大小写 如下: mysql> select binary 'ABCD'='ab ...

  2. mysql.sock作用-解决mysql.sock直接找不到了的问题-重新生成mysql.sock

    = = = mysql.sock作用-解决mysql.sock直接找不到了的问题-重新生成mysql.sock mysql.sock作用 mysql的连接方式有两种:  1.通过TCP/IP的连接  ...

  3. mysql 问号_解决Mysql数据库插入数据出现问号(?)的解决办法

    首先,我用的mysql数据库是5.7.12版本. 出现的问题: 1.插入数据显示错误,插入不成功,出现:Incorrect string value: '\xCD\xF5\xD5\xBC\xBE\xA ...

  4. 试题导入mysql乱码_解决Mysql导入乱码问题

    解决Mysql导入乱码问题 方法一: 通过增加参数 –default-character-set = utf8 解决乱码问题 C:\Users\Administrator>mysql -uroo ...

  5. mysql 忘记root_解决MySQL忘记root密码

    网上有很多关于忘记MySQL root密码的一些文章,里面都有写怎么去解决,但有时觉得写得太恶心,要么一字不漏的抄别人的,要么就说得不清不楚,好了,不吐槽了,以下是解决的整个过程. 首先我们要知道忘记 ...

  6. jsp解决mysql乱码_解决mysql+jsp出现乱码的问题

    解决mysql+jsp出现乱码的问题 发布时间:2020-07-11 14:39:04 来源:亿速云 阅读:65 作者:清晨 这篇文章主要介绍解决mysql+jsp出现乱码的问题,文中介绍的非常详细, ...

  7. mysql hy000 1030_解决MySQL数据库SQL Error:1030, SQLState: HY000,Got error 28 from storage engine...

    解决MySQL数据库SQL Error:1030, SQLState: HY000,Got error 28 from storage engine MySQL数据库报以下错误: ERROR 22-0 ...

  8. mysql iops_如何解决MySQL IOPS使用率高?

    如何解决MySQL IOPS使用率高? 什么原因导致MySQL IOPS使用率高? 1.实例内存满足不了缓存数据或排序等需要,导致产生大量的物理 IO. 2.查询执行效率低,扫描过多数据行. 解决方法 ...

  9. mysql报1862_解决mySQL中1862(phpmyadmin)/1820(mysql)错误的方法

    发现问题 之前一直运行的好好的,突然mysql就无法工作了.请求命令后报错误:error 1820 (hy000): you must set password before executing th ...

最新文章

  1. JS中字符串的相关操作
  2. 单防区扩展模块怎么用_Zens推出模块化可扩展无线充电器 可为6台设备同时供电...
  3. 从websphere6.1迁移到weblogic10.3的问题总结--转
  4. 技术有时间衰减因子.
  5. nullptr/nullptr_t
  6. 浅谈如何进行测试用例管理
  7. SpringBoot项目瘦身指南,大厂如何面试看出你的水平
  8. MAC 如何连接惠普打印机
  9. mysql复制表结构创建新表
  10. Redis原理浅析(一):Redis基本数据类型、事务以及排序
  11. CSS border-image(边框图片)
  12. 已解决ImportError: Pandas requires version ‘2.0.1‘ or newer of ‘xlrd‘ (version ‘1.2.0‘ currently instal
  13. 鲜枣课堂-文章分类目录(2019.7.28更新)
  14. 写论文自动生成参考文献的方法
  15. IT 民工避免猝死攻略 v1.0
  16. Python提取数据集中的数值变量/分类变量
  17. 利用高德地图实现定位功能
  18. 区块链的4种技术创新
  19. Nginx作为文件服务器提供下载-增加权限验证
  20. 基于svg开发绘制地铁图

热门文章

  1. 装饰器前奏2(2017年8月23日 11:50:39)(2017年8月29日 16:07:32)
  2. [翻译] VLDContextSheet
  3. java.util.Date和java.sql.Date之间的相互转换
  4. mybatis实战教程(mybatis in action),mybatis入门到精通(转)
  5. android学汇资料总整理
  6. PHP代码审计基础手册
  7. oracle表格颜色,如何在oracle中使用光标更新特定颜色
  8. [数据库] Oracle单表查询总数及百分比和数据横向纵向连接
  9. [Python学习] 专题六.局部变量、全局变量global、导入模块变量
  10. App设计灵感之十二组精美的健身App设计案例