在sqlite中使用guid选择guid作为二进制文件存储在sqlite db中的位置

sea*_*717 8 sql sqlite

Employee在SQLite数据库中有一个表.其主键是GUID类型的"ID".我尝试使用以下查询找到带有id= guid 的记录'a8828ddf-ef22-4d36-935a-1c66ae86ebb3'但没有运气:

SELECT * FROM Employee
WHERE Employee.Id = 'a8828ddf-ef22-4d36-935a-1c66ae86ebb3'
Run Code Online (Sandbox Code Playgroud)

任何人都可以告诉我应该如何编写查询?

谢谢,

Sam*_*nen 11

这是一个老问题,但提出了搜索,而选定的答案是正确的,它可能不适合每个人.例如,当使用.NET绑定到SQLite时.

原因是当GUID格式化时,a8828ddf-ef22-4d36-935a-1c66ae86ebb3您不能只删除破折号并将其放入X'...'.GUID有几个部分,数据库以不同方式存储二进制文件.

当GUID a8828ddf-ef22-4d36-935a-1c66ae86ebb3它将以小端存储为X'df8d82a822ef364d5a93b3eb86ae661c'.请注意,字符串中的所有部分都是相反的.

当然,如果您通过删除破折号直接插入数据,因为X'a8828ddfef224d36935a1c66ae86ebb3'您也可以使用它来检索它,但如果让.NET处理转换,GUID将存储为小端字节表示.

(这都假设小端架构,没有在大端测试)


Dou*_*rie 9

GUID可能存储为二进制blob; 尝试:

SELECT * FROM Employee
WHERE Employee.Id = X'a8828ddfef224d36935a1c66ae86ebb3';
Run Code Online (Sandbox Code Playgroud)

  • 解决方案在这里找到了http://stackoverflow.com/questions/1039461/how-to-display-blob-value-using-xabc-binary-string-literal-syntax (3认同)