提问人:C. MARTIN 提问时间:10/31/2023 更新时间:10/31/2023 访问量:35
Laravel 查询错误的值格式
Laravel query wrong format of value
问:
我目前正在使用 Laravel 开发一个 Web 应用程序。 我的数据库引擎是 Microsoft SQL Server。
对于某些数据,我更喜欢生成一个 uuid。 当我使用 Windows 运行我的 Laravel 应用程序时,uuid 格式是正确的:
- A5EE121A-1F10-46FC-B779-49D2A0FA3B68
但是当我在 linux 下运行我的 Laravel 应用程序并使用相同的数据库时,uuid 格式是这样的:
- b“\x1A\x12î¥\x10\x1FüF·yIÒ ú;h"
我不知道问题出在哪里...... 你有想法吗?
谢谢。
目标是检索 Laravel 应用程序在 Windows 和 Linux 下运行时的相同格式。
答:
0赞
Jeyhun Rashidov
10/31/2023
#1
在 Microsoft SQL Server 中,UUID 通常使用 UNIQUEIDENTIFIER 数据类型进行存储,该数据类型是一个 16 字节的二进制值。从数据库提取此值时,驱动程序可能会根据平台以不同的方式表示此二进制数据。
- 在 Windows 上,当您从数据库中获取 UUID 时,数据库驱动程序可能会将其转换为其字符串表示形式(类似于 A5EE121A-1F10-46FC-B779-49D2A0FA3B68)。
- 在 Linux 上,数据库驱动程序可能正在获取原始二进制数据,而不将其转换为其字符串表示形式。因此,您会看到原始字节(例如:b“\x1A\x12î¥\x10\x1FüF·yIÒ ú;h").
若要解决此问题并在两个平台上以一致的格式检索 UUID,可以在查询数据库时将 UUID 显式转换为其字符串表示形式。
SELECT CONVERT(NVARCHAR(36), [YourUUIDColumn]) AS uuid_string FROM [YourTableName]
在 Laravel 模型中,您可以使用访问器来处理 UUID 转换:
public function getUuidAttribute($value)
{
return strtoupper(bin2hex($value));
}
因此,您可以在 Laravel 中使用并获取预期的字符串格式来访问它。$model->uuid
0赞
Tipu Sultan Eiko
10/31/2023
#2
在你的添加这个config/database.php
'options' => [
PDO::DBLIB_ATTR_STRINGIFY_UNIQUEIDENTIFIER => true,
],
评论