我在数据库中有一些记录,其中一个VARCHAR字段可能包含重音字母。如果我使用CLI MySQL客户端执行以下查询,则返回1行,这是正确的:
SELECT site_id, site_name FROM tbl_site WHERE site_name LIKE '%ém%'
但是,使用某些PHP(PDO)执行相同的查询会返回包含“em”的所有行,但不会返回包含“ém”的行。更奇怪的是,MySQL查询日志记录显示查询包含“é”,而不是“e”。
任何想法可能会在这里发生什么?
答案 0 :(得分:2)
这取决于数据库,表或列的character set and collation。您是否针对同一个表执行查询?
你能发布
的结果吗?SHOW CREATE TABLE <yourTable>;
此外,您可以在查询级别指定所需的排序规则:
SELECT site_id, site_name FROM tbl_site WHERE site_name LIKE '%ém%' collate utf8_bin;
-- same as
SELECT site_id, site_name FROM tbl_site WHERE BINARY site_name LIKE '%ém%';
(注意:您应该非常仔细地评估此类查询的性能)
答案 1 :(得分:1)
utf8_general_ci
排序规则不区分大小写,和不区分重音。