【问题标题】:how to get sql dump from sqlite database with blobs?如何从带有 blob 的 sqlite 数据库中获取 sql 转储?
【发布时间】:2010-12-22 09:32:30
【问题描述】:

我需要创建 sql 转储来修补现有的数据库文件。 我知道如何使用 sqlite3 命令行客户端创建 sql 转储,但它不能与 blob 一起正常工作。

如何使用正确的 blob 创建 sql 转储? sqlite3 .dump 命令是否有任何选项可以将 blob 编码为字符串?

我需要一个可编写脚本的解决方案,以便将其集成到构建脚本中。

干杯

【问题讨论】:

  • 我过去曾多次使用.dump 来创建包含blob 数据的数据库的ASCII 副本。转储的结果是什么样的? Blob 应具有 X 作为值的前缀,例如 X'C676972686F6C65636F756E'

标签: sqlite blob dump


【解决方案1】:

如果您的数据以某种方式插入,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;

为我工作...

【讨论】:

    【解决方案2】:

    它应该开箱即用。

    我是这样创建表格的:

    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;
    

    【讨论】:

      猜你喜欢
      • 2013-07-28
      • 2020-02-22
      • 2021-09-18
      • 2016-04-22
      • 2017-02-08
      • 2014-04-07
      • 1970-01-01
      • 2018-01-30
      相关资源
      最近更新 更多