通配符的使用

mysql like ‘%...%’ 慎用啊

最近在做项目时,由于数据库中数据有些需要手动添加,所以写了个简单的页面来添加数据,但是由于我的一时疏忽,造成了不必要的麻烦!还好数据量不是很大,但是这让我意识到数据库操作语句真的是要仔细斟酌啊!尤其是在对数据做 删 和 改 的操作时!

这次是我在修改数据时写了这么一个条件!

... where  name like ‘%’.变量名.'%';    (变量值是从外面传进来的)

问题出现了,由于我在外面传进来的变量值为空,则条件变成了

...where name like '%%';      --   这个条件造成的后果就是 ‘选出全部数据 or 更新全部数据 or 删除全部数据’ 相当于没有写条件啊!!!!

所以以后在使用这个的时候一定要注意呢!!!!

如果要使用,那么你一定记得在之前判断一下传进来的参数是否为空,如果为空直接别执行下面的语句!!!! 

————————————————
版权声明:本文为CSDN博主「小小小小小小小小小菜鸟」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qin_jian_bo/article/details/50593762

====================================================================================================

 MySQL中使用like查找汉字 Incorrect string value 解决办法

用Select…like %…%来查找MySQL的text类型字段的一个中文,却发现查出来的是乱的,发现不少人也遇到这样的问题。在中文排序和查找的时候,汉字的结果是错误的。 

  原因在于MySQL在查找字符串的时候大小写不敏感,字符集默认使用ISO-8859,在转换过程中会出现问题。

  有两种方法可以解决:

  第一种方法是使用BINARY关键字。

  BINARY 操作符将跟在它后面的字符串强制作为一个二进制字符串。这可以很容易地强制一个列的比较以字母大小写敏感方式进行,即使该列没有定义为 BINARY 或 BLOB。

  原来的SQL语句是这样的:

select id,chinese from app_name_content where chinese like ‘%泽%’ limit 1;

  现在的语句是:

select id,chinese from app_name_content where chinese like BINARY ‘%泽%’ limit 1;

  第二种方法将字段改为binary类型,也可以很好的使用like语句。

  这样就能准确地查找到了。

转载自:

https://www.cnblogs.com/fogwang/p/4543525.html

===================================================================================================

Mysql中的NULL和Empty String

本文章向大家介绍Mysql中的NULL和Empty String,主要包括Mysql中的NULL和Empty String使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。 

最近新接触Mysql,昨天新建一个表用于存储表结构信息:

create table tablist
(TABLE_SCHEMA varchar(40),TABLE_NAME varchar(40),COLUMN_NAME varchar(40),COLUMN_TYPE varchar(40),
IS_NULLABLE varchar(10),COLUMN_DEFAULT varchar(40),COLUMN_COMMENT varchar(1000),REMARK varchar(2000));

insert into tablist(TABLE_SCHEMA,TABLE_NAME,COLUMN_NAME,COLUMN_TYPE,IS_NULLABLE,COLUMN_DEFAULT,COLUMN_COMMENT)

select TABLE_SCHEMA,TABLE_NAME,COLUMN_NAME,COLUMN_TYPE,IS_NULLABLE,COLUMN_DEFAULT,
COLUMN_COMMENT
from information_schema.`COLUMNS` where TABLE_SCHEMA='leo';

然后查询tablist表:

看看有哪些列没有comment于是:

select * from tablist where COLUMN_COMMENT is null;

 

查到的结果居然是Empty set。不过从以上查询结果和navicat都能看出:null值在结果集中显示的是'null'的单词,而空字符串则显示为空。

查过资料后发现Mysql的null值和空字符串是有区别的,这里很奇怪COLUMN_COMMENT在经过insert之后,null值居然变成了空字符串(原因未明)。

使用select * from tablist where COLUMN_COMMENT='';查询正常。

NULL columns require additional space in the row to record whether their values are NULL.For MyISAM tables, each NULL column takes one bit extra, rounded up to the nearest byte.

在Mysql的myisam引擎中,null值占用额外的存储空间(1bit),空字符串则完全不占用空间。同时null值在B树索引中也无法被存储,数据量大时会造成较严重的性能问题。

两者的查询方式也不一样:null值查询使用is null/is not null查询,而empty string使用=或者!=查询即可。

转载自:

http://www.manongjc.com/detail/5-uftsvxmhpzortej.html

====================================================================================================

mysql中对于模糊查询like的一些总结

1、常见用法:

(1)搭配%使用

%代表一个或多个字符的通配符,譬如查询字段name中以大开头的数据:

(2)搭配_使用

_代表仅仅一个字符的通配符,把上面那条查询语句中的%改为_,会发现只能查询出下面一条数据:

2、使用like模糊查询会导致索引失效,在数据量大的时候会有性能问题

(1)尽量少以%或者_开头进行模糊查询

通过explain执行计划,我们发现,使用like模糊查询时,如果不以%和_开头查询的话,索引还是有效的

 

以%或者_开头查询,索引失效

(2)使用覆盖索引

当查询的的条件和查询的结果都是索引中的字段的时候,这个索引我们可以称之为覆盖索引,这个时候,使用like模糊查询索引是有效的

 

 

InnoDB中主键可以不添加进索引中

注意:使用覆盖索引,对于字段的长度是由要求限制的,一般超过长度,索引也会失效

这里如果我查询中带有descripition字段,则覆盖索引也会失效(我这里的数据库经过测试最多只支持255长度的字段)

 

(3)使用全文索引

给字段建立Full Text索引,然后使用match(...) against(...)进行检索

 

注意:这种全文索引方式只对英文单词起作用,对于中文汉字支持不够友好,需要额外去mysql的配置文件做一些配置修改,让它额外支持中文

(4)使用一些额外的全文搜索引擎来解决

Lucene,solr,elasticsearch等等

基本原理是:把mysql配置文件中的ft_min_word_len=3改为1。(没有这项就直接添加),然后新建一个字段来保持分词结果,给这个字段建立全文索引。然后实现一个分词模块,把词语“大家好”拆分为“大 大家 大家好 家 家好 好”。然后用match .. against 来代替like %%,查询出来的结果跟like的结果基本相同(如果分词合理的话),但是效率比like高至少10倍以上。
————————————————
版权声明:本文为CSDN博主「槐月十九」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zhenwei1994/article/details/81913531

=============================================================================================

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值