如何将guid插入sqlite UNIQUEIDENTIFIER列

时间:2018-05-28 12:18:32

标签: sqlite nhibernate

我尝试使用使用nhibernate session.CreateSQLQuery(string sql)执行的手动脚本插入以下数据

字符串sql是:

INSERT INTO Patient (Id, RemoteId, FirstName, LastName, ChartNumber, LastScanDate, RowStatus, 
SearchName, DateUpdated, IsAllPropertiesSynced) 
SELECT x'7A2AC599D32D03458608E5C614301387', 3072799, 'iRecord', 'Demo', '', '2017-06-04 07:53', 1, 'iRecordDemoiRecord', '2017-07-23 06:34', 1
WHERE NOT EXISTS(SELECT Id FROM Patient WHERE Id = x'7A2AC599D32D03458608E5C614301387');

但是当我执行插入后使用nhibernate时我得到了这个guid

99c52a7a-2dd3-4503-8608-e5c614301387

如何在没有guid更改的情况下插入Guid作为sqlite的UNIQUEIDENTIFIER列?

谢谢

1 个答案:

答案 0 :(得分:0)

Sqlite实际上没有UNIQUEIDENTIFIER,但是这些值可以存储为BLOB(正如您所做)或文本格式。

如果要将它们存储为字节数组,则需要注意字节存储顺序可能与字符串表示格式相同,也可能不同,具体取决于平台和/或UUID变体。

在Microsoft上,通常前三个部分都存储了little-endian,这意味着这是System.Guid从sqlite获取存储的字节时所期望的。 (https://en.wikipedia.org/wiki/Universally_unique_identifier#Encoding

当您自己插入GUID作为字节数组时,必须小心执行正确的交换。或者,考虑将它们存储在公共字符串格式中,以避免任何字节交换问题,并使直接查询数据库的人更容易理解数据。为此,您应该在连接字符串中设置BinaryGuid = False。