sql >> Base de Datos >  >> RDS >> MariaDB

Establecer el conjunto de caracteres y la intercalación de una tabla en MariaDB

Puede especificar el conjunto de caracteres y la intercalación en varios niveles en MariaDB. Puede especificarlos a nivel de conexión, a nivel de servidor, a nivel de base de datos, a nivel de tabla e incluso a nivel de columna.

También puede especificar una intercalación en sus consultas para que anule cualquier intercalación que se haya especificado previamente en los niveles antes mencionados.

Para establecer el conjunto de caracteres y la intercalación a nivel de tabla, use CREATE TABLE sentencia o ALTER TABLE instrucción (dependiendo de si está creando la tabla o modificándola).

Al crear la tabla

Este es un ejemplo de configuración de la intercalación y el conjunto de caracteres al crear la tabla:

CREATE TABLE Products ( 
    ProductId CHAR(10), 
    ProductName VARCHAR(255) NOT NULL, 
    PRIMARY KEY (ProductId)) 
    CHARACTER SET latin1 
    COLLATE latin1_general_ci;

Eso crea una tabla llamada Products con un latin1 conjunto de caracteres y una recopilación de latin1_general_ci .

Modificar una tabla existente

Este es un ejemplo de cómo cambiar la intercalación y el conjunto de caracteres en una tabla existente:

ALTER TABLE Products 
CONVERT TO CHARACTER SET utf8 COLLATE utf8_spanish_ci;

Ahora usa la nueva intercalación y juego de caracteres.

También es posible omitir CONVERT TO parte:

ALTER TABLE Products 
CHARACTER SET utf8 
COLLATE utf8_spanish_ci;

La intercalación debe ser válida para el juego de caracteres

Al configurar tanto la intercalación como el conjunto de caracteres, debe asegurarse de que la intercalación sea válida para el conjunto de caracteres elegido y viceversa. Si no, se devuelve un error.

Este es un ejemplo de cómo especificar el uso de una intercalación no válida para el conjunto de caracteres especificado:

ALTER TABLE Products 
CHARACTER SET latin1 
COLLATE utf8_spanish_ci;

Resultado:

ERROR 1253 (42000): COLLATION 'utf8_spanish_ci' is not valid for CHARACTER SET 'latin1'

Nos dice que nuestra intercalación elegida no es válida para nuestro conjunto de caracteres especificado elegido.

Consulte la Lista completa de intercalaciones admitidas por MariaDB o la Lista completa de conjuntos de caracteres admitidos por MariaDB para obtener una lista de intercalaciones y conjuntos de caracteres coincidentes.

Especificar solo la intercalación o el juego de caracteres

Está bien especificar solo la intercalación o solo el juego de caracteres (o ninguno):

  • Si solo se proporciona el conjunto de caracteres, se utilizará la intercalación predeterminada para ese conjunto de caracteres.
  • Si solo se proporciona la intercalación, se usará el juego de caracteres asociado.
  • Si no se proporciona ni la intercalación ni el conjunto de caracteres, se usa la tabla predeterminada.

Conversión a un juego de caracteres que requiere más bytes

Para VARCHAR o TEXT columnas, CONVERT TO CHARACTER SET cambia el tipo de datos si es necesario para garantizar que la nueva columna sea lo suficientemente larga para almacenar tantos caracteres como la columna original.

Por ejemplo, un ascii TEXT columna requiere un solo byte por carácter, por lo que la columna puede contener hasta 65.535 caracteres. Si la columna se convierte a utf8, se pueden requerir hasta 3 bytes para cada carácter, por lo que la columna se convertirá a MEDIUMTEXT (que tiene una longitud máxima de 16 777 215) para que pueda contener la misma cantidad de caracteres.

Si no desea que se produzcan tales cambios en el tipo de datos, use MODIFY en las columnas individuales en su lugar.

Por ejemplo:

ALTER TABLE Products 
MODIFY ProductName VARCHAR(255) 
CHARACTER SET utf8; 

Convertir a binario

CONVERT TO CHARACTER SET binary convertirá CHAR , VARCHAR y TEXT columnas a BINARY , VARBINARY y BLOB respectivamente.

Una vez hecho esto, dichas columnas ya no tendrán un juego de caracteres. Además, ya no se verán afectados por futuros CONVERT TO CHARACTER SET declaraciones.

Comprobación de la intercalación y los conjuntos de caracteres en MariaDB

Hay varias formas de verificar la intercalación y los conjuntos de caracteres en MariaDB, según el nivel que esté verificando (servidor, base de datos, tabla, columna, conexión, etc.). Consulte Mostrar la intercalación en MariaDB para ver ejemplos.