Laravel查询错误的值格式

ars1skjm  于 6个月前  发布在  其他
关注(0)|答案(2)|浏览(61)

我正在用Laravel开发一个Web应用程序。我的数据库引擎是Microsoft SQL Server。
对于一些数据,我更喜欢生成uuid。当我使用Windows运行Laravel应用程序时,uuid格式是正确的:

  • 地址:A5EE121A

但当我在Linux下运行Laravel应用程序,并使用相同的数据库时,uuid格式是这样的:

  • B *

我不知道问题出在哪里......你有办法吗?
谢谢.
其目标是在Laravel应用程序在Windows和Linux下运行时检索相同的格式。

pgky5nke

pgky5nke1#

config/database.php中添加以下内容

'options' => [
PDO::DBLIB_ATTR_STRINGIFY_UNIQUEIDENTIFIER => true,
],

字符串


然后优化:清除您的应用程序

6tqwzwtp

6tqwzwtp2#

在Microsoft SQL Server中,UUID通常使用UNIQUEIDENTIFIER数据类型存储,该数据类型是一个16字节的二进制值。从数据库获取此值时,驱动程序可能会根据平台以不同的方式表示此二进制数据。

  • 在Windows上,当您从数据库获取UUID时,数据库驱动程序可能会将其转换为字符串表示(smth,如A5 EE 121 A-1F 10 - 46 FC-B779 - 49 D2 A0 FA 3B 68)。
  • 在Linux上,数据库驱动程序可能会获取原始二进制数据,而不将其转换为字符串表示形式。因此,您将看到原始字节(例如:b”\x1A\x12VY\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访问它并获得预期的字符串格式。

相关问题