Как я цитирую строковый литерал UTF-8 в Sqlite3 - PullRequest
5 голосов
/ 10 августа 2010

Я хочу кодировать и хранить Unicode в базе данных Sqlite.Есть ли способ необработанного кодирования строкового литерала UTF-8 (Unicode) в SQL-запрос.

Я ищу что-то похожее на Java, где я могу бросить \ u00E9 в строку и получить его автоматическиконвертировать в Unicode.

Ответы [ 3 ]

8 голосов
/ 10 августа 2010

Какой язык вы используете? SQLite отлично справляется с Юникодом, создание литералов на языке хостинга менее очевидно.

$ 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
5 голосов
/ 10 августа 2010

SQLite не имеет escape-последовательностей.Но ваш язык программирования, вероятно, делает.

# 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);
é

Редактировать : Поскольку этот ответ был изначально написан, в SQLite была добавлена ​​функция CHAR .Теперь вы можете написать

INSERT INTO MyTable(MyColumn) VALUES(CHAR(233))
0 голосов
/ 10 августа 2010

Если вы сконфигурируете свою базу данных для использования UTF-8 (я полагаю, что это значение по умолчанию для многих установок; для уверенности выполните PRAGMA encoding="UTF-8"; во время создания схемы), это не должно быть проблемой.

Если вы отправите SQLite3 набор символов, закодированных в UTF-8, у него не должно возникнуть проблем с этим.

Если в Java есть возможность разрешить вам «вбрасывать \ u0039 в строку», я бы просто использовал это и гарантировал, что при попытке поместить строку в базу данных у вас будет строка, преобразованная в кодирование байтов UTF-8 с использованием любого механизма, предоставляемого Java. Я не верю, что SQLite предоставляет или должен предоставить это для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...