1

我的数据库中有一个类似于这个的表

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”。

我的数据库、表和字段有 Collat​​ion=utf8_general_ci

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

4

2 回答 2

0

我发现它在 mysql 5.1 中的已知错误

mysql错误

[2010 年 11 月 1 日 8:52] Peter Laursen 所以你可以像这样创建表格

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-collat​​e.html

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

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

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

于 2018-05-25T07:16:12.860 回答
0

使用正则表达式

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

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

于 2018-05-25T07:30:40.593 回答