Использование MariaDB 10.3.9 и следующий запрос:
SELECT photoId FROM photos WHERE photoId = 123;
с использованием PDO и mysqlnd в php var_dump
даст int(123)
, как и ожидалось.
Но если я изменю запрос на
SELECT photoId FROM photos WHERE photoId = 123
UNION
SELECT 1 FROM photos WHERE photoId = 456;
Тогда вывод будет string(3) "123"
, string(1), "1"
.
Если я изменю запрос на
SELECT photoId FROM photos WHERE photoId = 123
UNION
SELECT CAST(1 AS UNSIGNED INT) FROM photos WHERE photoId = 456;
Я правильно получаю int(123)
, int(1)
.
Это кажется очень странным поведением - почему MariaDB предпочитает приводить явное значение 1 к строке, а не оставлять его как целое число, которое записывается как?
Еще страннее, у меня photoId определено как неподписанное. Если я просто использую CAST(1 AS INT)
, то все равно будет выглядеть как строка только потому, что я пропустил часть UNSIGNED
.