jueves, 8 de noviembre de 2012

59 - Tipos de datos blob y text.


Los tipos "blob" o "text" son bloques de datos. Tienen una longitud de 65535 caracteres.

Un "blob" (Binary Large Object) puede almacenar un volumen variable de datos. La diferencia entre "blob" y "text" es que "text" diferencia mayúsculas y minúsculas y "blob" no; esto es porque "text" almacena cadenas de caracteres no binarias (caracteres), en cambio "blob" contiene cadenas de caracteres binarias (de bytes).

No permiten valores "default".

Existen subtipos:

- tinyblob o tinytext: longitud máxima de 255 caracteres.
- mediumblob o mediumtext: longitud de 16777215 caracteres.
- longblob o longtext: longitud para 4294967295 caracteres.

Se utiliza este tipo de datos cuando se necesita almacenar imágenes, sonidos o textos muy largos.

Un video club almacena la información de sus películas en alquiler en una tabla denominada "peliculas".

Además del título, actor y duración de cada película incluye un campo en el cual guarda la sinopsis de cada una de ellas.

La tabla contiene un campo de tipo "text" llamado "sinopsis":

- codigo: int unsigned auto_increment, clave primaria,
- nombre: varchar(40),
- actor: varchar(30),
- duracion: tinyint unsigned,
- sinopsis: text,

Se ingresan los datos en un campo "text" o "blob" como si fuera de tipo cadena de caracteres, es decir, entre comillas:

 insert into peliculas values(1,'Mentes que brillan','Jodie Foster',120,
 'El no entiende al mundo ni el  mundo lo entiende a él; es un niño superdotado. La escuela 
especial a la que asiste tampoco resuelve los problemas del niño. Su madre hará todo lo que esté a 
su alcance para ayudarlo. Drama');

Para buscar un texto en un campo de este tipo usamos "like":

 select * from peliculas
  where sinopsis like '%Drama%';

No se pueden establecer valores por defecto a los campos de tipo "blob" o "text", es decir, no aceptan la cláusula "default" en la definición del campo.


PROBLEMA RESUELTO

Un video club almacena la información de sus películas en alquiler en una tabla denominada "peliculas".

 Además del título, actor y duración de cada película incluye un campo en el cual guarda la sinopsis de cada una de ellas.

Eliminamos la tabla si existe:

 drop table if exists peliculas;

Creamos la tabla con un campo de tipo "text" llamado "sinopsis":

 create table peliculas(
  codigo int unsigned auto_increment,
  nombre varchar(40),
  actor varchar(30),
  duracion tinyint unsigned,
  sinopsis text,
  primary key (codigo)  
 );

Ingresamos algunos registros:

 insert into peliculas values(1,'Mentes que brillan','Jodie Foster',120,
 'El no entiende al mundo ni el  mundo lo entiende a él, es un niño superdotado. 
  La escuela especial a la que asiste tampoco resuelve los problemas del niño.
  Su madre hará todo lo que esté a su alcance para ayudarlo. Drama');

 insert into peliculas values(2,'Charlie y la fábrica de chocolate','J. Deep',120, 
 'Un niño llamado Charlie tiene la ilusión de encontrar uno de los 5 tickets del 
  concurso para entrar a la fabulosa fábrica de chocolates del excéntrico Willy Wonka 
  y descubrir el misterio de sus golosinas. Aventuras'); 

insert into peliculas values(3,'La terminal','Tom Hanks',180, 'Sin papeles y esperando que el gobierno resuelva su situación migratoria, Victor convierte el aeropuerto de Nueva York en su nuevo hogar trasformando la vida de los empleados del lugar. Drama');


Para buscar todas las películas que en su campo "sinopsis" contengan el texto "Drama" usamos "like": 

 select * from peliculas
  where sinopsis like '%Drama%';

Podemos buscar la película que incluya en su sinopsis el texto "chocolates":

 select * from peliculas
  where sinopsis like '%chocolates%'; 



PROBLEMA PROPUESTO

Una inmobiliaria guarda los datos de sus inmuebles en venta en una tabla llamada "inmuebles".

1- Elimine la tabla si existe:
 
2- Cree la tabla:
 create table inmuebles(
  codigo int unsigned auto_increment,
  domicilio varchar(30),
  barrio varchar(20),
  detalles text,
  primary key(codigo)
 );

3- Ingrsee algunos registros:
 insert into inmuebles values(1,'Colon 123','Centro','patio, 3 dormitorios, garage doble, pileta, 
asador, living, cocina, comedor, escritorio, 2 baños');
 insert into inmuebles values(2,'Caseros 345','Centro','patio, 2 dormitorios, cocina- comedor, 
living');
 insert into inmuebles values(3,'Sucre 346','Alberdi','2 dormitorios, problemas de humedad');
 insert into inmuebles values(4,'Sarmiento 832','Gral. Paz','3 dormitorios, garage, 2 patios');
 insert into inmuebles values(5,'Avellaneda 384','Centro',' 2 patios, 2 dormitorios, garage');

4- Busque todos los inmuebles que tengan "patio":
 


Otros problemas:

 

Una librería guarda la información de sus libros en una tabla llamada "libros".

1- Elimine la tabla si existe:
 
2- Cree la tabla con un campo "blob" en el cual se pueda almacenar los temas principales que trata 
el libro:
 create table libros(
  codigo int unsigned auto_increment,
  titulo varchar(40),
  autor varchar(30),
  editorial varchar(20),
  temas blob,
  precio decimal(5,2) unsigned,
  primary key(codigo)
 );

3- Ingrese algunos registros.:
 insert into libros values(1,'Aprenda PHP','Mario Molina','Emece',
 'Instalacion de PHP.
  Palabras reservadas.
  Sentencias basicas.
  Definicion de variables.',
 45.6);
 
 insert into libros values(2,'Java en 10 minutos','Mario Molina','Planeta',
 'Instalacion de Java en Windows.
  Instalacion de Java en Linux.
  Palabras reservadas.
  Sentencias basicas.
  Definir variables.',
 55);

 insert into libros values(3,'PHP desde cero','Joaquin Perez','Planeta',
 'Instalacion de PHP.
  Instrucciones basicas.
  Definición de variables.',
 50);

4- Busque todos los libros sobre "PHP" que incluyan el tema "variables":
 
5- Busque los libros de "Java" que incluyan el tema "Instalacion" o "Instalar":
 

2 comentarios:

  1. Nunca está de más saber estas cosas. Gracias, John

    ResponderEliminar
  2. Excelente aporte. De mi parte me gustaria saber como conectar mas de un usuario al servidor de MysqlComnunity server, agradeceria su colaboracion

    ResponderEliminar