===== Codificación UTF-8 en MySQL =====
==== Comprobar codificación actual en el servidor MySQL ====
mysql -uXXXX -pXXXX -e "show variables like 'char%';" -e "show variables like 'collation%';"
Salida de un servidor MySQL con codificación UTF-8.
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | utf8 |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
+----------------------+-----------------+
| Variable_name | Value |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database | utf8_unicode_ci |
| collation_server | utf8_unicode_ci |
+----------------------+-----------------+
==== Editar la configuración del servicio MySQL para usar codificación UTF-8 ====
A continuación se listan las variables que definen la codificación del servidor MySQL en el fichero ///etc/my.cnf//.
[mysqld]
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8
character-set-filesystem=UTF8
[client]
default-character-set=UTF8
[mysqldump]
default-character-set=UTF8
==== Mostrar colaciones y conjuntos de caracteres de las tablas en uso ====
* **Conjunto caracteres**: Listado de caracteres con su código identificativo.
* **Colación**: Conjunto de reglas para comparar caracteres en un juego de caracteres dado.
Se propone a continuación una lista de comandos para encontrar información sobre la codificación de bases de datos, tablas y columnas en MySQL. Como se verá, hay varias formas de obtener la misma información.
**Listar todos los conjuntos de caracteres disponibles en el servidor MySQL instalado**. ([[http://dev.mysql.com/doc/refman/5.7/en/charset-charsets.html|Listado completo]])
SHOW CHARACTER SET;
**Listar las colaciones de los conjuntos de caracteres MySQL.**
SHOW COLLATION;
# Si queremos el listado de colaciones para un juego de caracteres determinado.
SHOW COLLATION LIKE 'UTF8%';
**Muestra el juego de caracteres y colación de todas las bases de datos MySQL**.
SELECT SCHEMA_NAME,default_character_set_name,DEFAULT_COLLATION_NAME FROM information_schema.SCHEMATA;
**Muestra la colación de todas las tablas de una determinada base de datos en MySQL**.
SHOW TABLE STATUS FROM XXXX
**Muestra el juego de caracteres y la colación de todas las tablas de una determinada base de datos en MySQL**.
SELECT TABLE_NAME,CHARACTER_SET_NAME,COLLATION_NAME
FROM information_schema.`TABLES` T, information_schema.`COLLATION_CHARACTER_SET_APPLICABILITY` CCSA
WHERE CCSA.collation_name = T.table_collation AND T.table_schema = "XXXX";
**Muestra la colación de cada campo una tabla en concreto en MySQL**.
SHOW CREATE TABLE XXXX
**Muestra el juego de caracteres y la colación de todos los campos una tabla en concreto en MySQL**.
SELECT COLUMN_NAME,CHARACTER_SET_NAME,COLLATION_NAME FROM information_schema.`COLUMNS` C
WHERE table_schema = "XXXX"
AND table_name = "XXXX";
===== Cifrado AES en MySQL =====
Cifra un "TEXTO" mediante la clave "PASSWORD".
INSERT INTO tabla VALUES(AES_ENCRYPT('TEXTO', 'PASSWORD'));
Descifra un "TEXTO" de la "COLUMNA" mediante la clave "PASSWORD".
SELECT AES_DECRYPT(COLUMNA, 'PASSWORD') FROM tabla;
Guardar y usar la password de cifrado en una variable.
SELECT @variable:='password';
INSERT INTO tabla VALUES (AES_ENCRYPT('TEXTO',@variable));