Utilizamos cookies propias y de terceros. [Más información sobre las cookies].
Política de cookies
Proyecto AjpdSoft

· Inicio
· Buscar
· Contactar
· Cookies
· Descargas
· Foros
· Historia
· Nosotros
· Temas
· Top 10
· Trucos
· Tutoriales
· Wiki

MySQL: Tipos de datos en MySQL Server
Bases de Datos


Os mostramos los tipos de datos (data types) del motor de base de datos SGBD MySQL Server: TinyInt, Bit, Bool, SmallInt, MediumInt, Integer, BigInt, DateTime, VarChar, LongBlob, etc. Explicamos cuando utilizarlos, el rango mínimo, el rango máximo y el tamaño que ocupan. Con algunos ejemplos sobre creación de tablas en MySQL Server con estos tipos de datos. Explicamos los tipos de datos espaciales de MySQL.



Definición MySQL

MySQL es un sistema de gestión de base de datos (SGBD) relacional, multihilo y multiusuario. MySQL AB desarrolla MySQL como software libre en un esquema de licenciamiento dual: por un lado se ofrece bajo la licencia GNU GPL, pero aquellas empresas que quieran incorporarlo en productos privativos deben comprar una licencia específica que les permita este uso. Está desarrollado en su mayor parte en ANSI C.

MySQL es propietario de su código fuente y está patrocinado por una empresa privada, que posee el copyright de la mayor parte del código. Esto es lo que posibilita el esquema de licenciamiento anteriormente mencionado. Además de la venta de licencias privativas, la compañía ofrece soporte y servicios.

Hay que hacer mención de que MySQL AB fue comprada en enero de 2008 por Sun Microsystems y ésta, a su vez, fue comprada por Oracle Corporation en abril de 2009. Por lo que, si no se establece lo contrario jurídicamente (en los comités que tengan que evaluar la validez de esta compra), MySQL pertenece a Oracle Corporation.

Algunas de las características de las últimas versiones de MySQL son:

  • Soportan un amplio subconjunto de ANSI SQL 99.
  • Soporte a multiplataforma (Windows, GNU Linux, Unix, AIX, BSD, HP-UX, Mac OS X, NetBSD, Novell Netware, OpenBSD, OS/2 Warp, Solaris, SunOS, SCO OpenServer, SCO UnixWare, Tru64, etc.).
  • Procedimientos almacenados.
  • Disparadores (triggers).
  • Cursores.
  • Vistas actualizables.
  • Soporte de tipo de datos VARCHAR.
  • Modo Strict.
  • Soporte X/Open XA de transacciones distribuidas; transacción en dos fases como parte de esto, utilizando el motor InnoDB de Oracle.
  • Motores de almacenamiento independientes (MyISAM para lecturas rápidas, InnoDB para transacciones e integridad referencial).
  • Transacciones con los motores de almacenamiento InnoDB, BDB y Cluster; puntos de recuperación (savepoints) con InnoDB.
  • Soporte para SSL.
  • Query caching.
  • Sub-SELECTs (o SELECTs anidados).
  • Réplica con un maestro por esclavo, varios esclavos por maestro, sin soporte automático para múltiples maestros por esclavo.
  • Embedded database library.
  • Soporte completo para Unicode.
  • Shared-nothing clustering through MySQL Cluster.
  • Usa GNU Automake, Autoconf, y Libtool para portabilidad.
  • Uso de multihilos mediante hilos del kernel.
  • Usa tablas en disco b-tree para búsquedas rápidas con compresión de índice.
  • Tablas hash en memoria temporales.
  • El código MySQL se prueba con Purify (un detector de memoria perdida comercial) así como con Valgrind, una herramienta GPL.
  • Completo soporte para operadores y funciones en cláusulas select y where.
  • Completo soporte para cláusulas group by y order by, soporte de funciones de agrupación.
  • Seguridad: ofrece un sistema de contraseñas y privilegios seguro mediante verificación basada en el host y el tráfico de contraseñas está cifrado al conectarse a un servidor.
  • Soporta gran cantidad de datos.
  • Se permiten hasta 64 índices por tabla. Cada índice puede consistir desde 1 hasta 16 columnas o partes de columnas. El máximo ancho de límite son 1000 bytes.
  • Los clientes se conectan al servidor MySQL usando sockets TCP/IP en cualquier plataforma. En sistemas Windows se pueden conectar usando named pipes y en sistemas Unix usando ficheros socket Unix.
  • Los clientes y servidores Windows se pueden conectar usando memoria compartida.
  • MySQL contiene su propio paquete de pruebas de rendimiento proporcionado con el código fuente de la distribución de MySQL.
  • Foreign keys (claves foráneas), a partir de la versión 6.
  • Soporte para XML (a partir de la versión 6).

