我正在寻找在Sqlite数据库中编码和存储Unicode。有没有办法在sql查询中对UTF-8(unicode)字符串文字进行原始编码。
我正在寻找类似java的东西,我可以将\ u00E9折腾成一个字符串并让它自动上转换为Unicode。
答案 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提供或需要为您提供此功能。