Почему sqlite .dump зашифровал данные в x'2384934 .. ', а не необработанные данные? - PullRequest
0 голосов
/ 27 декабря 2018

Таблица A SQLite содержит столбец secure_name varchar(128), в котором хранятся зашифрованные данные, например gAAAAAby5666........Почему данные изменились на X'67837483473843 .... ', длина которых превышает 128, когда я ввел команду .dump для экспорта данных в файл?

Ответы [ 2 ]

0 голосов
/ 27 декабря 2018

Итак ... если вы ожидаете, что sqlite будет действовать так же, как, скажем, postgres или oracle или другой RDMS, вы обожжетесь.У него есть свои небольшие особенности, и стоит потратить время на изучение документации, чтобы понять, как она работает.В этом случае очень важно описание типов данных .

Каждое значение, хранящееся в таблице, имеет свой собственный связанный тип.Тип столбца (сходство AKA) - это просто предпочтительный тип хранения значений;если что-то можно без потерь преобразовать в желаемый тип, это так, в противном случае используется исходный тип.В этом случае, поскольку вы видите X'...' значений, которые являются литералами BLOB-объектов, столбец используется для хранения BLOB-объектов произвольных байтов, а не строк Unicode.

Тип varchar(128) такой, посколькув нем есть строка char, которая рассматривается как сходство столбцов sqlite TEXT.BLOB-объекты не могут быть преобразованы в текстовые строки, поэтому значения BLOB-объектов в таблице сохраняются без преобразования и отображаются в виде литерала BLOB-объекта .dump.(Плюс ограничения длины, такие как (128), игнорируются в любом случае.)

0 голосов
/ 27 декабря 2018

Поскольку команда .dump (выделено мной):

преобразует всю структуру и данные базы данных SQLite в один текстовый файл .

Длина строкового литерала не имеет значения, учитывается длина двоичных данных, которые он кодирует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...