Используя guid в sqlite, выберите, где guid хранится в базе данных sqlite как двоичные файлы. - PullRequest
7 голосов
/ 19 октября 2011

У меня есть таблица Employee в базе данных SQLite. Чьим первичным ключом является «ID» типа GUID. Я пытаюсь найти запись с id = guid 'a8828ddf-ef22-4d36-935a-1c66ae86ebb3' по следующему запросу, но безуспешно:

SELECT * FROM Employee
WHERE Employee.Id = 'a8828ddf-ef22-4d36-935a-1c66ae86ebb3'

Может кто-нибудь сказать мне, как мне написать запрос?

Спасибо

Ответы [ 2 ]

11 голосов
/ 06 ноября 2015

Это старый вопрос, но он подходит для поиска, и, хотя выбранный ответ правильный, он может работать не для всех легко.Например, при использовании привязок .NET к SQLite.

Причина в том, что когда GUID имеет формат a8828ddf-ef22-4d36-935a-1c66ae86ebb3, вы не можете просто удалить дефисы и установить его в X'...'.GUID состоит из нескольких частей, и база данных хранит двоичный файл по-разному.

Когда GUID равен a8828ddf-ef22-4d36-935a-1c66ae86ebb3, он будет храниться с прямым порядком байтов как X'df8d82a822ef364d5a93b3eb86ae661c'.Обратите внимание, что все части в строке перевернуты.

Конечно, если вы вставляете данные напрямую, удаляя дефисы как X'a8828ddfef224d36935a1c66ae86ebb3', вы также можете получить их с этим, но если вы позволите .NET обрабатывать преобразованиеGUID будет храниться в виде байтовых представлений с прямым порядком байтов.

(Это все предполагает, что архитектура с прямым порядком байтов не тестировалась на старшем порядке)

8 голосов
/ 19 октября 2011

GUID, вероятно, хранится в виде двоичного двоичного объекта;попробуй:

SELECT * FROM Employee
WHERE Employee.Id = X'a8828ddfef224d36935a1c66ae86ebb3';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...