【发布时间】:2010-08-09 21:23:41
【问题描述】:
我希望在 Sqlite 数据库中编码和存储 Unicode。有没有办法在 sql 查询中对 UTF-8 (unicode) 字符串文字进行原始编码。
我正在寻找类似于 java 的东西,我可以将 \u00E9 扔进一个字符串并让它自动上转换为 Unicode。
【问题讨论】:
-
您是说在 Java 的自定义应用程序中执行此操作,还是从 SQLite 命令解释器执行此操作?
我希望在 Sqlite 数据库中编码和存储 Unicode。有没有办法在 sql 查询中对 UTF-8 (unicode) 字符串文字进行原始编码。
我正在寻找类似于 java 的东西,我可以将 \u00E9 扔进一个字符串并让它自动上转换为 Unicode。
【问题讨论】:
您使用什么语言? 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
【讨论】:
如果您的问题是重新解释 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 之前添加它们
【讨论】:
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);
é
编辑:由于最初编写了此答案,因此已将 CHAR 函数添加到 SQLite。所以现在,你可以写
INSERT INTO MyTable(MyColumn) VALUES(CHAR(233))
【讨论】:
如果您将数据库配置为使用 UTF-8(我相信这是许多安装的默认设置;请在创建模式时执行PRAGMA encoding="UTF-8"; 确定),这应该不是问题。
如果你给 SQLite3 发送一组 UTF-8 编码的字符,它应该没有问题。
如果 Java 能够让您“将 \u0039 转换为字符串”,我会使用它,并确保当您尝试将字符串放入数据库时,您已将字符串转换为使用 Java 提供的任何机制的 UTF-8 字节编码。我不相信 SQLite 提供或需要为你提供这个。
【讨论】: