Foro de elhacker.net

Programación => Bases de Datos => Mensaje iniciado por: Skeletron en 3 Agosto 2009, 03:22 am



Título: [MySQL]Tipos y atributos para guardar e-mail
Publicado por: Skeletron en 3 Agosto 2009, 03:22 am
Hola señores..
Estoy haciendo una base de datos, en ella se guardaran e-mails y la identificacion del e-mail(numerica auto creciente)..
Es simplemente para los que quieran suscribirse a noticias de mi web...

Soy muy novato con MySQL y bases de datos..

Mi pregunta es:
El campo a guardar el e-mail, tiene que ser un VARCHAR??? de 30 caracteres es basta no?
Tiene que ir algun atributo? indice?? algo?


Título: Re: [MySQL]Tipos y atributos para guardar e-mail
Publicado por: [u]nsigned en 3 Agosto 2009, 03:30 am
Bueno, el ID (auto increment) lo tendrias que usar como PRIMARY KEY, y campo donde se guardan lo mails como UNIQUE para que no existan dos repetidos. Podría ser un varchar de 80 a 120 caracteres. Considera que un campo tipo VARCHAR ocupa la longitud definida en la BBDD mas 1 byte. Uno varchar(120) ocuparía 121 bytes.

También podes poner ambos campos como NOT NULL para que no puedan estar vacios.

Saludos


Título: Re: [MySQL]Tipos y atributos para guardar e-mail
Publicado por: Skeletron en 3 Agosto 2009, 03:39 am
Quien va a tener un e-mail de 80 caracteres??
No será mucho???


No encuentro ningun NOT NULL...
Estoy con PHPMyAdmin


Título: Re: [MySQL]Tipos y atributos para guardar e-mail
Publicado por: Pablo Videla en 3 Agosto 2009, 04:02 am
Código
  1.  
  2. CREATE TABLE mail(id NUMBER AUTO_INCREMENT, mail VARCHAR(150) NOT NULL,
  3. CONSTRAINT pk_mail PRIMARY KEY(id))
  4.  


Título: Re: [MySQL]Tipos y atributos para guardar e-mail
Publicado por: [u]nsigned en 3 Agosto 2009, 04:02 am
Que versión de phpMyAdmin usas?

Te tiene que aparecer como NULO en caso de que lo tengas en español.  :rolleyes:

(http://img18.imageshack.us/img18/1739/sinttulo1kwl.jpg)

Código
  1. CREATE TABLE IF NOT EXISTS `registrados` (
  2.  `id` INT(11) NOT NULL AUTO_INCREMENT,
  3.  `mail` VARCHAR(80) NOT NULL,
  4.  PRIMARY KEY (`id`),
  5.  UNIQUE KEY `mail` (`mail`)
  6. ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1

Donde 'registrados' sería el nombre de la tabla.
Para salir del paso hace esto: Guarda ese codigo como registrados.sql, metete a la base de datos que usas (creas una si no tenes), anda a importar (por la pestaña de arriba) y haces click en el boton "Seleccionar archivo" y elejis el que create recién. y le das a "continuar". Así te queda la tabla hecha.

Lo ideal seria que te leas algún tuto de PHP+MySQL  ;)

Saludos


Título: Re: [MySQL]Tipos y atributos para guardar e-mail
Publicado por: Pablo Videla en 3 Agosto 2009, 04:04 am
Respuesta mas completa imposible  :xD  ;-)


Título: Re: [MySQL]Tipos y atributos para guardar e-mail
Publicado por: Skeletron en 3 Agosto 2009, 04:35 am
Perfecto..
Lo que creé está exactamente igual..

A diferencia que mail tiene: varchar(32)
No 80..
si alguien coloca un e-mail de 10 caracteres, ocupará la misma cantidad de espacio tanto en maximo 80 como en maximo 32??


Título: Re: [MySQL]Tipos y atributos para guardar e-mail
Publicado por: [u]nsigned en 3 Agosto 2009, 05:45 am
Perfecto..
Lo que creé está exactamente igual..

A diferencia que mail tiene: varchar(32)
No 80..
si alguien coloca un e-mail de 10 caracteres, ocupará la misma cantidad de espacio tanto en maximo 80 como en maximo 32??

Ocupara 11.

La longitud es variable hasta el máximo dado. Y ocupa un byte mas, porque ese byte es usado para guardar la longitud de dicha cadena.

