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