2010-12-22 65 views
3

我需要創建sql轉儲才能修補現有的數據庫文件。 我知道如何使用sqlite3命令行客戶端創建sql轉儲,但它無法正常使用blob。如何從blob sqlite數據庫獲得sql轉儲?

如何用適當的blob創建sql轉儲? 是否有任何選項sqlite3 .dump命令將字符串編碼爲blob?

我需要一個腳本化的解決方案,以便將其集成到構建腳本中。

乾杯

+0

我用`.dump`多次在過去創建包含blob數據的數據庫的ASCII拷貝。轉儲的結果是什麼樣的? Blob應該有一個「X」作爲值的前綴,例如`X'C676972686F6C65636F756E'`。 – tidwall 2011-11-30 17:15:01

回答

0

如果以某種方式插入數據,那SQLite認爲它是字符串(TEXT)而不是BLOB,那麼可以使用臨時表進行轉換並強制進行類型轉換。比方說,你有如下表:

CREATE TABLE images (id, name, data) 

的例子的解決方案是:

CREATE TEMP TABLE images2 (id INT, name TEXT, data BLOB); 
INSERT INTO images2 
    SELECT id, name, CAST (data AS BLOB) FROM images; 
DROP TABLE images; 
CREATE TABLE images (id INT, name TEXT, data BLOB); 
INSERT INTO images 
    SELECT * FROM images; 

爲我工作...

0

它應該開箱即用。

我創建的表是這樣的:

sqlite> CREATE TABLE images(id INTEGER PRIMARY KEY, name TEXT, content BLOB); 

插入一行:

sqlite> INSERT INTO images VALUES (1, 'test 1', X'00ff00ffaabbcc'); 

創建轉儲:

sqlite> .dump 

而且它的確定:

PRAGMA foreign_keys=OFF; 
BEGIN TRANSACTION; 
CREATE TABLE images(id INTEGER PRIMARY KEY, name TEXT, content BLOB); 
INSERT INTO "images" VALUES(1,'test 1',X'00FF00FFAABBCC'); 
COMMIT; 
相關問題