0

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

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

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

有什么想法可能会在这里发生吗?

4

2 回答 2

2

这取决于数据库、表或列的字符集和排序规则。您是否对同一张表执行查询?

你能把结果贴出来吗

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%';

(注意:您应该非常仔细地评估此类查询的性能)

于 2010-02-24T12:06:53.870 回答
1

utf8_general_ci排序规则既不区分大小写又不区分重音。

于 2010-02-24T12:07:42.663 回答