Las siguientes características son implementadas únicamente por MySQL (no las tienen otros motores de base de datos):

  • Múltiples motores de almacenamiento (MyISAM, Merge, InnoDB, BDB, Memory/heap, MySQL Cluster, Federated, Archive, CSV, Blackhole y Example en 5.x), permitiendo al usuario escoger la que sea más adecuada para cada tabla de la base de datos, dependiendo del uso que se le vaya a dar.
  • Agrupación de transacciones, reuniendo múltiples transacciones de varias conexiones para incrementar el número de transacciones por segundo.

MySQL AB clasifica sus productos de la siguiente forma:

  • MySQL Enterprise: incluye MySQL Enterprise Server, Monitoreo de la red MySQL, servicios de consulta y soporte de producción MySQL
  • MySQL Cluster.
  • MySQL Embedded Database.
  • MySQL Drivers: para JDBC, ODBC y .Net.
  • MySQL Tools: MySQL Administrator, MySQL Query Browser y MySQL Migration Toolkit.
  • MaxDB: es una base de datos open source certificada para SAP/R3.

Tipos de datos de MySQL Server

A continuación os mostramos los tipos de datos (data types) que se pueden definir para el motor de base de datos MySQL:

Grupo Tipo de dato Intervalo Almacenamiento
Numéricos TINYINT

De -128 a 127 (signed)
De 0 a 255 (unsigned)

1 byte
SMALLINT

De -32768 a 32767 (signed)
De 0 a 65535 (unsigned)

2 bytes
MEDIUMINT

De -8388608 a 8388607 (signed)
De 0 a 16777215 (unsigned)

3 bytes
INT
INTEGER

De -2147483648 a 2147483647 (signed)
De 0 a 4294967295 (unsigned)

4 bytes
BIGINT De -9223372036854775808 a 9223372036854775807 (signed)
De 0 a 18446744073709551615 (unsigned)
8 bytes
BIT Equivalente a TINYINT(1) 1 byte
BOOL
BOOLEAN
Equivalente a TINYINT(1)
Valor 0 = False
Valor 1 = True
1 byte
FLOAT [(M,D)]

De -3.402823466E+38 a -1.175494351E-38, 0, y desde 1.175494351E-38 a 3.402823466E+38

M es el número total de dígitos y D es el número de dígitos después del punto decimal. Si se omite M y D, los valores se almacenan en los límites permitidos por el hardware (unas 7 posiciones decimales)

4 bytes
FLOAT (p)

p representa la precisión en bits, MySQL usa este valor sólo para determinar si se debe usar FLOAT o DOUBLE para el tipo de datos resultante.

Si p está entre 0 a 24, el tipo de datos se convierte en FLOAT (sin M ó D). Si p está entre 25 a 53, el tipo de datos se convierte a DOUBLE (sin M ó D).

En realidad este tipo de datos es proporcionado por MySQL por compatibilidad con ODBC

4 bytes si 0 <= p <= 24, 8 bytes si 25 <= p <= 53
DOUBLE [(M,D)]

De -1.7976931348623157E+308 a -2.2250738585072014E-308, 0, y desde 2.2250738585072014E-308 a 1.7976931348623157E+308

M es el número total de dígitos y D es el número de dígitos después del punto decimal. Si se omite M y D, los valores se almacenan en los límites permitidos por el hardware (unas 15 posiciones decimales)

8 bytes
REAL[(M,D)]
DOUBLE PRECISION
Equivalente a DOUBLE, con la excepción de que si está activado el modo REAL_AS_FLOAT, REAL es un sinónimo de FLOAT en lugar de DOUBLE 4 Bytes ó 8 bytes
DECIMAL [(M[,D])]
DEC [(M[,D])]
NUMERIC [(M[,D])]
FIXED[(M[,D])]

Número en coma flotante sin empaquetar. Se comporta como una columna CHAR. El número se almacena como una cadena, usando un carácter para cada dígito del valor.

El rango máximo es el mismo que para el tipo DOUBLE

