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
COLLATEXexplícito, usaX. -
Si hay un
COLLATEXyCOLLATEYexplí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(exprUSINGtranscoding_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_caracteresAStipo_de_datosCHARACTER 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.)