mysql的字段检索问题,SELECT 'dau'='新u'结果是1

在我本地的机器上,无论是mysql4.0.14还是mysql4.0.21,执行“SELECT * FROM table1 WHERE field1='dau'”会检索出field1='新u'的记录,执行“SELECT 'dau'='新u'”结果会是1,而在java-cn.com的mysql服务器上执行则还会出现这个问题,显然,这是我本地的数据库设置有问题,而且估计是字符集方面的设置。但是我看了mysql的说明书,5.8.1 The haracter Set Used for Data and Sorting,我不知道怎么样改变数据库的默认字符集。去下载一个中文的说明书看看。在网上看到一种解决此类问题的不彻底的方法:摘录如下:

......解决方法,使用 BINARY 属性进行检索,如:

select id,title,name from achech_com.news where binary title like '-0x1.ebea4bfbebe84p-4%'

返回的结果较之前正确,但英文字母区分大小写,故有时在检索如“Achech”

及“achech”的结果是不一样的。

知道了使用 BINARY 属性可以解决前面这个问题,再看看 MySQL 支持的

UCASE 及 CONCAT 函数,其中 UCASE 是将英文全部转成大写,而 CONCAT 函

数的作用是对字符进行连接,以下是我们完全解决后的 SQL 语句:

select id,title,name from achech_com.news where binary ucase(title) like concat('%',ucase('a'),'%')

检索的步骤是先将属性指定为 BINARY ,以精确检索结果,而被 like 的 title

内容存在大小写字母的可能,故先使用 ucase 函数将字段内容全部转换成大

写字母,然后再进行 like 操作,而 like 的操作使用模糊方法,使用 concat

的好处是传进来的可以是直接的关键字,不需要带“%”万用符,将“'a'”直接

换成你的变量,在任何语言下都万事无忧了。

当然你也可以这么写:

select id,title,name from achech_com.news where binary ucase(title) like ucase('0x0.00020bfbebe08p-1022%')

检索的结果还算满意吧,不过速度可能会因此而慢N毫秒喔。

......