En MySQL 5.0, hay dos conjuntos de caracteres para guardar datos Unicode:
-
ucs2
, el conjunto de caracteres UCS-2 Unicode. -
utf8
, la codificación UTF8 del conjunto de caracteres Unicode.
En UCS-2 (representación binaria de Unicode), cada carácter se representa con un código de dos bytes Unicode con el byte más significativo primero. Por ejemplo: "LETRA LATINA MAYÚSCULA A" tiene código 0x0041 y se almacena como una secuencia de dos bytes: 0x00 0x41. "LETRA MINÚSCULA CIRÍLICA YERU" (Unicode 0x044B) se almacenca como la secuencia de dos bytes: 0x04 0x4B. Para caracteres Unicode y sus códigos, consulte Unicode Home Page.
Actualmente, UCS-2 no puede usarse como un conjunto de caracteres
cliente, lo que significa que SET NAMES 'ucs2'
no funciona.
El conjunto de caracteres UTF8 (transformación de la representación Unicode) es una forma alternativa de guardar los datos Unicode. Está implementado según el RFC 3629. La idea del conjunto de caracteres UTF8 es que varios caracteres Unicode se codifican usando secuencias de bytes de longitudes diferentes:
-
Letras básicas latinas, dígitos y signos de puntuación usan un byte.
-
La mayoría de letras europeas y del Medio Oriente se guardan en una secuencia de dos bytes: letras latinas extendidas (con tilde, diéresis, etc), cirílico, griego, armenio, hebreo, arábigo, sirio, y otros.
-
Ideogramas koreanos, chinos, y japoneses usan secuencias de tres bytes.
RFC 3629 describe secuencias de codificación que usan de uno a cuatro bytes. Actualmente, el soporte MySQL UTF8 no incluye secuencias de cuatro bytes. (Un estándar antiguo de codificación UTF8 se da en RFC 2279, que describe secuencias UTF8 que usan de uno a seis bytes. RFC 3629 sustituye al obsoleto RFC 2279; por esta razón, las secuencias con cinco y seis bytes ya no se usan).
Consejo: para ahorrar espacio con UTF8, use
VARCHAR
en lugar de CHAR
. De
otro modo, MySQL tiene que reservar 30 bytes para una columna
CHAR(10) CHARACTER SET utf8
, ya que es la
longitud máxima posible.