为什么sqlite.dump加密数据到x'2384934..而不是原始数据?

eqqqjvef  于 2021-06-17  发布在  Mysql
关注(0)|答案(2)|浏览(329)

sqlite表a有一列 secure_name varchar(128) 存储加密数据的,例如 gAAAAAby5666....... . 当我发出命令时,为什么数据变为长度超过128的x'67837483473843 .dump 将数据导出到文件?

m2xkgtsf

m2xkgtsf1#

因为.dump命令(emphasis mine):
将sqlite数据库的整个结构和数据转换为单个文本文件。
字符串文本的长度是不相关的,重要的是它编码的二进制数据的长度。

cld4siwp

cld4siwp2#

所以。。。如果您希望sqlite像postgres、oracle或其他rdms那样工作,那么您将被烧死。它有自己的小特性,值得花时间浏览文档来了解它是如何工作的。在这种情况下,数据类型的描述至关重要。
表中存储的每个值都有自己的关联类型。列的类型(aka affinity)只是值的首选存储类型;如果某个东西可以无损地转换为所需的类型,那么它就是,否则就使用原始类型。在这种情况下,既然你看到 X'...' 值是blob文本,该列用于存储任意字节的blob,而不是unicode字符串。
类型 varchar(128) 是的,因为它有绳子 char 在它里面,被当作sqlite TEXT 列关联。blob不能转换为文本字符串,因此表中的blob值未经转换而存储,并以blob文字显示 .dump . (加上长度限制,如 (128) 无论如何都会被忽略。)

相关问题