gpt4 book ai didi

sql-server - sequelize 十六进制列值自动转换为缓冲区

转载 作者:行者123 更新时间:2023-12-03 22:20:27 26 4
gpt4 key购买 nike

我有一个带有十六进制值形式的 Id 的 mssql 数据库。

例如,在 Management Studio 中查看时,典型的 id 列看起来像

id,                                  | userName
0x8189CF203DEA4A44B8ADEFF1C8246866, | John
0xAF4845C8A34A48EF8B6D481F2D20D561, | Peter
0x70B1F5E3B3F8417BBB99912640C54520, | Alan

要查询用户表,我需要写一些类似的东西
SELECT * FROM users Where Id = 0x8189CF203DEA4A44B8ADEFF1C8246866

我用了很多 sequelize.query,直接运行一堆SQL语句。

当这样的表在 sequelize 中被读取时,id 在 sequelize 中被转换为 buffer 类型。所以我的问题是,我怎样才能保持这个十六进制值?是否有配置保留这些 id 的字符串十六进制值?我是否必须手动将这些缓冲区类型转换为十六进制字符串,并在前面附加一个 0x

最佳答案

For example, when viewed in Management studio, a typical id column looks like


对我来说,典型的 ID 看起来不像这样,但我很确定,您的十六进制值实际上是 UNIQUEIDENTIFIER (=GUID)(请参阅选项 2)。
选项 1:HEX 字符串
您可以将十六进制字符串存储为其字符串表示形式:
SELECT sys.fn_varbintohexstr(0x8189CF203DEA4A44B8ADEFF1C8246866)
返回“0x8189cf203dea4a44b8adeff1c8246866”(现在是一个字符串)
但是 - 然而 - 旨在执行相反操作的功能截断了其中的一部分
select sys.fn_cdc_hexstrtobin(N'0x8189CF203DEA4A44B8ADEFF1C8246866')
返回 0x8189CF203DEA4A44B8AD(太短了!!!)
选项 2:GUID
我会将这些值转换为 GUID(如果它们都不超过 16 字节!)并将它们类型安全地存储。获取 GUID 作为其字符串表示形式(例如,用 XML 编写)并将其转换回 GUID 是很容易且完全开箱即用的。
SELECT CAST(0x8189CF203DEA4A44B8ADEFF1C8246866 AS uniqueidentifier);
返回 20CF8981-EA3D-444A-B8AD-EFF1C8246866
SELECT CAST('20CF8981-EA3D-444A-B8AD-EFF1C8246866' AS uniqueidentifier)
返回与上面相同的内容,只是为了表明,此字符串值已转换为真实的 GUID
SELECT CAST(CAST('20CF8981-EA3D-444A-B8AD-EFF1C8246866' AS uniqueidentifier) AS varbinary(max))
返回 0x8189CF203DEA4A44B8ADEFF1C8246866
现在您又恢复了原来的十六进制字符串。

关于sql-server - sequelize 十六进制列值自动转换为缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39459694/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com