===== 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));