查询数据库中包含法语口音的单词

Query database for a word containing French accent

我的数据库中有一个 table 与这个相似

id  |  name     |  email
-----------------------------------------
1   |  elie     |  elie@company.com
2   |  jénifer  |  jenifer@company.com
3   |  jenny    |  jenny@company.com

如您所见,ID=2 的记录的名称中包含法语字符。当 运行 这个 SQL

SELECT * FROM `TABLENAME` WHERE `name` LIKE '%jé%'

我希望只看到 ID=2 的记录。相反,我得到 ID=2 & ID=3。 SQL 将法语字符“é”替换为 "e"。

我的数据库,table 和字段有 Collat​​ion=utf8_general_ci

在这种情况下,如果我还需要将法语字符保存在我的数据库中,我应该怎么做才能得到正确的结果?

我发现它在 mysql 5.1

中存在已知错误

Mysql bug

[1 Nov 2010 8:52] Peter Laursen So you may create the table like this

CREATE TABLE test (
 id INT AUTO_INCREMENT,
 vers TEXT,
 PRIMARY KEY (id)
) CHARACTER SET utf8 COLLATE utf8_danish_ci;

或这个

CREATE TABLE `test` (
 `id` INT (11) NOT NULL AUTO_INCREMENT,
 `vers` TEXT CHARACTER SET utf8 COLLATE utf8_danish_ci,
 PRIMARY KEY (`id`)
) ENGINE = INNODB DEFAULT CHARSET = utf8;

使用此处记录的 COLLATE 子句编写查询: http://dev.mysql.com/doc/refman/5.0/en/charset-collate.html

请注意,LIKE 运算符不支持 COLLATE。它执行但被忽略。

SELECT 'a' LIKE 'å' COLLATE utf8_danish_ci; -- '0'

(我认为我自己或文档请求至少会报告为错误)

为此使用 REGEXP

SELECT * FROM `TABLENAME` WHERE `name` REGEXP '.*é.*'

LIKE 会忽略变音符号,而 REGEXP 不会。