上記の@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)、接続 (Linux 上の MySQL は 5.0 ではデフォルトで latin1 でしたが、5.1 ではデフォルトで UTF8 です)、およびフィールド データ型で同じ文字セットを使用して、未知数を少なくする必要があります。残りは照合が処理します。
編集:すべてをより適切に制御する必要があると書きましたが、以下も機能します:
set names latin1;
select id from members where lastname like 'test6ë%';
接続文字セットが設定されると、MySQL は内部で変換を行うためです。この場合、UTF8文字列(DBから)をlatin1(クエリから)に変換して比較します。
編集 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 | 姓 | ID | 姓 |
+------+----------+------+----------+
| | 5 | ルネ | 1 | ルネ |
| | 6 | ルネ | 1 | ルネ |
| | 7 | ルネ | 1 | ルネ |
+------+----------+------+----------+
これは正しい設定で証明されており、照合が自動的に機能します。