0

我面临一个与 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吗?有任何想法吗?

4

0 回答 0