M+2 bytes sí D > 0
M+1 bytes sí D = 0
D+2, si M < D

Fecha y hora DATE Fecha, con rango desde '1000-01-01' a '9999-12-31' con formato 'YYYY-MM-DD' 3 bytes
DATETIME Fecha y hora, con rango desde '1000-01-01 00:00:00' a '9999-12-31 23:59:59' con formato 'YYYY-MM-DD HH:MM:SS' 8 bytes
TIMESTAMP[(M)] Fecha y hora, el rango va desde '1970-01-01 00:00:01' UTC a '2038-01-19 03:14:07' UTC. El formato de almacenamiento depende del tamaño del campo 4 bytes
TIME Hora, con rango desde '-838:59:59' a '838:59:59', con el formato 'HH:MM:SS' 3 bytes
YEAR[(2|4)] Año en dos o cuatro dígitos, para cuatro dígitos, el rango es de 1901 a 2155, para dos dígitos es de 70 a 69 (representando desde 1070 a 2069) 1 byte
Cadenas de caracteres CHAR (M) Almacena una cadena de longitud fija. La cadena podrá contener desde 0 a 255 caracteres M bytes (tanto si se ocupan como si no)
VARCHAR (M) Almacena una cadena de longitud variable. La cadena podrá contener desde 0 a 255 caracteres Tamaño contenido del campo más 1 byte
BINARY (M) Similar a CHAR, excepto que contiene cadenas de caracteres binarias en lugar de cadenas no binarias. Es decir, que contienen cadenas de bytes en lugar de cadenas de caracteres. Esto significa que no tienen conjunto de caracteres, y la comparación y ordenación se basa en los valores numéricos de los bytes en los valores M bytes, 0 <= M <= 255
VARBINARY (M) Similar a VARCHAR, excepto que contiene cadenas de caracteres binarias en lugar de cadenas no binarias. Es decir, que contienen cadenas de bytes en lugar de cadenas de caracteres. Esto significa que no tienen conjunto de caracteres, y la comparación y ordenación se basa en los valores numéricos de los bytes en los valores Tamaño contenido del campo más 1 byte
TEXT Tipo de datos no binario que puede contener una cantidad variable de datos. Sirve para almacenar texto (gran cantidad). Hasta 65535 caracteres Longitud + 2 bytes, mientras L < 216
TINYTEX Tipo de datos no binario que puede contener una cantidad variable de datos. Sirve para almacenar texto (gran cantidad). Hasta 255 caracteres Longitud + 1 bytes, mientras L < 28
MEDIUMTEXT Tipo de datos no binario que puede contener una cantidad variable de datos. Sirve para almacenar texto (gran cantidad). Hasta 16.777.215 caracteres Longitud + 3 bytes, mientras L < 224
LONGTEXT Tipo de datos no binario que puede contener una cantidad variable de datos. Sirve para almacenar texto (gran cantidad). Hasta 4.294.967.295 caracteres Longitud + 4 bytes, mientras L < 232
BLOB Tipo de datos binario que puede contener una cantidad variable de datos. Permite almacenar ficheros (de cualquier tipo). Hasta 65535 bytes Longitud + 2 bytes, mientras L < 216
TINYBLOB Tipo de datos binario que puede contener una cantidad variable de datos. Permite almacenar ficheros (de cualquier tipo). Hasta 255 bytes Longitud + 1 bytes, mientras L < 28
MEDIUMBLOB Tipo de datos binario que puede contener una cantidad variable de datos. Permite almacenar ficheros (de cualquier tipo). Hasta 16.777.215 bytes Longitud + 3 bytes, mientras L < 224
LONGBLOB

Tipo de datos binario que puede contener una cantidad variable de datos. Permite almacenar ficheros (de cualquier tipo). Hasta 4.294.967.295 bytes

