Ejemplo de restricción CHARACTER SET
La restricción CHARACTER SET define los conjuntos de caracteres utilizados para almacenar datos en columnas de tipo texto.
Cristian Escalante
Última actualización: 8 de mayo de 2025
Ejemplos de restricción CHARACTER SET
Un CHARACTER SET
(conjunto de caracteres) define qué caracteres pueden ser almacenados en una base de datos, tabla o columna. Está estrechamente relacionado con la COLLATION
, que define cómo se comparan y ordenan los caracteres. La elección del conjunto de caracteres adecuado es fundamental para el soporte multilingüe y el manejo correcto de caracteres especiales.
MySQL
En MySQL, podemos especificar el conjunto de caracteres a nivel de base de datos, tabla o columna:
-- A nivel de base de datos
CREATE DATABASE tienda
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
-- A nivel de tabla
CREATE TABLE productos (
id INT AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,
descripcion TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Para modificar el conjunto de caracteres de una tabla existente:
ALTER TABLE productos
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
-- Para una columna específica
ALTER TABLE productos
MODIFY nombre VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Algunos conjuntos de caracteres comunes en MySQL:
utf8mb4
: Soporta todos los caracteres Unicode, incluyendo emojis (4 bytes por carácter)utf8
: Soporta la mayoría de caracteres Unicode (3 bytes por carácter)latin1
: Soporta caracteres de Europa occidental (1 byte por carácter)
PostgreSQL
En PostgreSQL, el conjunto de caracteres se especifica al crear la base de datos:
CREATE DATABASE tienda
WITH ENCODING 'UTF8'
LC_COLLATE = 'es_ES.UTF-8'
LC_CTYPE = 'es_ES.UTF-8';
PostgreSQL no permite cambiar el conjunto de caracteres de una base de datos existente directamente. Para cambiar el conjunto de caracteres, se debe crear una nueva base de datos y migrar los datos.
Para verificar la codificación de una base de datos:
SELECT datname, pg_encoding_to_char(encoding) as encoding
FROM pg_database
WHERE datname = 'tienda';
SQL Server
En SQL Server, el conjunto de caracteres se especifica mediante la configuración de COLLATION
:
-- A nivel de base de datos
CREATE DATABASE tienda
COLLATE SQL_Latin1_General_CP1_CI_AS;
-- A nivel de columna
CREATE TABLE clientes (
id INT PRIMARY KEY,
nombre NVARCHAR(100) COLLATE SQL_Latin1_General_CP1_CI_AS,
direccion NVARCHAR(200) COLLATE SQL_Latin1_General_CP1_CI_AS
);
Para datos Unicode, se recomienda usar los tipos NCHAR
, NVARCHAR
y NTEXT
:
CREATE TABLE productos (
id INT PRIMARY KEY,
nombre NVARCHAR(100), -- Almacena caracteres Unicode
descripcion NVARCHAR(MAX) -- Equivalente a NTEXT pero más moderno
);
Para modificar la colación de una base de datos existente:
ALTER DATABASE tienda
COLLATE SQL_Latin1_General_CP1_CI_AS;
Oracle
En Oracle, el conjunto de caracteres se especifica al crear la base de datos:
CREATE DATABASE tienda
CHARACTER SET AL32UTF8
NATIONAL CHARACTER SET UTF8;
CHARACTER SET
define el conjunto de caracteres para columnas CHAR
, VARCHAR2
y CLOB
, mientras que NATIONAL CHARACTER SET
define el conjunto para columnas NCHAR
, NVARCHAR2
y NCLOB
.
Para columnas específicas, podemos usar:
CREATE TABLE productos (
id NUMBER PRIMARY KEY,
nombre VARCHAR2(100 CHAR), -- Especifica longitud en caracteres, no en bytes
descripcion_local VARCHAR2(500),
descripcion_internacional NVARCHAR2(500) -- Usa el NATIONAL CHARACTER SET
);
SQLite
SQLite tiene soporte integrado para UTF-8, UTF-16BE y UTF-16LE, pero no proporciona una sintaxis específica para definir el conjunto de caracteres. Por defecto, SQLite utiliza UTF-8:
-- Las cadenas se almacenan automáticamente en UTF-8
CREATE TABLE usuarios (
id INTEGER PRIMARY KEY,
nombre TEXT, -- Almacenado en UTF-8 por defecto
direccion TEXT
);
Buenas prácticas
- Usa UTF-8: Para aplicaciones modernas, es recomendable usar UTF-8 (o utf8mb4 en MySQL) para asegurar la compatibilidad con todos los idiomas y caracteres especiales.
- Consistencia: Mantén el mismo conjunto de caracteres en toda la base de datos para evitar problemas de conversión.
- Considera el rendimiento: Los conjuntos de caracteres más complejos (como UTF-8) requieren más espacio de almacenamiento y pueden afectar el rendimiento en tablas muy grandes.
- Prueba con datos reales: Verifica que tu conjunto de caracteres funcione correctamente con los datos que planeas almacenar, especialmente si incluyen idiomas con scripts no latinos.
-- Ejemplo de inserción con caracteres especiales (MySQL)
INSERT INTO productos (nombre, descripcion)
VALUES ('Café expreso', 'Café italiano de sabor intenso y aroma único ☕');