首页 > 解决方案 > 如何将 guid 插入 sqlite UNIQUEIDENTIFIER 列

问题描述

我正在尝试使用使用 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');

但是在我执行 get using nhibernate 插入之后,我得到了这个 guid

99c52a7a-2dd3-4503-8608-e5c614301387

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

谢谢

标签: sqlitenhibernate

解决方案


Sqlite 并没有真正的 UNIQUEIDENTIFIER,但这些值可以存储为 BLOB(如您所做的那样)或文本格式。

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

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

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


推荐阅读