SHOW WARNINGS
SHOW WARNINGS muestra los errores, advertencias y notas generados por la última sentencia ejecutada. Es más completo que SHOW ERRORS porque incluye los tres niveles de diagnóstico.
Sintaxis
-- Ver todas las advertencias
SHOW WARNINGS;
-- Limitar resultados
SHOW WARNINGS LIMIT cantidad;
-- Con offset
SHOW WARNINGS LIMIT offset, cantidad;
-- Contar advertencias
SHOW COUNT(*) WARNINGS;Niveles de diagnóstico
| Level | Descripción | Ejemplo |
|---|---|---|
| Error | La operación falló | Tabla no existe |
| Warning | La operación se completó pero con problemas | Dato truncado |
| Note | Información adicional | DROP IF EXISTS de objeto inexistente |
Ejemplo: advertencia por truncamiento
CREATE TEMPORARY TABLE tmp_test (nombre VARCHAR(5));
INSERT INTO tmp_test VALUES ('MySQL Tutorial');
-- Warning: Data truncated for column 'nombre'
SHOW WARNINGS;| Level | Code | Message |
|---|---|---|
| Warning | 1265 | Data truncated for column 'nombre' at row 1 |
SELECT * FROM tmp_test;| nombre |
|---|
| MySQL |
El dato se insertó pero truncado a 5 caracteres.
DROP TEMPORARY TABLE tmp_test;Ejemplo: nota con IF EXISTS
DROP TABLE IF EXISTS tabla_que_no_existe;
-- Query OK, 0 rows affected, 1 warning
SHOW WARNINGS;| Level | Code | Message |
|---|---|---|
| Note | 1051 | Unknown table 'tienda_mysql.tabla_que_no_existe' |
No es un error ni una advertencia, solo una nota informativa.
warning_count
-- Variable de sesión con el conteo
SELECT @@warning_count;-- Equivalente
SHOW COUNT(*) WARNINGS;sql_notes
La variable sql_notes controla si MySQL genera notas:
-- Desactivar notas
SET sql_notes = 0;
DROP TABLE IF EXISTS tabla_inexistente;
SHOW WARNINGS;
-- (vacío, no se generó la nota)
-- Reactivar
SET sql_notes = 1;Advertencias comunes
| Código | Mensaje | Causa |
|---|---|---|
| 1265 | Data truncated | Dato más largo que la columna |
| 1366 | Incorrect value | Tipo de dato incompatible |
| 1292 | Truncated incorrect value | Conversión implícita con pérdida |
| 1051 | Unknown table | DROP IF EXISTS de tabla inexistente |
| 1305 | PROCEDURE does not exist | DROP PROCEDURE IF EXISTS |
| 3719 | utf8 is alias for utf8mb3 | Usar utf8 en vez de utf8mb4 |
Usar SHOW WARNINGS en procedimientos
DELIMITER //
CREATE PROCEDURE operacion_con_warnings()
BEGIN
DECLARE v_warnings INT;
-- Operación que puede generar warnings
DROP TABLE IF EXISTS tmp_no_existe;
-- Verificar si hubo warnings
SELECT @@warning_count INTO v_warnings;
IF v_warnings > 0 THEN
SELECT CONCAT('Se generaron ', v_warnings, ' advertencia(s)') AS info;
END IF;
END //
DELIMITER ;SHOW WARNINGS vs GET DIAGNOSTICS
| Característica | SHOW WARNINGS | GET DIAGNOSTICS |
|---|---|---|
| Uso | Interactivo, en el cliente | Dentro de procedimientos |
| Nivel de detalle | Básico | Completo, con más propiedades |
| Acceso programático | Difícil | Fácil, con variables |
Para manejo de errores dentro de procedimientos, GET DIAGNOSTICS es más adecuado:
DELIMITER //
CREATE PROCEDURE ejemplo_diagnostics()
BEGIN
DECLARE v_count INT;
DECLARE CONTINUE HANDLER FOR SQLWARNING
BEGIN
GET DIAGNOSTICS v_count = NUMBER;
SELECT CONCAT(v_count, ' advertencia(s) capturada(s)') AS info;
END;
-- Operación que genera warning
DROP TABLE IF EXISTS otra_tabla_inexistente;
END //
DELIMITER ;Limpieza
DROP PROCEDURE IF EXISTS operacion_con_warnings;
DROP PROCEDURE IF EXISTS ejemplo_diagnostics;Con esto completamos la sección de manejo de errores. Hemos cubierto DECLARE HANDLER, DECLARE CONDITION, SIGNAL, RESIGNAL, SHOW ERRORS y SHOW WARNINGS. En la siguiente sección exploraremos las funciones almacenadas.
Escrito por Eduardo Lázaro
