OceanBase中LIKE写法问题

【产品名称】OceanBase

【产品版本】2.2.76

【问题描述】where条件中like后面的字符串如果用||连接,结果不是预期的,和mariadb、percona不一样。

select * from version where proc_id like ‘%DDDD%’;

select * from version where proc_id like ‘%’||‘DDDD’||’%’;

select * from version where proc_id like ‘%’||‘DDDD’||’%’ ESCAPE ‘$’;

第一种写法正常,第二种写法把整个表的数据都查出来了,第三种写法直接报语法错误。其他的数据库三种写法都一样,正常的。

结果和mysql是一致的。||在mysql中默认被识别为or操作符,因此第二条sql的过滤条件恒为真,第三条sql报了语法错误。

如果希望三条sql返回相同的结果,可以在sql_mode中加入PIPES_AS_CONCAT,这样 || 会被解析为concat。

这个验证过了,是这样的。考虑sql_mode和mysql不完全一样,打算程序中设置会话级的sql_mode。