问题: 查询concat on date列会使搜索区分大小写。从concat中删除日期列时,搜索不区分大小写并返回预期的结果集。这发生在DEV而不是QA环境中。
两个环境都具有相同的服务器,数据库和连接排序规则设置latin1_swedish_ci,但它们是不同的Mysql版本(DEV:5.1.39; QA:5.1.61)
。
每个环境(引擎,字符集)中的表属性都相同:InnoDB
和latin1
。
QRY:
select contact_id, lastname, firstname, dob
from contact
where concat(lastname,' ',firstname,' ',dob) = 'styles furious 1988-06-18';
我们需要查询不区分大小写。
感谢任何帮助,谢谢。
答案 0 :(得分:1)
无论如何,当你可以在客户端分割字符串并执行this时,为什么还要使用CONCAT()
?
select contact_id, lastname, firstname, dob
from contact
where lastname = 'styles' and firstname = 'furious' and dob = '1988-06-18'
只要lastname
和firstname
列都是non-binary and using a case-insensitive collation,此查询就不区分大小写。如果你在这些列上有索引,它也应该更多更有效。
无论如何,如果您绝对坚持使用CONCAT()
,您可以随时强制结果使用正确的类型和整理,like this:
select contact_id, lastname, firstname, dob
from contact
where
convert(concat(lastname, ' ', firstname, ' ', dob) using latin1)
collate latin1_general_ci = 'styles furious 1988-06-18';
然而,这真的很丑陋且效率低下,除非你真的没有其他选择,否则你甚至不应该考虑在生产中使用它。
答案 1 :(得分:0)
您是否尝试在concat周围和字符串周围使用upper函数,以便比较两者的大写版本?
据我所知,=总是区分大小写(我自己对mysql很新,所以不是百分之百,但我希望是这样的)。环境之间是否存在一些其他差异(表中传递的数据或与查询中的值进行比较)会导致它返回一行?