如何在Sqlite3中引用UTF-8字符串文字

时间:2010-08-09 21:23:42

标签: sqlite unicode utf-8

我正在寻找在Sqlite数据库中编码和存储Unicode。有没有办法在sql查询中对UTF-8(unicode)字符串文字进行原始编码。

我正在寻找类似java的东西,我可以将\ u00E9折腾成一个字符串并让它自动上转换为Unicode。

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:5)

SQLite没有转义序列。但是你的编程语言可能会这样做。

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

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

如果由于某种原因你必须在纯SQL中编写UTF-8文字,你可以这样做:

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

编辑:由于此答案最初编写,因此SQLite中添加了CHAR函数。所以现在,你可以写

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

答案 2 :(得分:1)

如果您的问题是在sqlite中重新解释转义序列,则可以(ab)使用json_extract例如。

    UPDATE  `tableToFix`  SET  `columnToFix` = json_extract('"'  ||  `columnToFix`  ||  '"', '$');
    INSERT INTO test VALUE (json_extract('"P\u0159\u00edli\u0161 \u017elu\u0165ou\u010dk\u00fd k\u016f\u0148 \u00fap\u011bl \u010f\u00e1belsk\u00e9 \u00f3dy."', '$'));

注意:报价处理。有效的json字符串以“开头和结尾”,因此您必须在使用json_extract之前添加它们

答案 3 :(得分:0)

如果您将数据库配置为使用UTF-8(我认为这是许多安装的默认设置;在模式创建时确保PRAGMA encoding="UTF-8";确定),这应该不是问题。

如果您向SQLite3发送一组以UTF-8编码的字符,处理它时应该没有问题。

如果Java能够允许你“将一个字符串扔进一个字符串”,我只是使用它,并确保当你尝试将字符串放入数据库时​​,你将字符串转换为使用Java提供的任何机制进行UTF-8字节编码。我不相信SQLite提供或需要为您提供此功能。