在SQLite中为主数据库设置PRAGMA编码为"UTF-16"

3
我读到过这样一句话:在创建数据库后,无法更改数据库的文本编码,任何尝试更改编码的操作都将被静默忽略。(来自此处
这篇文章中得知,在SQLite中创建主数据库(例如“databasename.db”),我们需要在命令提示符中输入以下内容:

sqlite3 databasename.db

这将创建数据库并显示sqlite shell如下:
C:\Documents and Settings\Administrator>sqlite3 AudioData.db
SQLite version 3.7.11 2012-03-20 11:35:50
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite>

在这种情况下,如何设置PRAGMA编码?由于SQLite shell是在创建数据库命令之后启动的,因此我应该如何在创建数据库命令之前执行PRAGMA命令? 提前致谢!
2个回答

6

您只需按照您编写的方式调用sqlite3。此时只有一个空文件。然后您设置您的pragma。在创建第一个表后,将写入具有所有设置的数据库。并且在具有所有环境变量的情况下编写时间很重要。就在那时,数据库才真正被创建。因此,请在创建第一个表之前设置您的pragma。
例如:

sqlite3 test.db

打开SQLite,此时没有写入任何内容。

pragma encoding=utf16;

仍然没有任何文字被写入

.quit

关闭sqlite后,会创建一个空的文件test.db。
sqlite3 test.db

打开SQLite

pragma encoding = utf16;
pragma nnnn=xxx;

设置 pragma(s) 后,文件 test.db 仍然是空的。

create table test (testid integer);

现在数据库已经真正创建了,数据库文件test.db已经被写入内容。


我使用DOS命令提示符来运行此命令。因此,在通过以上方式连接和创建数据库后;当我在命令中使用非英文字符进行复制粘贴时,它会变成"???",例如我尝试的命令是insert into ENG_MAR_MAPPING(ENG_WORD,MAR_WORD)values('zenith','कळस'); 但在DOS提示符上,它变成了insert into ENG_MAR_MAPPING(ENG_WORD,MAR_WORD)values('zenith','???');那么我的非英文字符是否真正到达了数据库? - Kaushik Lele
请按照 https://dev59.com/3XRC5IYBdhLWcg3wK9yV#388500 中的说明进行操作,然后您就可以验证了。 - sqlab

-2
使用SQLlite浏览器进行这些高级功能。它非常直观易用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接