Longitud + 4 bytes, mientras L < 232
ENUM (valor1, valor2, ...) Es un tipo de datos de cadena con un valor elegido de una lista de valores permitidos que se enumeran explícitamente en la especificación de la columna al crear la tabla. Acepta hasta 65535 valores distintos 1 ó 2 bytes, dependiendo del número de valores de ENUM
SET (valor1, valor2, ...) Es un tipo de datos de cadena que puede contener ninguno, uno ó varios valores de una lista previamente establecida (al crear la tabla). La lista puede tener un máximo de 64 valores 1, 2, 3, 4, ó 8 bytes, dependiendo del número de miembros del conjunto
Tipos de datos espaciales (Open Gis) (*) GEOMETRY Geometry es la clase base de la jerarquía para el modelo geométrico OpenGIS. Es una clase no instanciable, pero tiene unas cuantas propiedades que son comunes para todos los valores geométricos creados con cualquiera de las subclases de Geometry
POINT Un POINT es una geometría que representa una ubicación única en un espacio de coordenadas (valor de la coordenada X, valor de la coordenada Y)
LINESTRING Un LINESTRING es una Curva con interpolación linear entre puntos. Un LINESTRING tiene coordenadas de segmentos, definidos por cada par consecutivo de puntos
POLYGON Un POLYGON es una superficie planar que representa una geometría multicara. Se define por un único límite exterior y cero o más límites interiores, donde cada límite interior define un agujero en el polígono
MULTIPOINT Un MULTIPOINT es una colección de geometrías compuesta de elementos Point. Los puntos no están conectados ni ordenados de ningún modo
MULTILINESTRING Una MULTILINESTRING es una colección de geometrías MultiCurve compuesta de elementos LINESTRING
MULTIPOLYGON Un MULTIPOLYGON es un objeto MultiSurface compuesto de elementos POLYGON
GEOMETRYCOLLECTION

Una GEOMETRYCOLLECTION es una geometría que consiste en una colección de una o más geometrías de cualquier clase.

Todos los elementos en una GEOMETRYCOLLECTION deben estar en el mismo Sistema de Referencia Espacial (es decir, en el mismo sistema de coordenadas)

CURVE Una clase CURVE es una geometría unidimensional, normalmente representada por una secuencia de puntos. Las subclases particulares de CURVE definen el tipo de interpolación entre puntos. CURVE es una clase no instanciable
MULTICURVE Una clase MULTICURVE es una colección de geometrías que se compone de elementos CURVE. MULTICURVE es una clase no instanciable
  SURFACE Una clase SURFACE es una geometría bidimensional. Es una clase no instanciable. Su única subclase instanciable es POLYGON

(*) MySQL implementa extensiones espaciales siguiendo la especificación del Consorcio Open GIS (OGC), un consorcio internacional de más de 250 compañías, agencias y universidades que participan en el desarrollo de soluciones conceptuales públicamente disponibles y que pueden ser útiles para todo tipo de aplicaciones que manejan datos espaciales. MySQL implementa un subconjunto del entorno SQL con Tipos Geométricos propuesto por el OGC. Este término se refiere a un entorno SQL que ha sido extendido con un conjunto de tipos geométricos. Una columna SQL con valores geométricos se implementa como una columna que tiene un tipo geométrico. Las especificaciones describen un conjunto de tipos geométricos SQL, así como las funciones para analizar y crear valores geométricos sobre esos tipos.

Ejemplo de creación de tablas en MySQL

Os indicamos algunos ejemplos de creación de tablas con algunos de los tipos de datos anteriores:

  1. Tabla para guardar documentos (gestor documental):
CREATE TABLE documento (
  codigo int(10) unsigned NOT NULL AUTO_INCREMENT,
  documento longblob,
  fechaalta datetime DEFAULT NULL,
  version varchar(40) DEFAULT NULL,
  nombre varchar(150) DEFAULT NULL,
  ruta varchar(255) DEFAULT NULL,
  caracteristicas text,
  codusuarioa int(10) unsigned DEFAULT NULL,
  codusuariom int(10) unsigned DEFAULT NULL,
  fechaa datetime DEFAULT NULL,
  fecham datetime DEFAULT NULL,
  codigoregistro int(10) unsigned DEFAULT NULL,
  ventana varchar(50) DEFAULT NULL,
  guardarbd char(1) DEFAULT NULL,
  PRIMARY KEY (codigo)
) ENGINE=InnoDB DEFAULT CHARSET=latin1'
  1. Tabla de usuarios (login) para acceso a aplicación:

