我面临一个与 yii2createCommand()
方法相关的奇怪问题。
我有一个名为 mysql 的表,它some_table
的列名为uuid
,它是binary(16)
数据类型。在我的 php 方法中,我将 uuid 二进制值转换为字符串 1,通过一个名为的 mysql 函数(我已经创建)UuidFromBin
,该函数声明如下:
FUNCTION `UuidFromBin`(`_bin` BINARY(16)) RETURNS varchar(36) CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci
DETERMINISTIC
SQL SECURITY INVOKER
RETURN
LCASE(CONCAT_WS('-',
HEX(SUBSTR(_bin, 5, 4)),
HEX(SUBSTR(_bin, 3, 2)),
HEX(SUBSTR(_bin, 1, 2)),
HEX(SUBSTR(_bin, 9, 2)),
HEX(SUBSTR(_bin, 11))
))
我还有一行,id = 1
它的uuid
值是下一个二进制值:
0x11ec975a505c0c9da3a7347df6ae628e
.
这行代码:
echo Yii::$app->db->createCommand("select UuidFromBin(uuid) from some_table where id = 1")->queryScalar();
返回正确的值,即"505c0c9d-975a-11ec-a3a7-347df6ae628e"
.
但是,当我试图获取 uuid 并以这种方式转换它时:
$binaryUuid = Yii::$app->db->createCommand("select uuid from some_table where id = 1")->queryScalar();
echo Yii::$app->db->createCommand("select UuidFromBin('" . $binaryUuid . "')")->queryScalar();
输出是"500c9da3-975a-11ec-a734-7df6ae628e00"
,这不是正确的值。
请注意
echo Yii::$app->db->createCommand("select UuidFromBin(0x11ec975a505c0c9da3a7347df6ae628e)")->queryScalar()
也返回"505c0c9d-975a-11ec-a3a7-347df6ae628e"
,这是正确的。
那么你认为发生了什么?我在获得的过程中错过了什么$binaryUuid
吗?有任何想法吗?