2008-11-04 7 views
7

비 utf8 문자열로 계속 실행되는 php-gtk 응용 프로그램에 약간의 문제가 있습니다. 데이터베이스가 UTF-8로되어 있다고해도 문제가 데이터베이스 연결에 있음을 발견했습니다.PHP에서 PDO/SQLite 연결의 문자 인코딩을 변경하는 방법은 무엇입니까?

"SET CHARACTER SET utf8"(MySQL 방식)과 "SET NAMES UTF8"로 시도했지만 아무 것도 발생하지 않았습니다 ("Query Language Understood by SQLite "페이지에도이 명령에 대한 정보가 없으므로 나는 그것에 대해 놀라지 않는다).

PD : 아마 연결이 이미 UTF-8로되어 있고 데이터가 아닙니다.하지만 연결 인코딩을 변경하는 방법이 있다면이 질문은 여전히 ​​유용 할 것입니다.

답변

8

내가 알 수있는 한 데이터베이스 당 레벨 인 SQLite only has one setting for charset입니다. 연결에서 인코딩을 변경할 수 없습니다.

C API는 UTF-8 또는 UTF-16으로 연결을 여는 two different ways입니다. PHP의 SQLite 모듈 (그리고 PDO)이 UTF-8 버전을 사용하기를 기대합니다. 그게 맞다면, 나는 SQLite 연결이 항상 UTF-8 이길 기대한다. 즉, utf8_encode/utf8_decode으로 문자열을 수동으로 인코딩/디코딩해야합니다.

참조 : http://www.alberton.info/dbms_charset_settings_explained.html

+2

내가 SQLite는 그것을 수신 텍스트를 고집하지 않고 정규화 또는 UTF-8 잘 형성되지 않은 텍스트 문자열을 처리 할보다 더 행복하다 "는 것을 발견했다 원하는 프로그래머. IS08859 데이터를 저장할 수 있습니다 ... "Soo 텍스트는 원래 ISO85 (무언가)였습니다 – levhita

+1

나는 당신의 충고에 따라 몇 가지 utf8_encodes (OOP 용 신을 프로그래밍 해 주셔서 감사합니다)를 시작하여 모든 것이 시작부터 utf8입니다. 메인 데이터베이스가 UTF8로 재 작성되었으며, 필자는 시스템을 일부 플러그인 데이터베이스와 결합하기 위해이 라인을 추가했습니다. – levhita

+2

그런 경우 데이터를 되 찾을 때 utf8_decode를 사용해야합니다. 이것은 PHP의 기본 charset (ISO-8859-1)을 내부적으로 사용하는 경우에만 필요합니다. 시스템을 통해 UTF-8을 사용하는 것을 고려하십시오.이 경우 인코딩 할 필요가 없습니다 (예, 혼동 스럽습니다). – troelskn

관련 문제