sql - 在 sqlite 中使用 guid 选择 guid 作为二进制文件存储在 sqlite 数据库中的位置

标签 sql sqlite

我在 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/

相关文章:

mysql - 按给定 ID 排序顺序选择记录

php - 使用 mysql 完成所需的数量

sqlite - 检查 SQLite 中是否存在列

java - Android : "Column is not unique" 的 SQLite 错误

Python sqlite3 占位符

sql - 调整数据库表中每个 VARCHAR 列的大小 - Oracle 11g

mysql - SQL查询使数据聚合变得困难

sql - SQL Server 中表提示的用途是什么?

android - 对数据库中的元素进行排序

java - 将 SQLite 数据库中的数据显示到自定义 ListView