我正在阅读SQL book并且作者正在使用Sqlite3,这很棒,因为没有服务器可以搞乱。
在作者所说的书中输入:
sqlite3 -echo something.db < some.sql
问题是没有任何东西回到终端也没有甚至是从'&lt;'创建的数据库重定向命令。
有人知道发生了什么......用这个吗?
答案 0 :(得分:0)
something.db
是现有数据库。 < some.sql
表示从该文件中选取数据并将其写入sqlite控制台。所以这两个文件都必须存在。
something.db
必须是有效的l sqlite3数据库文件(或空的或不存在的文件); some.sql
必须是包含命令的文本文件。
-echo
参数指定必须在执行前打印命令。
答案 1 :(得分:0)
实际上,您显示的命令是从sql dump创建新数据库的正确方法。
你能否展示你的sql文件内容(cat some.sql
)?我可以重现所描述的行为的唯一方法是向sqlite提供一个空的sql文件。
尝试此命令,看看是否可以得到相同的结果:
$ cat <<EOF > test.sql
> create table test1 (f1, f2, f3);
> insert into test1(f1, f2, f3) values ("foo", "bar", "baz");
> EOF
$ sqlite3 -echo test.db < test.sql
create table test1 (f1, f2, f3);
insert into test1(f1, f2, f3) values ("foo", "bar", "baz");
$ file test.db
test.db: SQLite 3.x database
答案 2 :(得分:0)
根据您的评论和您的终端屏幕截图,我的印象是您的“some.sql”文件可能编码错误和/或以BOM开头,这会混淆sqlite。
您可以使用file
命令查找,如果出现问题,请使用iconv
,recode
或您喜欢的文本编辑器将文件转换为您的终端所需的编码,以及正确的行结尾(Linux中为\n
又名“LF”,Windows中为\r\n
又称为“CRLF”。