0

yii2createCommand()メソッドに関連する奇妙な問題に直面しています。

データ型であるsome_tableという名前の列を持つ という名前の mysql テーブルがあります。私のphpメソッドでは、次のように宣言された名前のmysql関数(私が作成した)を介して、uuidバイナリ値を文字列値に変換しています:uuidbinary(16)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