在sqlite3的3.19.3通過sqlite3 .dump
或通過sqlite3
與.mode insert t_objects
(其中t_objects
是一個表的名稱),隨後SELECT * FROM t_objects;
產生的轉儲文件使用replace
功能換行符。請參閱sqlite3文件ext/misc/dbdump.c函數output_quoted_escaped_string
附近的行370.sqlite3的使用.dump插入替換功能在轉儲(從3.18到3.19變化)
但在sqlite3 3.18行爲是輸出換行符,因爲我喜歡。因此,與3.18
我轉儲包含:
CREATE TABLE t_objects
(ob_id VARCHAR(30) PRIMARY KEY ASC NOT NULL UNIQUE,
ob_mtim REAL NOT NULL,
ob_content TEXT NOT NULL,
ob_paylkind VARCHAR(30) NOT NULL,
ob_paylinit TEXT NOT NULL,
ob_paylcontent TEXT NOT NULL);
尾隨其後與
INSERT INTO t_objects VALUES('_0UsE4ep7mY5_3M6VTOn9Doe',1497676631.12,'
///$c
','named','c','@NAMEDPROXY: __');
但3.19.3相同INSERT
聲明(爲相同行內容)成爲
INSERT INTO t_objects VALUES('_0UsE4ep7mY5_3M6VTOn9Doe',1497676631.1199998855,
replace('\n///$c\n\n','\n',char(10)),'named','c','@NAMEDPROXY: __');
(我在第一行的逗號後面添加了一個換行符,用於提供可讀性;但它不存在)
這是一個documented變化
變化從版本3.19.0(2017年5月22日)結轉:)
使用替代(而不是CHAR( ),用於從命令行shell輸出
.dump
中的字符串中嵌入換行符和回車符。
但我不喜歡它(因爲我不得不寫一個專門傾銷程序dumpsqlmonimelt.cc)
是否有某種方式(例如,一些選項或sqlite3
指令)取回,使用,SQLite的3.19.3,即舊的sqlite 3.18行爲和轉儲格式。
我問的原因是,我居然保持git的是轉儲(例如本mom_user.sql文件)與sqlite3
轉儲和恢復的混帳pre-commit和post-merge鉤來完成。我真的很喜歡這些新行字符顯示爲-是轉儲文件(這是我的原因之一選擇sqlite3,因此具有git
友好轉儲)。
FWIW的sqlite3
是從Linux的/ Debian的/ SID/X86-64的一個(包版本3.19.3-3)
附錄
是可能發生的sqlite的3.20將改善這個問題(在至少對於.dump
)。看到它的release log和我的sqlite-user message of July 14th