@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 |
+------+
그리고 라틴어를 사용하여,
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 |
+------+
가, 영업 이익은 응용 프로그램 (PHP)에서 같은 캐릭터 세트가 있어야 연결 (MySQL은 리눅스 5.0에 latin1에하는 기본값으로 사용하지만, 기본적으로 5.1 UTF8로), 및 더 적은 미지수를 갖기 위해 필드 데이터 유형에서. Collations가 나머지를 처리합니다.
편집 : 내가해야모든 것을 통해 더 나은 제어 할 썼습니다 만, 다음도 작동합니다
연결 캐릭터 세트가 설정되면, MySQL은 내부적으로 변환을 수행, 때문에 set names latin1;
select id from members where lastname like 'test6ë%';
. 이 경우에는 변환 된 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
가 라틴에 있음을 기억하십시오.
+------+----------+------+----------+
| id | lastname | id | lastname |
+------+----------+------+----------+
| 5 | Renée | 1 | Renée |
| 6 | Renêe | 1 | Renée |
| 7 | Renèe | 1 | Renée |
+------+----------+------+----------+
정확한 설정으로 증명되면 데이터 정렬이 도움이됩니다.
SELECT * FROM `test` WHERE `name` COLLATE utf8_general_ci LIKE '%renee%';
test
테이블은 다음과 같습니다 :
다른 방법으로 가능합니까? 너무 많은 자유는 괜찮습니다. MySQL의 필터 다음에 엄격하게 PHP로 결과를 필터링 할 것입니다. 예 : "Renee"를 입력 할 때 MySQL 결과로 "Renene", "Renée"및 "Renene"를 얻는 것이 좋습니다. 어쨌든?? – Rudie
가장 좋은 방법은 경기를 저장하는 것입니다. 인덱스 스마트하지 않기 때문에 거대한 데이터의 변환은 매우 느립니다. – Pacerier