SELECT id,Title FROM article WHERE BINARY UCASE(Title) LIKE UCASE('%四%'),结果检索到了标题为“为了您和您的家人身体健康”的记录 方法很多,最简单的就是用UTF-8字符就不大会有这种情况 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 上次记得在CSCN看到关于海量的数据库改进了说解决了这个问题.你或许搜索一下吧. 解决办法写在我的blog里http://www.tianjiaonet.com/blog.php?aid=20&BlogID=1 如果mysql版本是4。1的话,只要数据库的字符集设为gbk(gb2312),然后character系列变量设置正确(set names gbk)就不会有这个问题 我的mysql是4.0版本的,我将字符集设为gb2312,还是同样问题。 Dictworld.com Blog - 天娇网络日志http://www.tianjiaonet.com 主页 >> 解决单字中文匹配问题 2005-06-06 解决单字中文匹配问题 单字中文匹配问题的原因就是由于GB2312字符集的中文是由两个字节组成,这样就很容易造成一个中文字符的后一个字节跟另一个中文字符的前一个字节又能组成另一个中文字符,这就是通常输入一个中文字会搜索出看似无关的中文字符串。而Mysql匹配的时候不是多字节安全的,也就是纯粹是字节比较。那么出现这种问题,怎么解决呢?一般有三种方法解决:1)改变数据库的字符集,采用UTF-8,因为UTF-8中文是由三个字节组成,而且相互是有关系的,所以不会出现前后截断成新的中文字符。2)其实Mysql数据库提供了字符串操作,对于单字中文可以用INSTR或者LOCATE两个函数,这两个函数都是多字节安全的。例如:$sql = "SELECT * FROM table WHERE INSTR(name, '天') > 0";$sql = "SELECT * FROM table WHERE LOCATE(name, '娇') > 0";3)原理跟中文字符串截取差不多。首先先把所有可能的记录都搜索出来,然后用PHP程序去判断是否包含单字,可以用mb_strpos函数或者自己逐个字节分析也不难。以上是本人的一点拙见,有不妥之处,欢迎大家提出宝贵意见。 Dictworld.com : 18:42 | 评论: (0) 对了,windows下的php开发环境用集成的好吗? 怎样判断用户已登录? 一个数据库链接的问题!!!请大家帮忙啊! 探讨一下php中or exit简化判断语句 php判断表单是否为空的js怎么不管用呢? 求救!关于php用redis做消息队列存入mysql的问题! GD库在那有得下载的啊? 怎样给后台加密码验证明?求代码! header这个函数是做什么用的呢?? 不能正确浏览netBook.htm的朋友请近 解决PHP只能安装的D盘的限制 在线等,参数传递的问题
http://www.tianjiaonet.com/blog.php?aid=20&BlogID=1
然后character系列变量设置正确(set names gbk)就不会有这个问题
http://www.tianjiaonet.com
主页 >> 解决单字中文匹配问题
2005-06-06
解决单字中文匹配问题
单字中文匹配问题的原因就是由于GB2312字符集的中文是由两个字节组成,这样就很容易造成一个中文字符的后一个字节跟另一个中文字符的前一个字节又能组成另一个中文字符,这就是通常输入一个中文字会搜索出看似无关的中文字符串。而Mysql匹配的时候不是多字节安全的,也就是纯粹是字节比较。那么出现这种问题,怎么解决呢?一般有三种方法解决:
1)改变数据库的字符集,采用UTF-8,因为UTF-8中文是由三个字节组成,而且相互是有关系的,所以不会出现前后截断成新的中文字符。
2)其实Mysql数据库提供了字符串操作,对于单字中文可以用INSTR或者LOCATE两个函数,这两个函数都是多字节安全的。
例如:
$sql = "SELECT * FROM table WHERE INSTR(name, '天') > 0";
$sql = "SELECT * FROM table WHERE LOCATE(name, '娇') > 0";
3)原理跟中文字符串截取差不多。首先先把所有可能的记录都搜索出来,然后用PHP程序去判断是否包含单字,可以用mb_strpos函数或者自己逐个字节分析也不难。
以上是本人的一点拙见,有不妥之处,欢迎大家提出宝贵意见。
Dictworld.com : 18:42 | 评论: (0)