Los metadatos son los datos acerca de los datos. Cualquier cosa
      que describa la base de datos, opuestamente a los contenidos de la
      misma, son metadatos. Así, los nombres de columna, nombres de
      base de datos, nombres de usuario, nombres de versión y la
      mayoría de resultados de SHOW son metadatos.
    
La representación de los metadatos debe satisfacer estos requerimientos:
          Todos los metadatos deben ser del mismo conjunto de
          caracteres. De otro modo SHOW no
          funcionaría correctamente ya que distintos registros en la
          misma columna tendrían distintos conjuntos de caracteres.
        
Los metadatos deben incluir todos los caracteres en todos los idiomas. De otro modo, los usuarios no serían capaces de nombrar tablas y columnas en su propio idioma.
Para satisfacer ambos requerimientos, MySQL guarda los metadatos en un conjunto de caracteres Unicode, llamado UTF8. Esto no causa ningún problema si no se utilizan nunca caracteres acentuados o no-latinos. Si se utilizan, debe tenerse en cuenta que los metadatos están en UTF8.
      Esto significa que las funciones USER(),
      CURRENT_USER(), DATABASE(),
      y VERSION() tienen el conjunto de caracteres
      UTF8 por defecto, al igual que sinónimos como
      SESSION_USER() y
      SYSTEM_USER().
    
      El servidor activa la variable de sistema
      character_set_system con el nombre del conjunto
      de caracteres de los metadatos:
    
mysql> SHOW VARIABLES LIKE 'character_set_system'; +----------------------+-------+ | Variable_name | Value | +----------------------+-------+ | character_set_system | utf8 | +----------------------+-------+
      El almacenamiento de metadatos usando Unicode
      no significa que las cabeceras de columnas y
      los resultados de la función DESCRIBE estén
      en el conjunto de caracteres
      character_set_system por defecto. Cuando
      introduce SELECT column1 FROM t, el nombre
      column1 mismo vuelve del servidor al cliente
      con el conjunto de caracteres determinado por el comando
      SET NAMES . Más específicamente, el conjunto
      de caracteres usado se determina por el valor de la variable de
      sistema character_set_results . Si esta
      variable se pone a NULL, no se realiza ninguna
      conversión y el servidor devuelve metadatos usando su conjunto de
      caracteres original (el conjunto indicado por
      character_set_system).
    
      Para que el servidor pase los resultados de metadatos con un
      conjunto de caracteres no-UTF8, utilícese SET
      NAMES para forzar al servidor a hacer una conversión
      del conjunto de caracteres (consulte
      Sección 10.3.6, “Conjunto de caracteres y colación de la conexión”), o hacer que el cliente haga
      la conversión. Es más eficiente que el cliente haga la
      conversión, pero esta opción no está disponible para todos los
      clientes.
    
      Si utiliza (por ejemplo) la función USER()
      para comparación o asignación dentro de un comando, no se
      preocupe. MySQL realiza algunas conversiones automáticas.
    
SELECT * FROM Table1 WHERE USER() = latin1_column;
      Esta sentencia funciona porque los contenidos de
      latin1_column se convierten automáticamente a
      UTF8 antes de la comparación.
    
INSERT INTO Table1 (latin1_column) SELECT USER();
      Esta sentencia funciona porque los contenidos de
      USER() se convierten automáticamente a
      latin1 antes de la asignación. La conversión
      automática no está completamente implementada aún, pero
      debería funcionar correctamente en versiones posteriores.
    
Aunque la conversión automática no está en el estándar SQL, el documento estándar SQL dice que cada conjunto de caracteres es (en términos de caracteres soportados) un “subconjunto” de Unicode. Puesto que es un principio bien conocido que “lo que se aplica a un superconjunto se puede aplicar a un subconjunto”, creemos que una colación para Unicode se puede aplicar para comparaciones con cadenas de caracteres no-Unicode.
Ésta es una traducción del manual de referencia de MySQL, que puede encontrarse en dev.mysql.com. El manual de referencia original de MySQL está escrito en inglés, y esta traducción no necesariamente está tan actualizada como la versión original. Para cualquier sugerencia sobre la traducción y para señalar errores de cualquier tipo, no dude en dirigirse a mysql-es@vespito.com.

