MySQL在我的查询中转换UTF-8字符(不是结果),剥离重音吗?

时间:2010-02-24 12:04:33

标签: php mysql utf-8 pdo diacritics

我在数据库中有一些记录,其中一个VARCHAR字段可能包含重音字母。如果我使用CLI MySQL客户端执行以下查询,则返回1行,这是正确的:

SELECT site_id, site_name FROM tbl_site WHERE site_name LIKE '%ém%'

但是,使用某些PHP(PDO)执行相同的查询会返回包含“em”的所有行,但不会返回包含“ém”的行。更奇怪的是,MySQL查询日志记录显示查询包含“é”,而不是“e”。

任何想法可能会在这里发生什么?

2 个答案:

答案 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排序规则不区分大小写,不区分重音。