Nota: He movido la esencia de esta pregunta aquí después de haber aprendido algo de lo que está sucediendo pero aún quiero entender. (En esencia, ISNULL y COALESCE se comportan de manera inusual cuando una variable no está definida o se ha establecido en NULL antes de definirse).
Debo estar perdiendo algo muy simple, pero no veo ninguna respuesta a una pregunta anterior similar. Quiero usar un valor predeterminado si una variable no está configurada, pero no puedo ver cómo hacerlo.
SET @x = NULL; SELECT IFNULL(NULL, 5), IFNULL(@x,5), IF(@x IS NULL, 5, @x); -- gives 5, BLOB, BLOBLeí que COALESCE es la función correcta para usar aquí, pero COALESCE(@x,5) también da BLOB.
¿Qué me estoy perdiendo? ¿No es posible, en efecto, decir x = x O 5?
Esto es extraño. Usando MySQL Workbench, comenzará a funcionar si ejecuta los 3 bloques:
SET @x = NULL; SELECT IFNULL(NULL, 5), IFNULL(@x,5), IF(@x IS NULL, 5, @x); -- 5, blob, blob SET @x = 'TEST'; SELECT IFNULL(NULL, 5), IFNULL(@x,5), IF(@x IS NULL, 5, @x); -- 5, TEST, TEST SET @x = NULL; SELECT IFNULL(NULL, 5), IFNULL(@x,5), IF(@x IS NULL, 5, @x); -- 5, 5, 5AFAIK, no puede definir un tipo para una variable definida por el usuario, pero MySQL no parece saber qué hacer con esta variable hasta que primero la configura en algo que no es nulo. Si ejecuto su declaración dentro de sqlDeveloper, generará 77686174 en lugar de 'BLOB'.