sql >> Base de Datos >  >> RDS >> Mysql

Cambio de codificación de caracteres MySQL. ¿Se preserva la integridad de los datos?

Cada (tipo de cadena de caracteres) columna tiene su propio conjunto de caracteres y metadatos de colación.

Si, cuando la columna se especificó el tipo de datos (es decir, cuándo se creó o modificó por última vez), no se proporcionó explícitamente ningún juego de caracteres/intercalación, luego se usaría el juego de caracteres y la intercalación predeterminados de la tabla para la columna.

Si, cuando la mesa se especificó, no se proporcionó explícitamente ningún juego de caracteres/intercalación predeterminados, entonces el juego de caracteres y la intercalación predeterminados de la base de datos se utilizarían para la tabla predeterminada.

Los comandos que cita en su pregunta simplemente alteran dichos conjuntos/intercalaciones de caracteres predeterminados para la base de datos y la tabla, respectivamente. En otras palabras, solo afectarán a las tablas y columnas que se creen posteriormente; no afectar las columnas (o datos) existentes.

Para actualizar los datos existentes, primero debe leer el Cambiar el conjunto de caracteres sección de la página del manual en ALTER TABLE :

Para cambiar solo el predeterminado conjunto de caracteres para una tabla, use esta instrucción:

ALTER TABLE tbl_name DEFAULT CHARACTER SET charset_name;

La palabra DEFAULT es opcional. El conjunto de caracteres predeterminado es el conjunto de caracteres que se usa si no especifica el conjunto de caracteres para las columnas que agrega a una tabla más adelante (por ejemplo, con ALTER TABLE ... ADD column ).

Cuando foreign_key_checks variable del sistema está habilitada, que es la configuración predeterminada, la conversión de juegos de caracteres no está permitida en tablas que incluyen una columna de cadena de caracteres utilizada en una restricción de clave externa. La solución es deshabilitar foreign_key_checks antes de realizar la conversión del juego de caracteres. Debe realizar la conversión en ambas tablas involucradas en la restricción de clave externa antes de volver a habilitar foreign_key_checks . Si vuelve a habilitar foreign_key_checks después de convertir solo una de las tablas, un ON DELETE CASCADE o ON UPDATE CASCADE La operación podría dañar los datos en la tabla de referencia debido a la conversión implícita que ocurre durante estas operaciones (Error #45290, Error #74816).