方法很多,最简单的就是用UTF-8字符就不大会有这种情况
解决方案 »
- 用PHP安装数据库 出现1064错误
- 弱弱的问句,pear扩展怎么写的?
- 使用preg_replace替换html里面的问题
- 命令行模式不能创建文件吗
- 请教实现CSDN首页某功能的思路?
- php4 中array能不能动态的增加一行(或者把几个array安*列*合并)
- 招聘PHP程序员及美工.在广州工作.
- Fatal error: Maximum execution time of 30 seconds exceeded in C:\Tomcat4\webapps\ROOT\com\wuwu\index.php3 on line 93
- php请求接口代码看不懂,请求大神讲解下,跪谢
- Failed to create COM object `com.sun.star.ServiceManager': 拒绝访问
- 解决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)