2009-09-05 5 views
2

흥미로운 질문 ... CHARSET = utf8이있는 MySQL 테이블을 가지고 latin1 인코딩으로 연결을 열면 어떻게됩니까?latin1을 사용하여 utf8 MySQL DB 테이블에 연결하면 어떻게됩니까?

시도해 보았습니다. ß 및 æ 같은 문자까지 저장하고 검색 할 수있었습니다. 이러한 문자는 utf8과 latin1에서 다른 바이트 시퀀스로 표시되므로 작동하지 않을 것으로 예상됩니다.

MySQL은 문자 인코딩간에 일종의 즉석 변환을 수행합니까?

답변

1

예, mysql은 구성에 따라 chrset 변환을 수행합니다. 연결의 chrset을 변경하려면, 당신은 당신이 다른 연결 캐릭터 세트와 연결할 때까지 작동처럼 당신은 느낄 것이다

SET NAMES utf8; 
+0

을 디폴트 문자 세트 변수. 두 개의 서로 다른 인코딩 된 데이터베이스 (서로 다른 문자 세트)를 사용하면 덤프에서 다른 파일 인코딩이 생성됩니다 – astropanic

3

처럼 SET NAMES 사용할 수 있습니다. 그러면 이상한 인물이 보이고 분명히 후회할 것입니다.

utf8 변환으로 읽는 경우에만 의미가있는 바이트를 데이터베이스에 저장합니다. 그러나 당신은 mysql에 필드가 latin이라는 것을 알려주기 때문에 이해하지는 못 하겠지만 어쨌든 (당신은 인간이고 obbeys는) 당신에게 보낼 것입니다. utf8과 연결되면이 charset을 통해 읽은 다음 ok로 읽습니다.

그러나

연결 변경 문자셋하거나 필드의 문자 집합을 변경하려면 나중에 문제가 될 것입니다 시도하고 하나의 필드 내용을 읽기 위해이 같은 트릭을해야합니다 경우 : 그것은 설정에 따라

convert(cast(convert(FieldNameMessed using latin1) as binary) using utf8)