select * from product where model like '%$key%'
这是我写的一条查询语句,当我$key='a' 的时候,查询怎么会中文的查询结果,只要包含‘工’字的结果都会显示出来!
然后我把语句改成这样:
$key = strtoupper($key);
select * from product where binary upper(model) like '%$key%'
然后再将$key='a'这样查询的中文不会显示出来,但像'sdf&fsd'这样的也会被显示出来!
我用的是UTF8,我觉得和编码的关系可能不大,我把查询的字串转换成二进制对比过,都是一样!
百思不得其解,望高人指点迷津!万分感谢!
这是我写的一条查询语句,当我$key='a' 的时候,查询怎么会中文的查询结果,只要包含‘工’字的结果都会显示出来!
然后我把语句改成这样:
$key = strtoupper($key);
select * from product where binary upper(model) like '%$key%'
然后再将$key='a'这样查询的中文不会显示出来,但像'sdf&fsd'这样的也会被显示出来!
我用的是UTF8,我觉得和编码的关系可能不大,我把查询的字串转换成二进制对比过,都是一样!
百思不得其解,望高人指点迷津!万分感谢!
确认页面和数据表的charset也都是utf8。show create table table_name确认一下。
select * from product where binary model like '%$key%'这样就搜不到了,我刚开始也认为是编码的问题,但
我用mb_detect_encoding()检测都是utf8,而且二进制我也比对过,都一样!
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
| collation_connection | utf8_general_ci |
| collation_database | utf8_general_ci |
| collation_server | utf8_general_ci |
| completion_type | 0 |
| concurrent_insert | 1 |
| connect_timeout | 5 |
+--------------------------+----------------------------+再看看show create table product,字段的COLLATION设置。
最好再帖几条数据出来看看。
show create table product这个执行出错!
改成
select * from product where binary model like '%$key%' mysql 自身的问题
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
这是mysql 解决方法不是给你了嘛,加 binary 关键字