Foro de elhacker.net

Programación => Bases de Datos => Mensaje iniciado por: kinos en 14 Agosto 2010, 00:58 am



Título: Cual es el mejor campo o tipo de dato para guardar url's en mysql?
Publicado por: kinos en 14 Agosto 2010, 00:58 am
Hola buenas:

   Me gustaría saber cual es la mejor opción para guardar url's en una tabla de mysql.

   Con varchar(255) esta muy bien pero es de longitud muy escasa. Estoy utilizando además un campo de tipo entero que contiene el codigo hash de la url para agilizar.

   Otra opción sería usar Text. Pero... ¿se puede usar Unique e Index para este tipo de dato?
¿Podría usar un index compuesto por el codigo hash y la variable de tipo Text?
¿Mysql permite varchar mayor de 255?

 :huh:


Título: Re: Cual es el mejor campo o tipo de dato para guardar url's en mysql?
Publicado por: :ohk<any> en 16 Agosto 2010, 14:43 pm
Si quieres guardar grandes cantidades de texto lo que sea, usa mediumtext o longtext.

Saludos


Título: Re: Cual es el mejor campo o tipo de dato para guardar url's en mysql?
Publicado por: Nakp en 16 Agosto 2010, 19:14 pm
te parece binario? usa COMPRESS() en un varbinary o similar :P para leerlo usa UNCOMPRESS()


Título: Re: Cual es el mejor campo o tipo de dato para guardar url's en mysql?
Publicado por: Dznp en 16 Agosto 2010, 19:32 pm
Claro que permite Varchar mayor de 255  ;)
Igual podrías usar text.


Título: Re: Cual es el mejor campo o tipo de dato para guardar url's en mysql?
Publicado por: Shell Root en 16 Agosto 2010, 19:36 pm
Sería bueno si le respondieras la pregunta que realizo acerca de ese tipo de dato.
... Otra opción sería usar Text. Pero... ¿se puede usar Unique e Index para este tipo de dato?...


Título: Re: Cual es el mejor campo o tipo de dato para guardar url's en mysql?
Publicado por: kinos en 16 Agosto 2010, 20:09 pm
Citar
te parece binario? usa COMPRESS() en un varbinary o similar :P para leerlo usa UNCOMPRESS()

Eso también podría ser una solución. Pero lo de compress no me gusta porque cómo tengas que comparar las url's y tengas que andar descomprimiendo y comprimiendo...

He mirado el tipo de dato TEXT y creo que caben unos 4 Gigas. Estoy utilizando este.
Lo que me fastidia... la clausula UNIQUE, porque la puedes utilizar (INDEX también) pero limitada hasta un tamaño por ejemplo:

Código
  1. ...
  2. UNIQUE INDEX `u_url` USING HASH (`url`(333) ASC) ,
  3. ...

Tengo que comparar si ya he introducido la url para no volver a introducirla. Lo único que se me ocurre es guardar en la tabla un hash de la url y en otra columna guardar la url en un TEXT.
Entonces cuando tenga que comprobar si ya ha sido introducida, calculo el hash de la url a introducir y hacemos:

Código
  1. SELECT url FROM tabla WHERE url_hash=345123514;
  2.  
  3. --url es TEXT, me devolvera las que tengan el mismo hash que se supone deberian ser pocas.
  4.  
Y ahora comparar caracter a caracter todas las url's que me devuelve con la que en teoría voy a introducir.

Se os ocurre una solución mejor?

Saludos.