Almacenamiento de caracteres en MySQL

En Mysql, los caracteres se almacenan en los campos de tipo CHAR y VARCHAR.

CHAR

  • Tiene una longitud fija (máxima), entre 0 y 255, desde el momento en que se agrega a la tabla.
  • Cuando se guarda un valor, se agregan espacios al final hasta completar la longitud.
  • Cuando se obtiene el valor, los espacios al final se quitan (excepto que esté activado el modo sql PAD_CHAR_TO_FULL_LENGTH)
  • Los espacios finales en exceso en valores insertados son truncados silenciosamente.

VARCHAR

  • Tiene una longitud variable siendo la máxima, entre 0 y 65536.
  • Los valores se almacenan con un prefijo de 1 byte si la longitud es hasta 255 bytes y de 2 bytes si es mayor, además de los datos.
  • Los valores no se completan con espacios cuando se guardan.
  • Los espacios al final se guardan y se obtienen siempre.
  • Los espacios finales que exceden la longitud máxima se truncan antes de la inserción y generan un warning.

En ambos tipos

  • Si no está activado el modo estricto, al asignar un valor a un campo CHAR o VARCHAR que excede su longitud máxima, se trunca y genera un warning. Caso contrario, se genera un error y se anula la consulta.
  • Los valores se ordenan y comparan de acuerdo al collation asociado al campo.
  • Los valores se comparan omitiendo los espacios finales, a excepción de cuando se usa el operador LIKE, para el cual importan los espacios al final.
  • Si un campo tiene un índice que requiere valores únicos, al insertar valores que solamente difieran en los espacios al final se generará un error de duplicate entry que deberá ser tratado.
Anuncios