CREATE TABLE usuario (
  codigo int(10) unsigned NOT NULL AUTO_INCREMENT,
  nick varchar(20) NOT NULL DEFAULT '',
  contrasena varchar(100) DEFAULT NULL,
  codusuarioa int(10) unsigned DEFAULT NULL,
  codusuariom int(10) unsigned DEFAULT NULL,
  fechaa datetime DEFAULT NULL,
  fecham datetime DEFAULT NULL,
  tipo varchar(20) DEFAULT NULL,
  administrador char(1) DEFAULT NULL,
  modificacion char(1) DEFAULT NULL,
  nombre varchar(100) DEFAULT NULL,
  fecha datetime DEFAULT NULL,
  accesoweb char(1) DEFAULT NULL,
  codigodepartamento int(10) unsigned DEFAULT NULL,
  email varchar(150) DEFAULT NULL,
  prioridad int(10) unsigned DEFAULT NULL,
  telefono varchar(15) DEFAULT NULL,
  activo char(1) DEFAULT NULL,

  PRIMARY KEY (codigo),
  UNIQUE KEY usuario_nick (nick)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
  1. Tabla de facturas, para software de facturación:
CREATE TABLE factura (
  codigo int(10) unsigned NOT NULL AUTO_INCREMENT,
  numero varchar(15) DEFAULT NULL,
  importetotal float(19,4) DEFAULT NULL,
  baseimponible float(19,4) DEFAULT NULL,
  porcentajeiva float(19,4) DEFAULT NULL,
  importeiva float(19,4) DEFAULT NULL,
  porcentajedescuento float(19,4) DEFAULT NULL,
  importedescuento float(19,4) DEFAULT NULL,
  codigocliente int(10) unsigned NOT NULL DEFAULT '0',
  fecha datetime DEFAULT '0000-00-00 00:00:00',
  cobrado char(1) DEFAULT NULL,
  observacion varchar(255) DEFAULT NULL,
  importecobrado float(19,4) DEFAULT NULL,
  codusuarioa int(10) unsigned DEFAULT NULL,
  codusuariom int(10) unsigned DEFAULT NULL,
  fechaa datetime DEFAULT NULL,
  fecham datetime DEFAULT NULL,
  contabiliza char(1) DEFAULT NULL,
  imprimida char(1) DEFAULT NULL,
  enviada char(1) DEFAULT NULL,
  fechaenvio datetime DEFAULT NULL,
  piefactura text,
  fechavencimiento datetime DEFAULT NULL,
  serie char(2) NOT NULL DEFAULT '',
  PRIMARY KEY (codigo),
  UNIQUE KEY Indice_Numero_Factura (numero) USING HASH
) ENGINE=InnoDB DEFAULT CHARSET=latin1
  1. Tabla detalle (líneas) de factura, para software de facturación:
CREATE TABLE facturadetalle (
  codigo int(10) unsigned NOT NULL AUTO_INCREMENT,
  codigofactura int(10) unsigned DEFAULT NULL,
  codigomaterial int(10) unsigned DEFAULT NULL,
  concepto text,
  cantidad float(19,4) DEFAULT NULL,
  importe float(19,4) DEFAULT NULL,
  precio float(19,4) DEFAULT NULL,
  porcentajedto float(19,4) DEFAULT NULL,
  codigoparte int(10) unsigned DEFAULT NULL,
  codigopartedetalle int(10) unsigned DEFAULT NULL,
  numeroparte int(10) unsigned DEFAULT NULL,
  parte char(1) DEFAULT NULL,
  presupuesto char(1) DEFAULT NULL,
  material char(1) DEFAULT NULL,
  mantenimiento char(1) DEFAULT NULL,
  codusuarioa int(10) unsigned DEFAULT NULL,
  codusuariom int(10) unsigned DEFAULT NULL,
  fechaa datetime DEFAULT NULL,
  fecham datetime DEFAULT NULL,
  PRIMARY KEY (codigo)
) ENGINE=InnoDB AUTO_INCREMENT=1133 DEFAULT CHARSET=latin1

Nota: para ejecutar estas consultas SQL podremos utilizar MySQL Query Browser (herramienta gratuita de MySQL) o cualquier software que permita ejecutar consultas SQL contra MySQL, como por ejemplo nuestro software gratuito y 100% Open Source:

AjpdSoft Administración Bases de Datos

 

Artículos relacionados

Créditos

Artículo realizado íntegramente por Alonsojpd miembro fundador del proyecto AjpdSoft.



Nota: Revisado por AjpdSoft el 09-09-2009.
Anuncios


Enviado el Miércoles, 09 septiembre a las 01:24:37 por ajpdsoft
Visita nuestro nuevo sitio web con programas y contenidos actualizados: Proyecto A