Varias variables de sistema de conjunto de caracteres y colaciones están relacionadas con la interacción cliente-servidor. Algunas de ellas se han mencionado en secciones anteriores:
            El conjunto de caracteres y la colación del servidor están
            disponibles como los valores de las variables
            character_set_server y
            collation_server .
          
            El conjunto de caracteres y la colación de la base de datos
            por defecto están disponibles como valores de las variables
            character_set_database y
            collation_database .
          
Variables de conjuntos de caracteres y colaciones adicionales están involucradas en tratar el tráfico para la conexión entre un cliente y el servidor. Cada cliente tiene variables para el conjunto de caracteres y colación relacionados con la conexión.
Una “conexión” es lo que se hace al conectarse con el servidor. El cliente envía comandos SQL, tales como consultas, mediante la conexión al servidor. El servidor envía respuestas, tales como resultados, mediante la conexión de vuelta al cliente. Esto genera preguntas sobre tratamiento de conjuntos de caracteres y colaciones para conexiones de cliente, cada una de ellas puede responderse mediante variables de sistema:
¿ Qué conjunto de caracteres usa una consulta al salir del cliente?
            El servidor toma la variable
            character_set_client para usarla en las
            consultas enviadas por el cliente.
          
¿ Qué conjunto de caracteres debería usar el servidor para traducir una consulta tras recibirla?
            Para esto, el servidor usa
            character_set_connection y
            collation_connection. Esto convierte las
            consultas enviadas por el cliente de
            character_set_client a
            character_set_connection (excepto para
            cadenas de caracteres literales que tienen un introductor
            como _latin1 o _utf8).
            collation_connection es importante para
            comparaciones de cadenas de caracteres literales. Para
            comparaciones de cadenas de caracteres con valores de
            columnas no importa, ya que las columnas tienen una
            precedencia mayor en las colaciones.
          
¿ Qué conjunto de caracteres debería usar el servidor para traducir los resultados o errores antes de enviar el mensaje de vuelta al cliente?
            La variable character_set_results indica
            el conjunto de caracteres usado por el servidor para
            devolver los resultados de las consultas al cliente. Esto
            incluye datos resultantes como los valores de las columnas,
            y metadatos resultantes como nombres de columnas.
          
Puede ajustar estas variables, o puede depender de los valores por defecto (en tal caso, puede obviar esta sección).
Hay dos comandos que afectan al conjunto de caracteres de conexión:
SET NAMES 'nombre_de_conjunto_de_caracteres' SET CHARACTER SETnombre_de_conjunto_de_caracteres
        SET NAMES indica qué hay en el comando SQL
        que envía el cliente. Por lo tanto, SET NAMES
        'cp1251' le dice al servidor “los próximos
        mensajes entrantes de este cliente están en el conjunto de
        caracteres cp1251.” También
        especifica el conjunto de caracteres para los resultados que el
        servidor devuelve al cliente. (Por ejemplo, indica los conjuntos
        de caracteres de la columna si usa el comando
        SELECT .)
      
        Un comando SET NAMES
        ' es equivalente a estos
        tres comandos:
      x'
mysql> SET character_set_client =x; mysql> SET character_set_results =x; mysql> SET character_set_connection =x;
        Cambiar character_set_connection a
        x también cambia
        collation_connection de la colación por
        defecto a x.
      
        SET CHARACTER SET es similar pero cambia el
        conjunto de caracteres y la colación para la conexión para ser
        las de la base de datos por defecto. Un comando SET
        CHARACTER SET x es equivalente a estos tres comandos:
      
mysql> SET character_set_client =x; mysql> SET character_set_results =x; mysql> SET collation_connection = @@collation_database;
        Cuando un cliente se conecta, envía al servidor el nombre del
        conjunto de caracteres que quiere usar. El servidor cambia las
        variables character_set_client,
        character_set_results, y
        character_set_connection para ese conjunto de
        caracteres. (De hecho, el servidor efectúa una operación
        SET NAMES usando el conjunto de caracteres).
      
        No es necesario ejecutar SET NAMES cada vez
        que se arranca el cliente mysql, aunque se
        quiera utilizar un conjunto de caracteres diferente del que hay
        por defecto. Puede añadirse la opción
        --default-character-set en la línea de
        comandos de mysql, o en el fichero de
        opciones. Por ejemplo, el siguiente fichero de opciones cambia
        las variables del conjunto de caracteres a
        koi8r cada vez que se ejecuta
        mysql:
      
[mysql] default-character-set=koi8r
        Ejemplo: Supongamos que column1 se define
        como CHAR(5) CHARACTER SET latin2. Si no se
        especifica SET NAMES o SET CHARACTER
        SET, entonces para SELECT column1 FROM
        t, el servidor devuelve todos los valores para
        column1 usando el conjunto de caracteres que
        el cliente especificó al conectar. Por otro lado, si se
        especifica SET NAMES 'latin1' o SET
        CHARACTER SET latin1, entonces justo antes de devolver
        los resultados, el servidor convierte el valor
        latin2 a latin1. La
        conversión puede perder información si hay caracteres que no
        están en ambos conjuntos de caracteres.
      
        Si no se quiere que el servidor haga ninguna conversión, debe
        cambiarse character_set_results a
        NULL:
      
mysql> SET character_set_results = NULL;
É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.