Otra cosa...el ususario puede ingresar lo que quiera en un textbox, pero de ahi a lo que se ingrese a SQL depende de vos. Digo esto porque deberias usar algun mecanismo anti inyeccionen SQL.  ;)

Saludos


Título: Re: [MySQL]Tipos y atributos para guardar e-mail
Publicado por: SnakeDrak en 3 Agosto 2009, 06:45 am
Hola,

Si vas a tener muchas filas indexadas en un varchar, te recomiendo usar char que indexa mejor aunque gaste más espacio (hoy día con los HD existentes no hay problemas en eso), el proceso de consulta a un char es mucho mayor que a un varchar, ya que si tienes un CHAR 20 será siempre de 20 de logintud mientras que el varchar varía según la cadena que contenga.

Sin duda yo recomiendo usar CHAR, procesa más rápido las consultas y con los HD de hoy día dudo que el espacio sea un problema.

Yo por ejemplo tengo unas tablas con 500 000 000 de filas y noté mucho la rapidez de las consultas al utilizar CHAR.

Saludos!


Título: Re: [MySQL]Tipos y atributos para guardar e-mail
Publicado por: Skeletron en 3 Agosto 2009, 22:22 pm
Alguien mas opina lo que dijoSnakeDrak???
Algunas sentencias cambian al cambiar ello???

Realmente necesito muchhhaaa velocidad...


Título: Re: [MySQL]Tipos y atributos para guardar e-mail
Publicado por: SnakeDrak en 3 Agosto 2009, 23:13 pm
Hola,

Lo suyo es usar CHAR, ahora si realmente tienes el espacio de la base de datos muy limitado y crees que puedes llenarlo todo, entonces usar VARCHAR.

Realmente VARCHAR solo se usa cuando el espacio es un factor importante.

Pon en google, diferencia de varchar a char y te la explican, pero vamos si tienes paco en un varchar de 20 pues ocupará 5, y en un char ocupará 20, pero indexa mejor un char ya que indexará los 20 valores siempre, a diferencia del varchar.. que uno puede tener 5 y otro 15, la velocidad es mucho mayor con CHAR, pero vamos esto solo se nota en tablas como la mia de 500 millones de filas.

Saludos!


Título: Re: [MySQL]Tipos y atributos para guardar e-mail
Publicado por: Skeletron en 4 Agosto 2009, 02:53 am
Estuve leyendo algo:
http://dev.mysql.com/doc/refman/5.0/es/char.html

Ahora buscando algo que hablan de la diferencia de velocidad.. porque no encuentro nada.


EDITO:
Aca hablan de lo que dices...
Citar
Tu primer impulso sería elegir VARCHAR y sacar provecho del menor espacio de almacenamiento requerido en la tabla con el objetivo de aumentar la velocidad en las búsquedas tal como yo lo describí anteriormente pero VARCHAR es la excepción a la regla. Cuando usas VARCHAR en una tabla (al igual que ciertas columnas creadas para grandes cantidades de texto y valores binarios) el ancho de cada fila se hace inconsistente. Una fila podría tener 40 bytes de longitud mientras que otra sólo 8. MySQL puede manejar esto almacenando la longitud de la fila en su sistema de archivos pero el servidor debe leer la longitud de cada fila antes de buscarla y continuar con la siguiente fila, donde deberá verificar la longitud otra vez, ad nauseam. Al definir campos de texto como CHAR ocuparemos más espacio en el disco rígido pero habrá un aumento en la velocidad ya que el servidor sabrá que cada una de las filas tiene exactamente el mismo tamaño (por ejemplo 120 bytes), permitiéndole que busque entre las filas sin verificar su longitud primero. Por tal motivo, recomiendo que definas tus campos de texto como CHAR para mejorar la performance de las consultas, a menos que el espacio de almacenamiento sea una consideración importante (y con los precios de los discos de hoy en día esta no es una gran preocupación, principalmente con nuestra aplicación).
http://es.answers.yahoo.com/question/index?qid=20070423094137AARMM9p


Título: Re: [MySQL]Tipos y atributos para guardar e-mail
Publicado por: [u]nsigned en 4 Agosto 2009, 03:12 am
Skeletron:

Mira, con varchar gastas menos espacio en HD, y con char ve mas rapido el script. Pero usa el que mas te guste.

Con respecto a tu duda original: es indistinto desde el punto de vista la de la programacion, se usan las mismas funciones de (My)SQL y PHP. Solo cambia el tipo de dato  ;)

Saludos