sqlite - 如何将 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 列?
谢谢
解决方案
Sqlite 并没有真正的 UNIQUEIDENTIFIER,但这些值可以存储为 BLOB(如您所做的那样)或文本格式。
如果要将它们存储为字节数组,则需要注意字节存储顺序可能与字符串表示格式相同也可能不同,具体取决于平台和/或 UUID 变体。
在 Microsoft 上,前三个部分通常以 little-endian 存储,这意味着这是 System.Guid 在从 sqlite 获取存储字节时所期望的。(https://en.wikipedia.org/wiki/Universally_unique_identifier#Encoding)
当您自己将 GUID 作为字节数组插入时,您必须小心执行正确的交换。或者,考虑以通用字符串格式存储它们,以避免任何字节交换问题,并使直接查询数据库的人更容易理解数据。为此,您应该在连接字符串中设置 BinaryGuid=False。
推荐阅读
- c# - 显示选定目录中的照片
- java - 创建一个具有整数、getter/setter 和输入验证的类
- android - 将控件上方/上方附加到 Shell 应用栏而不更改它
- mysql - MySQL Match Relevance Score 导致“DOUBLE value is out of range”错误
- html - HTML 对齐网页中不同长度的两个文本列
- css - css在mac上读得很好,但在pc上读不下去
- arm - 如何在 Android NDK 项目中获得 ARM NEON 点生成(“UDOT”)指令支持?
- java - 从控制台启动时未找到 com.opencsv
- java - 如何确定你的程序运行时间?
- python - 如何获取用户对 [discord.py] 做出反应的消息的 ID?