Esta sección describe operaciones que tienen en cuenta información sobre el conjunto de caracteres en MySQL 5.0.
MySQL tiene varios operadores y funciones que retornan una cadena de caracteres. Esta sección responde a la pregunta: ¿Cuál es el conjunto de caracteres y colación de esta cadena de caracteres?
Para funciones simples que toman una entrada de cadenas de
caracteres y devuelven una cadena de caracteres como salida, el
conjunto de caracteres y colación de la salida son las mismas
que las de la entrada. Por ejemplo
UPPER(
X
) devuelve
una cadena de caracteres con un conjunto de caracteres y
colación iguales a las de X
. Lo
mismo se aplica para INSTR()
,
LCASE()
, LOWER()
,
LTRIM()
, MID()
,
REPEAT()
, REPLACE()
,
REVERSE()
, RIGHT()
,
RPAD()
, RTRIM()
,
SOUNDEX()
, SUBSTRING()
,
TRIM()
, UCASE()
, y
UPPER()
. (Debe tenerse en cuenta que la
función REPLACE()
, a diferencia del resto de
funciones, ignora siempre la colación de la cadena de
caracteres de entrada y realiza una comparación que no
distingue entre mayúsculas y minúsculas).
Para operaciones que combinan varias cadenas de caracteres de entrada y devuelven una única cadena de salida, se aplica la “regla de agregación”estándar de SQL:
-
Si hay un
COLLATE
X
explícito, usaX
. -
Si hay un
COLLATE
X
yCOLLATE
Y
explícitos, muestra un error. -
De lo contrario, si todas las colaciones son
X
, usaX
. -
En cualquier otro caso, el resultado no tiene colación.
Por ejemplo, con CASE ... WHEN a THEN b WHEN b THEN c
COLLATE
X
END, la colación
resultante es X
. Lo mismo se aplica
para CASE
, UNION
,
||
, CONCAT()
,
ELT()
, GREATEST()
,
IF()
, y LEAST()
.
Para operaciones que conviertan datos de tipo carácter, el
conjunto de caracteres y colación de las cadenas de caracteres
resultantes de las operaciones se definen por las variables de
sistema character_set_connection
y
collation_connection
. Esto se aplica en
CAST()
, CHAR()
,
CONV()
, FORMAT()
,
HEX()
, y SPACE()
.
CONVERT()
proporciona un modo de convertir
datos entre distintos conjuntos de caracteres. La sintaxis es:
CONVERT(expr
USINGtranscoding_name
)
En MySQL, "transcoding names" es lo mismo que los conjuntos de caracteres correspondientes.
Ejemplos:
SELECT CONVERT(_latin1'Müller' USING utf8); INSERT INTO utf8table (utf8column) SELECT CONVERT(latin1field USING utf8) FROM latin1table;
CONVERT(... USING ...)
se implementa según
la especificación de SQL estándar.
En modo SQL TRADITIONAL
, si convierte una
cadena de caracteres de fecha “zero” en una fecha,
CONVERT()
retorna NULL
.
MySQL 5.0.4 y versiones posteriores también muestran un mensaje
de advertencia.
Puede usar CAST()
para convertir una cadena
de caracteres a un conjunto de caracteres distinto. La sintaxis
es:
CAST(cadena_de_caracteres
AStipo_de_datos
CHARACTER SETnombre_de_conjunto_de_caracteres
)
Ejemplo:
SELECT CAST(_latin1'test' AS CHAR CHARACTER SET utf8);
Si usa CAST()
sin especificar
CHARACTER SET
, el conjunto de caracteres y
colación resultantes se definen por las variables de sistema
character_set_connection
y
collation_connection
. Si usa
CAST()
con CHARACTER SET
X
, el conjunto de caracteres y colación resultantes
son X
y la colación por defecto de
X
.
Puede no usar una cláusula COLLATE
dentro de
CAST()
, pero puede hacerlo fuera. Esto es,
CAST(... COLLATE ...)
es ilegal, pero
CAST(...) COLLATE ...
es legal.
Ejemplo:
SELECT CAST(_latin1'test' AS CHAR CHARACTER SET utf8) COLLATE utf8_bin;
En modo SQL TRADITIONAL
, si convierte una
cadena de caracteres de fecha “zero” a una fecha,
CAST()
retorna NULL
. MySQL
5.0.4 y versiones posteriores muestran un mensaje de
advertencia.
Varios comandos SHOW
proporcionan
información adicional de conjuntos de caracteres. Esto incluye
SHOW CHARACTER SET
, SHOW
COLLATION
, SHOW CREATE DATABASE
,
SHOW CREATE TABLE
and SHOW
COLUMNS
.
El comando SHOW CHARACTER SET
muestra todos
los conjuntos de caracteres disponibles. Tiene una cláusula
opcional LIKE
que indica con qué nombres de
conjunto de caracteres comparar. Por ejemplo:
mysql> SHOW CHARACTER SET LIKE 'latin%'; +---------+-----------------------------+-------------------+--------+ | Charset | Description | Default collation | Maxlen | +---------+-----------------------------+-------------------+--------+ | latin1 | ISO 8859-1 West European | latin1_swedish_ci | 1 | | latin2 | ISO 8859-2 Central European | latin2_general_ci | 1 | | latin5 | ISO 8859-9 Turkish | latin5_turkish_ci | 1 | | latin7 | ISO 8859-13 Baltic | latin7_general_ci | 1 | +---------+-----------------------------+-------------------+--------+
Consulte Sección 13.5.4.1, “Sintaxis de SHOW CHARACTER SET
”.
La salida de SHOW COLLATION
incluye todos los
conjuntos de caracteres. Tiene una cláusula opcional
LIKE
que indica con qué nombres de conjunto
de caracteres comparar. Por ejemplo:
mysql> SHOW COLLATION LIKE 'latin1%'; +-------------------+---------+----+---------+----------+---------+ | Collation | Charset | Id | Default | Compiled | Sortlen | +-------------------+---------+----+---------+----------+---------+ | latin1_german1_ci | latin1 | 5 | | | 0 | | latin1_swedish_ci | latin1 | 8 | Yes | Yes | 0 | | latin1_danish_ci | latin1 | 15 | | | 0 | | latin1_german2_ci | latin1 | 31 | | Yes | 2 | | latin1_bin | latin1 | 47 | | Yes | 0 | | latin1_general_ci | latin1 | 48 | | | 0 | | latin1_general_cs | latin1 | 49 | | | 0 | | latin1_spanish_ci | latin1 | 94 | | | 0 | +-------------------+---------+----+---------+----------+---------+
Consulte Sección 13.5.4.2, “Sintaxis de SHOW COLLATION
”.
SHOW CREATE DATABASE
muestra el comando
CREATE DATABASE
que crea una base de datos
dada. El resultado incluye todas las opciones de la base de
datos DEFAULT CHARACTER SET
y
COLLATE
están soportadas. Todas las opciones
de las bases de datos se guardan en un fichero de datos llamado
db.opt
que se encuentra en el directorio de
la base de datos.
mysql> SHOW CREATE DATABASE test; +----------+-----------------------------------------------------------------+ | Database | Create Database | +----------+-----------------------------------------------------------------+ | test | CREATE DATABASE `test` /*!40100 DEFAULT CHARACTER SET latin1 */ | +----------+-----------------------------------------------------------------+
Consulte Sección 13.5.4.4, “Sintaxis de SHOW CREATE DATABASE
”.
SHOW CREATE TABLE
es similar, pero muestra el
comando CREATE TABLE
para crear una tabla
dada. Las definiciones de columnas indican cualquier
especificación del conjunto de caracteres, y las opciones de
tabla incluyen información del conjunto de caracteres.
Consulte Sección 13.5.4.5, “Sintaxis de SHOW CREATE TABLE
”.
El comando SHOW COLUMNS
muestra la colación
de las columnas de una tabla cuando se invoca como SHOW
FULL COLUMNS
. Columnas con tipos de datos
CHAR
, VARCHAR
, o
TEXT
tienen colaciones
no-NULL
. Tipos numéricos y otros tipos
no-carácter tiene colaciones NULL
. Por
ejemplo:
mysql> SHOW FULL COLUMNS FROM person\G *************************** 1. row *************************** Field: id Type: smallint(5) unsigned Collation: NULL Null: NO Key: PRI Default: NULL Extra: auto_increment Privileges: select,insert,update,references Comment: *************************** 2. row *************************** Field: name Type: char(60) Collation: latin1_swedish_ci Null: NO Key: Default: Extra: Privileges: select,insert,update,references Comment:
El conjunto de caracteres no es parte de lo que se muestra. (El nombre del conjunto de caracteres está implícito en el nombre de la colación.)