我需要創建sql轉儲才能修補現有的數據庫文件。 我知道如何使用sqlite3命令行客戶端創建sql轉儲,但它無法正常使用blob。如何從blob sqlite數據庫獲得sql轉儲?
如何用適當的blob創建sql轉儲? 是否有任何選項sqlite3 .dump命令將字符串編碼爲blob?
我需要一個腳本化的解決方案,以便將其集成到構建腳本中。
乾杯
我需要創建sql轉儲才能修補現有的數據庫文件。 我知道如何使用sqlite3命令行客戶端創建sql轉儲,但它無法正常使用blob。如何從blob sqlite數據庫獲得sql轉儲?
如何用適當的blob創建sql轉儲? 是否有任何選項sqlite3 .dump命令將字符串編碼爲blob?
我需要一個腳本化的解決方案,以便將其集成到構建腳本中。
乾杯
如果以某種方式插入數據,那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;
爲我工作...
它應該開箱即用。
我創建的表是這樣的:
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;
我用`.dump`多次在過去創建包含blob數據的數據庫的ASCII拷貝。轉儲的結果是什麼樣的? Blob應該有一個「X」作爲值的前綴,例如`X'C676972686F6C65636F756E'`。 – tidwall 2011-11-30 17:15:01