我在 SQLite 数据库中有一个表 Employee
。其主键是 GUID 类型的“ID”。我尝试通过以下查询找到 id
= guid 'a8828ddf-ef22-4d36-935a-1c66ae86ebb3'
的记录,但没有成功:
SELECT * FROM Employee
WHERE Employee.Id = 'a8828ddf-ef22-4d36-935a-1c66ae86ebb3'
谁能告诉我应该如何编写查询?
谢谢,
最佳答案
这是一个老问题,但是通过搜索得出,虽然选择的答案是正确的,但它可能并不适合所有人。例如,当使用 .NET 绑定(bind)到 SQLite 时。
原因是,当 GUID 的格式为 a8828ddf-ef22-4d36-935a-1c66ae86ebb3
时,您不能只删除破折号并将其放入 X'...'
。 GUID 分为几个部分,数据库以不同方式存储二进制文件。
当 GUID 为 a8828ddf-ef22-4d36-935a-1c66ae86ebb3
时,它将以小端存储为 X'df8d82a822ef364d5a93b3eb86ae661c'
。请注意,字符串中的所有部分都是颠倒的。
当然,如果您通过删除破折号直接插入数据,如 X'a8828ddfef224d36935a1c66ae86ebb3'
,您也可以用它检索它,但如果您让 .NET 处理转换,GUID 将被存储作为小端字节表示。
(这一切都假设小端架构,没有在大端测试)
关于sql - 在 sqlite 中使用 guid 选择 guid 作为二进制文件存储在 sqlite 数据库中的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7815587/