MySQL
Conjuntos de caracteres y colaciones
Buscar..
Declaración
CREATE TABLE foo ( ...
name CHARACTER SET utf8mb4
... );
Conexión
Es vital para el uso de conjuntos de caracteres decirle al servidor MySQL qué es lo que codifica los bytes del cliente. Aquí hay una forma:
SET NAMES utf8mb4;
Cada idioma (PHP, Python, Java, ...) tiene su propia forma en la que generalmente es preferible establecer SET NAMES
.
Por ejemplo: SET NAMES utf8mb4
, junto con una columna declarada CHARACTER SET latin1
: se convertirá de latin1 a utf8mb4 al INSERTing
y INSERTing
convertir cuando SELECTing
.
¿Qué conjunto de personajes y colección?
Hay docenas de juegos de caracteres con cientos de colaciones. (Una intercalación dada pertenece a un solo conjunto de caracteres). Vea la salida de SHOW COLLATION;
.
Por lo general, solo hay 4 CHARACTER SETs
que importan:
ascii -- basic 7-bit codes.
latin1 -- ascii, plus most characters needed for Western European languages.
utf8 -- the 1-, 2-, and 3-byte subset of utf8. This excludes Emoji and some of Chinese.
utf8mb4 -- the full set of UTF8 characters, covering all current languages.
Todos incluyen caracteres ingleses, codificados idénticamente. utf8 es un subconjunto de utf8mb4.
Mejores prácticas...
- Use utf8mb4 para cualquier columna
TEXT
oVARCHAR
que pueda tener una variedad de idiomas. - Use ascii (latin1 está bien) para cadenas hexadecimales (UUID, MD5, etc.) y códigos simples (código de país, código postal, etc.).
utf8mb4 no existía hasta la versión 5.5.3, por lo que utf8 era el mejor disponible antes de eso.
Fuera de MySQL , "UTF8" significa lo mismo que utf8mb4 de MySQL, no utf8 de MySQL.
Las colaciones comienzan con el nombre del conjunto de caracteres y generalmente terminan con _ci
para "insensibles a mayúsculas y minúsculas" o _bin
para "simplemente comparar los bits.
La 'última' compilación utf8mb4 es utf8mb4_unicode_520_ci
, basada en Unicode 5.20. Si está trabajando con un solo idioma, es posible que desee, por ejemplo, utf8mb4_polish_ci
, que reorganizará las letras ligeramente, según las convenciones polacas.
Configuración de conjuntos de caracteres en tablas y campos
Puede establecer un conjunto de caracteres tanto por tabla como por campo individual utilizando las sentencias CHARACTER SET
y CHARSET
:
CREATE TABLE Address (
`AddressID` INTEGER NOT NULL PRIMARY KEY,
`Street` VARCHAR(80) CHARACTER SET ASCII,
`City` VARCHAR(80),
`Country` VARCHAR(80) DEFAULT "United States",
`Active` BOOLEAN DEFAULT 1,
) Engine=InnoDB default charset=UTF8;
City
y Country
usarán UTF8
, ya que lo configuramos como el conjunto de caracteres predeterminado para la tabla. Street
por otro lado, usará ASCII
, como le hemos dicho específicamente para que lo haga.
La configuración del conjunto de caracteres correcto depende en gran medida de su conjunto de datos, pero también puede mejorar la portabilidad entre los sistemas que trabajan con sus datos.