我的SQL查询从具有可选排序字段的视图中选择一些列。基本上,我的视图将一些字段连接成一个地址字符串,所以我最终得到像
这样的东西123 Sesame Street Birdtown
在地址栏中。我希望搜索不区分大小写(默认情况下不是这样),所以我尝试了这个:
SELECT * FROM BasicJobInfo WHERE UPPER(address) LIKE UPPER(searchString)
searchString是我想要查找的地址。但是,MySQL似乎无法将地址转换为UpperCase - 我试着调用
SELECT UPPER(address) FROM BasicJobInfo
但它根本不会改变这种情况。关于为什么会这样的任何想法?
另外,关于我如何能进行不区分大小写搜索的任何建议?
非常感谢。
答案 0 :(得分:14)
根据MySQL Reference Manual page on String Functions:
UPPER()在申请时无效 二进制字符串(BINARY,VARBINARY, BLOB)。
您的ADDRESS
列是否可能包含BINARY
,VARBINARY
或BLOB
数据类型?
如果是,则需要convert the Binary String to an "ordinary" string。例如:
UPPER(CONVERT(ADDRESS USING latin1))
答案 1 :(得分:1)
请您运行以下查询:
SELECT @@character_set_server, @@collation_server
SELECT HEX(CAST(UPPER(address) AS binary)), HEX(CAST(address AS binary))
FROM BasicJobInfo
答案 2 :(得分:1)
这可能来自编码问题。 appendix of the mysql help pages中描述了执行不区分大小写的比较。不区分大小写的UTF8列/字符串比较示例:
SELECT *
FROM YourTable
WHERE address LIKE 'searchString' COLLATE utf8_general_ci;
答案 3 :(得分:0)
对我有用的是使用关键字二进制
SELECT *
FROM Table
WHERE binary address = 'caseSensitiveString' ;