`

MySQL 查询时强制区分大小写

阅读更多

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

 

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

 

例如,一般查询:

 

SELECT * FROM U WHERE name LIKE 'a%';
SELECT * FROM U WHERE name LIKE 'A%';

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

 

SELECT * FROM U WHERE binary name LIKE 'a%';
SELECT * FROM U WHERE binary name LIKE 'A%';
仅仅多了一个binary,就可以得到不同的结果!

 

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

 

create  table  table_name(  
     name varchar (20) binary    
);

 就这么简单!

5
5
分享到:
评论
6 楼 caijingbin0207 2012-09-20  
5 楼 xuboqiang77 2012-09-20  
收了。。
4 楼 snowolf 2012-09-20  
xiaohuafyle 写道
icefishc 写道
会造成索引失效吧?

盼详细说明

如果只是查询,没有任何关系。
如果是建表就定义了binary,跟索引不会有什么关系。索引本身就是对数据做弱唯一性标识,如果建表做了binary约束,那对于索引的建立,应该是有利的。
3 楼 xiaohuafyle 2012-09-20  
icefishc 写道
会造成索引失效吧?

盼详细说明
2 楼 icefishc 2012-09-20  
会造成索引失效吧?
1 楼 奋斗的西瓜 2012-09-20  
顶一个~~~

相关推荐

    MySQL大小写敏感导致的问题分析

    说明: MySQL 在 Windows 下不区分大小写,但在 Linux 下默认是区分大小写。因此,数据库名、 表名、字段名,都不允许出现任何大写字母,避免节外生枝。 正例: aliyun _ admin , rdc _ config , level 3_

    数据库设计规范

    说明:MySQL 在 Windows 下不区分大小写,但在 Linux 下默认是区分大小写。因此,数据库 名、表名、字段名,都不允许出现任何大写字母,避免节外生枝。 正例:health_user,rdc_config,level3_name 反例:HealthUser...

    MYSQL的binary解决mysql数据大小写敏感问题的方法

    BINARY不是函数,是类型转换运算符,它用来强制它后面的字符串为一个二进制字符串,可以理解为在字符串比较的时候区分大小写

    mysql的日期和时间函数

    注意,上面的例子中,单词 INTERVAL 和关键词 type 是不区分字母大小写的。 EXTRACT(type FROM date) EXTRACT() 函数使用与 DATE_ADD() 或 DATE_SUB() 一致的间隔类型,但是它用于指定从日期中提取的部分,而不是...

    scripts:各种脚本,例如Invoke-Locate.ps1

    Invoke-Locate支持区分大小写和不区分大小写的搜索,并且默认情况下不区分大小写。 定位搜索是按用户进行的,并且数据库安全地存储在您的主目录中。 您可以搜索系统文件和您自己的主目录,但无

    MantisBT缺陷跟踪系统 v2.9.0 多国语言版.zip

    0023575:[api rest]分类查询区分大小写; 0023577:[api rest] REST API在报告问题时不强制执行所需的自定义字段; 0023579:[api rest]当类别不存在时内部服务器错误500; 0023594:[自定义字段]报告默认日期{now}...

    LoginSecurity-2

    请考虑迁移到FastLogin 删除了不推荐使用的哈希算法从mcstats迁移到bstats进行统计未登录时阻止打开库存修复使用某些NPC插件(例如FakePlayers)时的错误添加注销命令更改更新程序消息格式修复了一些消息意外从日志...

    SQL注入攻击与防御(安全技术经典译丛)

     7.2.1 使用大小写变种  7.2.2 使用SQL注释  7.2.3 使用URL编码  7.2.4 使用动态的查询执行  7.2.5 使用空字节  7.2.6 嵌套剥离后的表达式  7.2.7 利用截断  7.2.8 避开自定义过滤器  7.2.9 使用非...

    SQL注入攻击与防御

    7.2.1 使用大小写变种 250 7.2.2 使用SQL注释 250 7.2.3 使用URL编码 251 7.2.4 使用动态的查询执行 253 7.2.5 使用空字节 254 7.2.6 嵌套剥离后的表达式 255 7.2.7 利用截断 255 7.2.8 避开自定义过滤器 257 7.2.9 ...

    cmd操作命令和linux命令大全收集

    kill -F 进程名 加-F参数后强制结束某进程(为系统的附加工具,默认是没有安装的,在安装目录的Support/tools文件夹内) del -F 文件名 加-F参数后就可删除只读文件,/AR、/AH、/AS、/AA分别表示删除只读、隐藏、...

    2009达内SQL学习笔记

    起别名有符号,或者区分大小写时,必须用双引号) 多表查询时,可给表起别名。(给列起别名,列<空格>列别名;给表起别名,表<空格>表别名;)。 如:Select first_name EMPLOYEES, 12*(salary+100) AS MONEY, ...

    易语言程序免安装版下载

     静态编译后的易语言可执行程序(exe)和动态链接库(dll),运行时不再依赖任何支持库文件,文件尺寸更小(相对以前的独立编译),PE结构更合理(取消了“易格式体”),加载速度更快,而且有效解决了“病毒误报”和...

    疯狂JAVA讲义

    学生提问:使用组合关系来实现复用时,需要创建两个Animal对象,是不是意味着使用组合关系时系统开销更大? 159 5.9 初始化块 159 5.9.1 使用初始化块 160 5.9.2 初始化块和构造器 161 5.9.3 静态初始化块 162 ...

    入门学习Linux常用必会60个命令实例详解doc/txt

    halt执行时,杀死应用进程,执行sync(将存于buffer中的资料强制写入硬盘中)系统调用,文件系统写操作完成后就会停止内核。若系统的运行级别为0或6,则关闭系统;否则以shutdown指令(加上-h参数)来取代。  ...

Global site tag (gtag.js) - Google Analytics