2010-08-09 3 views
5

유니 코드를 인코딩하고 Sqlite 데이터베이스에 저장하려고합니다. SQL 쿼리에서 UTF-8 (유니 코드) 문자열 리터럴을 원시 인코딩하는 방법이 있습니까?Sqlite3에서 UTF-8 문자열 리터럴을 인용하는 방법

자바와 비슷한 것을 찾고 있는데, \ u00E9를 문자열로 던져서 자동으로 유니 코드로 업 컨버트 할 수 있습니다.

+0

Java 또는 SQLite 명령 인터프리터에서 사용자 정의 응용 프로그램에서이 작업을 수행 할 의향이 있습니까? –

답변

8

어떤 언어를 사용하고 있습니까? SQLite는 Unicode를 잘 처리하므로 호스팅 언어로 리터럴을 작성하는 것이 덜 분명합니다.

$ sqlite3 junk.sqlite 
SQLite version 3.6.22 
sqlite> create table names (id integer primary key, name string); 
sqlite> insert into names values (null, 
    'î℉ yõù gѷЄ ΣϘГくטƏ UTF-8, it stores it'); 
sqlite> select * from names; 
1|î℉ yõù gѷЄ ΣϘГくטƏ UTF-8, it stores it 
+6

좋은 테스트 문자열. – chryss

0

데이터베이스가 UTF-8을 사용하도록 구성한 경우 (많은 설치에서 기본값이라고 생각되며 스키마 생성시 PRAGMA encoding="UTF-8";이 확실 함) 문제가되지 않습니다.

UTF-8로 인코딩 된 문자 집합을 SQLite3에 보내면 아무 문제가 없습니다.

자바가 "문자열에 \ u0039 넣을"수있는 능력이 있다면, 나는 그것을 사용하고 문자열을 데이터베이스에 넣으려고하면 문자열 변환 Java가 제공하는 메커니즘을 사용하여 UTF-8 바이트 인코딩으로 변환합니다. SQLite가 제공하거나 제공해야 할 필요가 있다고 생각하지 않습니다.

+0

왜 "\ u0039를 문자열로 던지겠습니까?" "9"라고 쓰면 훨씬 쉬울 것 같습니다. – dan04

5

SQLite에는 이스케이프 시퀀스가 ​​없습니다. 그러나 당신의 프로그래밍 언어는 아마 그렇습니다.

# in Python 
db.execute("INSERT INTO MyTable(MyColumn) VALUES('\u00E9')") 

또는

db.execute("INSERT INTO MyTable(MyColumn) VALUES(?)", ['\u00E9']) 

어떤 이유로이 같은 UTF-8 순수 SQL에서 리터럴, 당신이 할 수있는 일이 작성해야하는 경우

:

sqlite> SELECT CAST(X'C3A9' AS TEXT); 
é 

편집을 가입일 : 이 대답은 원래 작성되었으며 CHAR 함수가 SQLite에 추가되었습니다. 자 이제 쓸 수 있습니다

INSERT INTO MyTable(MyColumn) VALUES(CHAR(233)) 
관련 문제