使用concat with date会使搜索区分大小写

时间:2013-01-02 23:43:16

标签: mysql concat

问题: 查询concat on date列会使搜索区分大小写。从concat中删除日期列时,搜索不区分大小写并返回预期的结果集。这发生在DEV而不是QA环境中。

两个环境都具有相同的服务器,数据库和连接排序规则设置latin1_swedish_ci,但它们是不同的Mysql版本(DEV:5.1.39; QA:5.1.61)

每个环境(引擎,字符集)中的表属性都相同:InnoDBlatin1

QRY:

 select contact_id, lastname, firstname, dob
 from contact
 where concat(lastname,' ',firstname,' ',dob) = 'styles furious 1988-06-18';

我们需要查询不区分大小写。

感谢任何帮助,谢谢。

2 个答案:

答案 0 :(得分:1)

无论如何,当你可以在客户端分割字符串并执行this时,为什么还要使用CONCAT()

select contact_id, lastname, firstname, dob
from contact
where lastname = 'styles' and firstname = 'furious' and dob = '1988-06-18'

只要lastnamefirstname列都是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很新,所以不是百分之百,但我希望是这样的)。环境之间是否存在一些其他差异(表中传递的数据或与查询中的值进行比较)会导致它返回一行?

相关问题