2010-08-09 12 views
5

Estoy buscando codificar y almacenar Unicode en una base de datos Sqlite. ¿Hay alguna forma de codificar en bruto un literal de cadena UTF-8 (unicode) en una consulta SQL?Cómo cito un Literal de cadenas UTF-8 en Sqlite3

Estoy buscando algo similar a Java donde puedo lanzar un \ u00E9 en una cadena y hacer que se convierta automágicamente en Unicode.

+0

¿Está hablando de hacer esto en una aplicación personalizada en Java, o desde el intérprete de comandos de SQLite? –

Respuesta

8

¿Qué idioma estás usando? SQLite maneja Unicode muy bien, la creación de los literales en su lenguaje de alojamiento es menos obvio.

$ 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

Buena cadena de prueba. – chryss

0

Si configura su base de datos para usar UTF-8 (creo que esto es predeterminado para muchas instalaciones; haga PRAGMA encoding="UTF-8"; en el momento de creación del esquema para estar seguro), esto no debería ser un problema.

Si envía SQLite3 un conjunto de caracteres codificados en UTF-8, no debería tener ningún problema para resolverlo.

Si Java tiene la capacidad de permitirle "lanzar una \ u0039 en una cadena", simplemente usaría eso, y me aseguraré de que cuando intente colocar la cadena en la base de datos, tenga la cadena convertida a una codificación de bytes UTF-8 utilizando cualquier mecanismo que Java proporcione. No creo que SQLite proporcione o necesite proporcionar esto para usted.

+0

¿Por qué "lanzar un \ u0039 en una cadena"? Parece que sería mucho más fácil escribir "9". – dan04

5

SQLite no tiene secuencias de escape. Pero tu lenguaje de programación probablemente sí.

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

o

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

Si por alguna razón usted tiene que escribir un algo UTF-8 literal en SQL puro, se puede hacer como:

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

Editar: Desde esta respuesta se escribió originalmente, se ha agregado una función CHAR a SQLite. Así que ahora, puede escribir

INSERT INTO MyTable(MyColumn) VALUES(CHAR(233)) 
Cuestiones relacionadas