为什么UPPER()在MySQL中不起作用?

时间:2009-06-19 14:24:04

标签: mysql

我的SQL查询从具有可选排序字段的视图中选择一些列。基本上,我的视图将一些字段连接成一个地址字符串,所以我最终得到像

这样的东西
123 Sesame Street Birdtown

在地址栏中。我希望搜索不区分大小写(默认情况下不是这样),所以我尝试了这个:

SELECT * FROM BasicJobInfo WHERE UPPER(address) LIKE UPPER(searchString)

searchString是我想要查找的地址。但是,MySQL似乎无法将地址转换为UpperCase - 我试着调用

SELECT UPPER(address) FROM BasicJobInfo

但它根本不会改变这种情况。关于为什么会这样的任何想法?
另外,关于我如何能进行不区分大小写搜索的任何建议? 非常感谢。

4 个答案:

答案 0 :(得分:14)

根据MySQL Reference Manual page on String Functions

  

UPPER()在申请时无效   二进制字符串(BINARY,VARBINARY,   BLOB)。

您的ADDRESS列是否可能包含BINARYVARBINARYBLOB数据类型?

如果是,则需要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' ;