纵有疾风起
人生不言弃

mysql在搜索中大小写敏感问题

 MySQL在查询字符串时是大小写不敏感的,在编绎MySQL时一般以ISO-8859字符集作为默认的字符集,这个字符集对大小写不敏感,因此在比较过程中中文编码字符大小写转换造成了这种现象。 

方法一: 

解决方法是对于包含中文的字段加上”binary”属性,使之作为二进制比较,例如将”name char(10)”改成”name char(10)binary”。 

方法二: 

  如果你使用源码编译MySQL,可以编译MySQL时使用–with–charset=gbk 参数,这样MySQL就会直接支持中文查找和排序了。 

方法三: 

  可以使用 Mysql 的 locate 函数来判断。以上述问题为例,使用方法为: 
SELECT * FROM table WHERE locate(field,’李’) > 0; 

方法四: 
把您的Select语句改成这样,SELECT * FROM TABLE WHERE FIELDS LIKE BINARY ‘%FIND%’即可! 

方法五: 
如果你在Windows下使用已经编译好的MySQL,可以修改My.ini中的字符集选项。 
default-character-set = gb2312 

在默认情况下,mysql搜索不区分大小写(但某些字符集始终区分大小写,如czech)。这意味着,如果你使用col_name LIKE ‘a%’进行搜索,你将获得以A或a开始的所有列。 

如果打算使搜索区分大小写,请确保操作数之一具有区分大小写的或二进制校对。例如,如果你正在比较均适用latin1字符集的列和字符串,可使用COLLATE操作符,使1个操作数具有latin1_general_cs或latin1_bin校对特性。例如: 

col_name COLLATE latin1_general_cs LIKE ‘a%’ 
col_name LIKE ‘a%’ COLLATE latin1_general_cs 
col_name COLLATE latin1_bin LIKE ‘a%’ 
col_name LIKE ‘a%’ COLLATE latin1_bin 

如果希望总是以区分大小写的方式处理列,可使用区分大小写的或二进制校对声明它。建表时候使用BINARY标示。 
CREATE TABLE T( 
    A VARCHAR(10) BINARY 
); 

如果是自己的服务器使用win系统,方法五是最好的方法!如果是系统,可以使用方法二!如果不是自己的机子,可以使用方法一,这样你的用户名是严格区分大小写的!

在默认情况下,MySQL搜索不区分大小写(但某些字符集始终区分大小写,如czech)。这意味着,如果你使用col_name LIKE ‘a%’进行搜索,你将获得以A或a开始的所有列。如果打算使搜索区分大小写,请确保操作数之一具有区分大小写的或二进制校对。例如,如果你正在比较均适用latin1字符集的列和字符串,可使用COLLATE操作符,使1个操作数具有latin1_general_cs或latin1_bin校对特性。例如:

col_name COLLATE latin1_general_cs LIKE ‘a%’
col_name LIKE ‘a%’ COLLATE latin1_general_cs
col_name COLLATE latin1_bin LIKE ‘a%’
col_name LIKE ‘a%’ COLLATE latin1_bin

如果希望总是以区分大小写的方式处理列,可使用区分大小写的或二进制校对声明它。

简单的比较操作(>=, >, =, <, <=, 排序和分组)基于每个字符的“排序值”。具有相同排序值的字符(如‘E’, ‘e’,和‘é’)将被当作相同的写字符。

未经允许不得转载:起风网 » mysql在搜索中大小写敏感问题
分享到: 生成海报

评论 抢沙发

评论前必须登录!

立即登录