MySQL CONCAT, codificación y valores nulos

Recientemente me encontré con dos comportamientos de la función CONCAT de MySQL que me causaron problemas con la codificación y los valores nulos. Aquí hay una descripción de los problemas encontrados con sus soluciones y explicaciones.

mysql_logoUtilizo funciones MySQL, procedimientos almacenados, activadores y eventos a diario en mi trabajo. En este contexto, encontré algunos problemas con la función CONCAT. Después de investigar un poco en la red, vi que el comportamiento en cuestión era normal y tenía la explicación de por qué y cómo. Te doy aquí estas soluciones y explicaciones en caso de que encuentres los mismos problemas.

Problema de valores NULL con CONCAT

Uno de los puntos que a menudo me molestaba cuando tenía que usar la función CONCAT MySQL es el hecho de que solo se necesita un valor NULL en el lote para que toda la cadena se convierta en NULL.
Entonces es necesario encontrar en medio de todos los campos y todas las variables involucradas cuál tiene la culpa. No siempre es fácil dependiendo del número de parámetros. Recientemente encontré en este sitio un truco usando la función CONCAT_WS con la cadena vacía como separador. La función CONCAT_WS (para With Separator) agrega automáticamente un separador entre cada parámetro de la función (definido como el primer parámetro). Esta función también tiene la ventaja de ignorar los valores nulos.

Problema de codificación con CONCAT

Me encontré con un problema de codificación recientemente con la función CONCAT. Sin embargo, los campos de entrada y salida tenían el mismo conjunto de caracteres (latin1, para migrar un día a la nota del editor Utf8), pero en la salida mis acentos aparecían con un signo de interrogación. Al hacer algunas pruebas con la función CHARSET, me di cuenta de que desde el momento en que tenía un número en mi concatenación, mi conjunto de caracteres en la salida de CONCAT era «binario» y más latin1 (vea la captura de pantalla a continuación). El comportamiento es normal y está documentado después de leer el sitio de MySQL. Una de las soluciones en este caso es pasar por un CAST (ver captura de pantalla a continuación).

concat mysql

Deja una respuesta