有个业务需求,使用到find_in_set函数,简单贴下,如下:
SELECT FIND_IN_SET('b','a,b,c,d'); //返回值为2,即第2个值
实际用法:
select * from campaign_plan where find_in_set('4',ad_type);
参考:https://www.cnblogs.com/mytzq/p/7090197.html
无意间发现了一个这样的问题,ad _type为text类型,具体表数据如下:
执行了语句如下:
顿时三观崩了,什么情况,怎么回匹配到第一个数字呢?
询问了一个朋友,他给了一个方向,mysql会自动转换类型,当你select语句的条件和数据中的type不一致的时候; 一拍大腿,是呀,之前有碰到过类似问题,如下:
有个id是varchar,你不加‘’也可以查询出来, 应该是转换了的,但这样没走索引的,所以查询效率很低 。。
当时碰到的问题是,当数据是id='123', 你select是where id = 123,一个是int 一个是varchar,mysql会自动的'123'转为123跟你的对比 回到,我上面碰到的问题也是类似,只是有一个逗号的存在,在转换的时候会截断,实际操作如下:
所以就解释通了,三观恢复
拿了一下官方的翻译版本, 隐式类型转换规则:
实际例子:
mysql> SELECT 1+'1';
-> 2
mysql> SELECT CONCAT(2,' test');
-> '2 test'
mysql> SELECT 1 > '6x';
-> 0
mysql> SELECT 7 > '6x';
-> 1
mysql> SELECT 0 > 'x6';
-> 0
mysql> SELECT 0 = 'x6';
-> 1
https://zhuanlan.zhihu.com/p/30955365 https://dev.mysql.com/doc/refman/5.5/en/type-conversion.html