mysql like难题

fkueso 2009-06-10 09:23:15
select * from product where model like '%$key%'
这个可以搜索中文
select * from product where binary model like '%$key%'
这个不可以搜索中文
望大师们帮一下解决一下!折腾好久了!
php文件 数据库 表 全都是utf8编码
如果是编码问题,第一个应该就不能搜索才对呀!
...全文
1358 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
fkueso 2009-06-11
  • 打赏
  • 举报
回复
谢谢,云开雾散!送上分数,希望笑纳!~
ACMAIN_CHM 2009-06-11
  • 打赏
  • 举报
回复

是MySQL自动根据 character_set_client , character_set_results , 及column r charset 进行的转换
fkueso 2009-06-11
  • 打赏
  • 举报
回复
上面这个问题好象明白了,可能是因为提到html页面的时候已经转换成utf8编码,所以我用bin2hex()的结果才会和utf8一致,但如果是这样的话我就明白非utf8编码到页面的时候是怎么转换的?
fkueso 2009-06-11
  • 打赏
  • 举报
回复
还有为什么我用bin2hex()后的结果和查询的字符串UTF8编码完全一致?而用hex(fl)后的结果去不是呢?
fkueso 2009-06-11
  • 打赏
  • 举报
回复
谢谢,不错的文章,我还有一点点疑问,就是我插入的如果不是utf8编码应该报错才对呀,类似这样的信息:
Incorrect string value: '\xE5\xB7\xA5\xE7\xA8\x8B...'
我在mysql command line client中直接insert into时就会出现上面类似的错误!
但我在php中没有看到任何报错,我上面提到的数据中‘工’的编码到底是什么编码?
ACMAIN_CHM 2009-06-11
  • 打赏
  • 举报
回复

读一下这篇贴子 http://blog.csdn.net/ACMAIN_CHM/archive/2009/05/12/4174186.aspx

客户端的编码可以和数据库的编码不同,比较数据库是 UTF8 而你是 GB2312,那你首先要告诉MYSQL,我用的语言是GB2312, 这样,MYSQL会将读到的记录(GB2312)的转换成GB2312再发给你。
wwwwb 2009-06-11
  • 打赏
  • 举报
回复
关键是你插入记录时所使用的字符集,
用SET NAMES UTF8后,
再插入记录试试
fkueso 2009-06-11
  • 打赏
  • 举报
回复
还有我用show variables like 'c%';显示的都是utf8啊,怎么会插入的是乱码,比如插入'工',hex()结果是:
C3 A5 C2 B7 C2 A5
这个是什么码,为什么读取后用bin2hex($outval)显示的是utf8正常编码E5 B7 A5;
ACMAIN_CHM高手,另外两个贴已结贴并送上85分,希望笑纳,这个贴还有一点点疑问,希望能解答一下,然后再将分数一起奉上!~
ACMAIN_CHM 2009-06-11
  • 打赏
  • 举报
回复

现在问题应该是在你的PHP端在提交数据的时候,没有正确通知PHP用的UTF8编码。

在你写入数据库之前,用试一下
mysql_query("set name 'utf8'");
mysql_query("insert into tx values (10,'数据')")


http://blog.csdn.net/ACMAIN_CHM/archive/2009/05/12/4174186.aspx
fkueso 2009-06-11
  • 打赏
  • 举报
回复
太感谢了,还是ACMAIN_CHM厉害, 我用select hex(f1) from tx查了一下中文的全都不是utf8编码,但我在insert into之前我用bin2hex($inval)检查过,utf8完全正确,存入数据库之后,我又查询有问题的那一项,然后再bin2hex($outval),得到的与utf8编码也是完全一致的!而且我的html页面都设置了charset=utf-8,如果是其它编码应该显示乱码才对呀?
ACMAIN_CHM 2009-06-10
  • 打赏
  • 举报
回复

在你PHP查询前,mysql_query("set name 'utf8'"); 试一下。
懒得去死 2009-06-10
  • 打赏
  • 举报
回复
LIKE不要考虑了,效率太差!


找全文搜索解决您的问题吧。
fkueso 2009-06-10
  • 打赏
  • 举报
回复
show create table product:
product CREATE TABLE `product` ( `pid` smallint(5) unsigned NOT NULL
`pmodel` varchar(20) CHARACTER SET utf8 NOT NULL
`bigclass` smallint(2) unsigned NOT NULL
`smallclass` smallint(2) unsigned NOT NULL
`pindex` text COLLATE utf8_unicode_ci NOT NULL
`pdescription` text COLLATE utf8_unicode_ci NOT NULL
`pimage` char(18) COLLATE utf8_unicode_ci NOT NULL
PRIMARY KEY (`pid`)
KEY `bigclass` (`bigclass`)
KEY `smallclass` (`smallclass`)
CONSTRAINT `product_ibfk_1` FOREIGN KEY (`bigclass`) REFERENCES `class` (`cid`)
CONSTRAINT `product_ibfk_2` FOREIGN KEY (`smallclass`) REFERENCES `class` (`cid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci


WWWWA 2009-06-10
  • 打赏
  • 举报
回复
show variables like 'char%';
贴结果,估计是字符集问题
ACMAIN_CHM 2009-06-10
  • 打赏
  • 举报
回复

应该是编码的问题。

做如果检查。

1. show create table product ;
2. show variables like 'char%';


梦无痕123 2009-06-10
  • 打赏
  • 举报
回复
gz
ACMAIN_CHM 2009-06-10
  • 打赏
  • 举报
回复

我用如下语句在mysql query browser 中做了测试,正常啊,没有显示‘工’的记录出现。

show variables like 'char%';

create table tx (
id int primary key,
f1 varchar(10)
) CHARACTER SET utf8 COLLATE utf8_unicode_ci ;

insert into tx values (1,'工工');
insert into tx values (2,'aa');
insert into tx values (3,'问题还');

select * from tx;

select * from tx where f1 like '%a%';


建议你检查一下你数据库中存放的到底是什么。
mysql> select hex(f1) from tx;
+--------------------+
| hex(f1) |
+--------------------+
| E5B7A5E5B7A5 |
| 6161 |
| E997AEE9A298E8BF98 |
+--------------------+
3 rows in set (0.00 sec)

工的UTF码是 E5B7A5
fkueso 2009-06-10
  • 打赏
  • 举报
回复
非常感谢ACMAIN_CHM兄弟的持续关注,我换了台机重装了数据库,问题还是存在,你可以在你的机器里测试一下,在被搜索的字段里输入包含utf8编码'工'字的字符串,在搜索里输入'a',然后带中文'工'的字符串就会被搜出来!
sql语句可以用:
select * from product where model like '%a%'
前提条件,表一定要是utf8编码,至于用哪种utf-8都可以!
刚才9楼的兄弟提供的网址我看了,看来不是我一个人遇到这样的问题,只不过他用utf8_general_ci而不用utf8_general_ci就可以解决问题,而我现在用utf8_general_ci也不行!


fkueso 2009-06-10
  • 打赏
  • 举报
回复
再次感谢9楼的兄弟,你提供的网址我仔细看了一下,虽然他的问题是输入一个多字节码,显示出多个不匹配的结果,而我现在的问题输入ascii码,会显示出不匹配的中文结果,但为我解决问题指出一方向!不过最后的贴子还是建义使用utf8_unicode_ci,看来要好好研究一下unicode编码了,等结贴的时候给你加分!~
ACMAIN_CHM 2009-06-10
  • 打赏
  • 举报
回复

建议提供测试数据和测试用SQL语句。以确定你的问题到底是在数据库端还是在PHP端。
加载更多回复(6)

57,064

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