Antes de crear tablas necesitas una base de datos. En MySQL, una base de datos es un contenedor lógico que agrupa tablas, vistas, procedimientos almacenados y funciones. Elegir el juego de caracteres (CHARACTER SET) y la ordenación (COLLATION) correctos al crear la base de datos evita problemas de codificación más adelante, especialmente con caracteres no-ASCII como acentos, ñ o emoji.
En este capítulo cubrimos CREATE DATABASE, la elección de utf8mb4 como juego de caracteres, ALTER DATABASE y las buenas prácticas de nomenclatura.
Crear una base de datos
-- Forma mínima CREATE DATABASE tienda; -- Forma completa (recomendada) CREATE DATABASE tienda CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- Con IF NOT EXISTS para evitar error si ya existe CREATE DATABASE IF NOT EXISTS tienda CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
utf8mb4: el juego de caracteres correcto para MySQL
MySQL tiene un tipo llamado utf8 que en realidad es un UTF-8 de 3 bytes (no el UTF-8 estándar). Esto significa que no puede almacenar caracteres que requieren 4 bytes, como emoji o caracteres de idiomas como el tibetano. Siempre usa utf8mb4 para Unicode completo.
Charset | Bytes por carácter | Emoji | Úsalo cuando... |
| 1-3 | No | Nunca (nombre engañoso, es un subconjunto de UTF-8) |
| 1-4 | Sí | Siempre — es el UTF-8 completo |
| 1 | No | Solo si necesitas compatibilidad con sistemas antiguos |
Collations: cómo se ordenan y comparan las cadenas
-- Ver todas las collations disponibles para utf8mb4 SHOW COLLATION WHERE Charset = 'utf8mb4'; -- Las más usadas: -- utf8mb4_unicode_ci → basada en el estándar Unicode; sensible a acentos pero no a mayúsculas -- utf8mb4_general_ci → más rápida pero menos precisa (no recomendada para idiomas no-ingleses) -- utf8mb4_bin → comparación byte a byte; distingue mayúsculas y acentos -- utf8mb4_spanish_ci → ordenación específica para español (ñ en su lugar correcto) -- utf8mb4_0900_ai_ci → nueva en MySQL 8, accent-insensitive y case-insensitive -- Ejemplo: la collation afecta a ORDER BY, LIKE, =... -- Con _ci (case insensitive): 'hola' = 'HOLA' es TRUE -- Con _bin: 'hola' = 'HOLA' es FALSE
Ver la base de datos activa y modificarla
-- Ver qué BD está seleccionada SELECT DATABASE(); -- Cambiar la BD activa USE tienda; -- Modificar el charset de una BD existente (solo afecta a tablas nuevas) ALTER DATABASE tienda CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- Para cambiar también las tablas existentes, hay que modificar cada tabla: ALTER TABLE clientes CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Eliminar una base de datos
-- Elimina la BD y TODOS sus contenidos (tablas, datos, vistas...) SIN CONFIRMACIÓN -- Irreversible si no tienes backup DROP DATABASE tienda; DROP DATABASE IF EXISTS tienda; -- no falla si no existe
Buenas prácticas de nomenclatura
- Nombres en minúsculas:
tienda_online, noTiendaOnline. MySQL en Linux distingue mayúsculas en nombres de BD y tabla; en Windows no. Usar minúsculas garantiza portabilidad. - Separador guión bajo:
tienda_online, notiendaonline. - Sin espacios ni caracteres especiales en nombres de bases de datos o tablas.
- Nombres descriptivos y cortos:
blog,ecommerce,crm_empresa.
