@ vincebowdren ответ выше работает, я просто добавляю это как ответ для форматирования:
CREATE TABLE `members` (
`id` int(11) DEFAULT NULL,
`lastname` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL
);
insert into members values (1, 'test6ë');
select id from members where lastname like 'test6e%';
Урожайность
+------+
| id |
+------+
| 1 |
+------+
И используя Latin1,
set names latin1;
CREATE TABLE `members2` (
`id` int(11) DEFAULT NULL,
`lastname` varchar(20) CHARACTER SET latin1 DEFAULT NULL
);
insert into members2 values (1, 'Renée');
select id from members2 where lastname like '%Renee%';
даст:
+------+
| id |
+------+
| 1 |
+------+
Конечно, OP должен иметь ту же кодировку в приложении (PHP), соединение (MySQL в Linux используется по умолчанию для latin1 в 5.0, но по умолчанию UTF8 в 5.1), а в типе данных поля должно быть меньше неизвестных , Об остальном заботятся сборники.
РЕДАКТИРОВАТЬ: Я написал должен , чтобы иметь лучший контроль над всем, но следующее также работает:
set names latin1;
select id from members where lastname like 'test6ë%';
Поскольку, как только кодировка соединения установлена, MySQL выполняет преобразование внутри. В этом случае он преобразует каким-либо образом преобразование и сравнивает строку UTF8 (из БД) с латиницей 1 (из запроса).
РЕДАКТИРОВАТЬ 2: Некоторый скептицизм требует от меня привести еще более убедительный пример:
Учитывая приведенные выше утверждения, вот что я сделал больше. Убедитесь, что терминал находится в UTF8.
set names utf8;
insert into members values (5, 'Renée'), (6, 'Renêe'), (7, 'Renèe');
select members.id, members.lastname, members2.id, members2.lastname
from members inner join members2 using (lastname);
Помните, что members
в utf8 и members2
в latin1.
+------+----------+------+----------+
| id | lastname | id | lastname |
+------+----------+------+----------+
| 5 | Renée | 1 | Renée |
| 6 | Renêe | 1 | Renée |
| 7 | Renèe | 1 | Renée |
+------+----------+------+----------+
, что подтверждается правильными настройками, сортировка делает работу за вас.