Jump to content


Photo

Mysql - Tipos De Campos


  • Faça o login para participar
16 replies to this topic

#1 Alexx Ares

Alexx Ares

    Doutor

  • Usuários
  • 921 posts
  • Sexo:Masculino
  • Localidade:Santos - SP

Posted 13/01/2005, 19:11

Pessoal, pesquisei mas ainda tenho dúvidas.. o próprio manual é muito "técnico" e me confundiu em alguns pontos... portanto, estou aqui!
:P

Preciso saber qual o campo ideal para os seguintes tipos de dados:

- Números com casas decimais ( 1234564,1234412 )
- Txtos muito, mas muito grandes ( por exemplo, código fonte de páginas html, etc. )

E tambem qual o limite ( em bytes e/ou número de caracteres ) e qual dos tipos é melhor para armazenar dados de diferentes tamanhos ( ex: numa linha, um texto com 10 caracteres em moutra com 1000, bem como um número simples "123" e um complexo "1234567.123456789"...
:(

Se puderem me explicar agradeço!

Obrigado!!

:lol: (y)
||| PENSE NISSO ||| O ser humano, dizem, deve dormir 8 horas por dia. Isso equivale a 1 terço do seu dia dormindo. Agora imagine a seguinte situação: você, com 75 anos, prestes a morrer, olha para trás e percebe que dormiu 1 terço da sua vida, ou seja, 25 anos. Cara... 25 ANOS DORMINDO !!! Se você tem menos de 25 anos, simplesmente você vai dormir mais do que viveu até hoje!!! Pense nisso... e durma menos.

#2 ThalesWeb

ThalesWeb

    Veterano

  • Usuários
  • 1435 posts
  • Sexo:Masculino
  • Localidade:São Paulo - SP

Posted 13/01/2005, 19:28

http://www.mysqlbras...lumn_types.html

Para casas decimais, pelo menos em java, o usado é float e double, em mysql eu coloco text na maioria das vezes.

Campos com muito conteúdo, o ideal é text, pois seu limite de caracteres é o maior (65535).
Thales Santos

#3 Alexx Ares

Alexx Ares

    Doutor

  • Usuários
  • 921 posts
  • Sexo:Masculino
  • Localidade:Santos - SP

Posted 13/01/2005, 19:39

Dark,

Esse link é uma cópia do manual, ja vi isso no mysql.com e não entendi as diferenças entre float e decimal.

Os numeros que vou armazenar são monetarios ( positivos e negativos, com até 6 casas antes e 6 depois da virgula assim: 123456.654321 ), e aconselham o decimal, mas queria entender porque.

:o
||| PENSE NISSO ||| O ser humano, dizem, deve dormir 8 horas por dia. Isso equivale a 1 terço do seu dia dormindo. Agora imagine a seguinte situação: você, com 75 anos, prestes a morrer, olha para trás e percebe que dormiu 1 terço da sua vida, ou seja, 25 anos. Cara... 25 ANOS DORMINDO !!! Se você tem menos de 25 anos, simplesmente você vai dormir mais do que viveu até hoje!!! Pense nisso... e durma menos.

#4 Balala

Balala

    What you want for yourself?

  • Ex-Admins
  • 3357 posts
  • Sexo:Não informado
  • Localidade:Jaraguá do Sul - SC
  • Interesses:http://forum.wmonline.com.br/index.php?showtopic=5792

Posted 13/01/2005, 20:01

O que você pode fazer é ver na prática. Crie uma tabela com os tipos diferentes de campos e faça uma consulta entre elas, e veja o tempo de execução de cada uma e o tamanho que as tabelas ocupão (y)
Balala - Admin Geral Webfórum - Retired
Twitter
Stop Spreading Lies!
Posted Image

#5 Alexx Ares

Alexx Ares

    Doutor

  • Usuários
  • 921 posts
  • Sexo:Masculino
  • Localidade:Santos - SP

Posted 13/01/2005, 23:09

Mas mesmo assim não estou conseguindo ver a diferença!

Por exemplo, qual a diferença entre utilizar um tinyint e um int(1) ?

Ambos não terão apenas 1 byte? Ou mesmo assim, o int vai manter os 4 bytes?

E também o decimal para float, não entendo a diferença...

:ph34r:

-----------------------

Achei um artigo muito bom, de facil leitura, com exemplos e tudo mais.

Pena que está bem resumido, faltam algumas coisas... mas já da uma ótima noção, principalmente para novatos com MySQL!!

http://www.linuxnare.../mysqlbasic.php

:lol: (y)

Edição feita por: Balala, 14/01/2005, 07:03.

||| PENSE NISSO ||| O ser humano, dizem, deve dormir 8 horas por dia. Isso equivale a 1 terço do seu dia dormindo. Agora imagine a seguinte situação: você, com 75 anos, prestes a morrer, olha para trás e percebe que dormiu 1 terço da sua vida, ou seja, 25 anos. Cara... 25 ANOS DORMINDO !!! Se você tem menos de 25 anos, simplesmente você vai dormir mais do que viveu até hoje!!! Pense nisso... e durma menos.

#6 Prog

Prog

    ...

  • Ex-Admins
  • 3761 posts
  • Sexo:Masculino
  • Localidade:Rio de Janeiro/RJ
  • Interesses:TI, Software Livre, Design Digital e Rock'n'Roll.

Posted 14/01/2005, 10:02

Sobre o Decimal e Float...

O DECIMAL tem uma capacidade de armazenamento bem maior. O FLOAT armazena até 4 bytes, enquanto que o DECIMAL vai armazenar quanto vc especificar. Uma outra diferença é que o DECIMAL armazena o valor como uma string, evitando perda de informação.

Leia tambem:
http://dev.mysql.com...sing_types.html
http://dev.mysql.com...eric_types.html
------
Mero mortal!

#7 Alexx Ares

Alexx Ares

    Doutor

  • Usuários
  • 921 posts
  • Sexo:Masculino
  • Localidade:Santos - SP

Posted 14/01/2005, 10:33

olá Prog,

Eu li e reli o manual varias vezes... :ph34r:

A duvida é que:

como vc disse, float não aceita mais de 4 bytes... e eu, pelo jeito erroneamente, já utilizei váriooos campos float(6) pensando na seguinte lógica 1234.56

E pior q deu certo!! :o

Não devria dar erro? pois 4 bytes, teria que ser 12.34, ou to completamente perdido nisso?? :wacko:

É esse tipo de coisa que queria deixar claro na minha mente, não preocupado só com espaço, velocidade, mas com o funcionamento correto.

:lol: (y)
||| PENSE NISSO ||| O ser humano, dizem, deve dormir 8 horas por dia. Isso equivale a 1 terço do seu dia dormindo. Agora imagine a seguinte situação: você, com 75 anos, prestes a morrer, olha para trás e percebe que dormiu 1 terço da sua vida, ou seja, 25 anos. Cara... 25 ANOS DORMINDO !!! Se você tem menos de 25 anos, simplesmente você vai dormir mais do que viveu até hoje!!! Pense nisso... e durma menos.

#8 Prog

Prog

    ...

  • Ex-Admins
  • 3761 posts
  • Sexo:Masculino
  • Localidade:Rio de Janeiro/RJ
  • Interesses:TI, Software Livre, Design Digital e Rock'n'Roll.

Posted 14/01/2005, 10:56

Este é o tamanho que, na verdade, ele ocupa fisicamente no disco... o tamanho da informação, propriamente dito, é outro. Acho que com mais esta parte do manual, suas dúvidas serão sanadas.

Leia este:
http://www.sourcekeg...lumn_types.html
Especificamente a parte referente a FLOAT e DECIMAL.
------
Mero mortal!

#9 Alexx Ares

Alexx Ares

    Doutor

  • Usuários
  • 921 posts
  • Sexo:Masculino
  • Localidade:Santos - SP

Posted 14/01/2005, 11:07

hehehe.. ja tinha visto também... então era isso que me confundia...

Por exemplo:

um campo int, pelo manual, ocupa 4 bytes.

Mas ele pode ter 1, 5, 10 caracteres?

O mesmo vale para outros... ?

E, quando gravo DECIMAL ( texto ) , por exemplo, decimal(5), o sinal de - e o . estão inclusos desse 5? E para Float?

Ufa, ta ficando tudo mais claro para mim... :rolleyes:

Ah, outra coisa: é melhor, por questões de futuros "upgrades", iniciar um campo tipo TINYINT e com o tempo mudr para INT ou começa com INT(2) e com o tempo mudar para INT(10) ??
||| PENSE NISSO ||| O ser humano, dizem, deve dormir 8 horas por dia. Isso equivale a 1 terço do seu dia dormindo. Agora imagine a seguinte situação: você, com 75 anos, prestes a morrer, olha para trás e percebe que dormiu 1 terço da sua vida, ou seja, 25 anos. Cara... 25 ANOS DORMINDO !!! Se você tem menos de 25 anos, simplesmente você vai dormir mais do que viveu até hoje!!! Pense nisso... e durma menos.

#10 Prog

Prog

    ...

  • Ex-Admins
  • 3761 posts
  • Sexo:Masculino
  • Localidade:Rio de Janeiro/RJ
  • Interesses:TI, Software Livre, Design Digital e Rock'n'Roll.

Posted 14/01/2005, 11:38

Vamos pensar um pouco... (não lembro qual era o programa que dizia isto)

Um campo VARCHAR(1)... quais as possibilidades de representação desse unico caracter? 255... Dentre caracteres especiais, numericos e letras... ok? Certo, entendido...

No caso dos campos numericos... INT(1), isso quer dizer que??? Não diz nada, este 1 não limita a informação ou o tamanho que ele vai ocupar. INT(1) é igual a INT(3) que é igual a INT(10) que é igual a, simplesmente, INT.

Outra coisa... um campo do tipo numérico tem sua representação que vai de 0 a 9... então, concorda comigo que podemos representar uma informação maior???

Certo... um INT tem a capacidade de (2^31)-1, que seria equivamente a 2147483647, mas se vc tirar o bit de sinal, fica (2^32)-1, ou seja, 4294967296... a representação de uma informação destas, com um campo do tipo VARCHAR seria VARCHAR(10), isto ocuparia 11 bytes, enquanto que o INT, com a mesma informação, ocupa 4 bytes.

Isto tb ocorre com o DECIMAL, ele vai ocupar mais espaço que os outros tipos numéricos, mas isto tras vantagens.

]pow... to na dúvida agora se eu consegui explicar alguma coisa ou se compliquei. *rs*
------
Mero mortal!

#11 Alexx Ares

Alexx Ares

    Doutor

  • Usuários
  • 921 posts
  • Sexo:Masculino
  • Localidade:Santos - SP

Posted 14/01/2005, 12:46

Boa Prog, boa! :)

Agora vamos lá:

certo, mas se varchar(1) tem 255 possibilidades de caracter o text tem possibilidade de mais de 65000.... isso quer dizer que o text é igual a varchar(65000) ???? :blink:

Ou esse limite de 255 significa que o maximo é varchar(255) ?

E entendi o que vc disse sobre INT, mas não entendi a ideia de que INT(1) é igual a INT(10)....

Nossa, cada vez que tiro uma dúvida aparecem mais 3... hehehe :rolleyes:

:lol: (y)
||| PENSE NISSO ||| O ser humano, dizem, deve dormir 8 horas por dia. Isso equivale a 1 terço do seu dia dormindo. Agora imagine a seguinte situação: você, com 75 anos, prestes a morrer, olha para trás e percebe que dormiu 1 terço da sua vida, ou seja, 25 anos. Cara... 25 ANOS DORMINDO !!! Se você tem menos de 25 anos, simplesmente você vai dormir mais do que viveu até hoje!!! Pense nisso... e durma menos.

#12 Prog

Prog

    ...

  • Ex-Admins
  • 3761 posts
  • Sexo:Masculino
  • Localidade:Rio de Janeiro/RJ
  • Interesses:TI, Software Livre, Design Digital e Rock'n'Roll.

Posted 14/01/2005, 13:30

Hmmmmm... 255... pera, deixa eu ver aqui... ahmmmm... quantos são os códigos ASCII??? É... acho que são 255 mesmo.

Era a isto que eu estava querendo me referir... 255 equivale a quantidade de representações que eu posso ter em um unico campo, de uma posição, VARCHAR, exemplo:

As vezes criamos campos para verificação de informações e, neste, apenas para preencher com S (sim) ou com N (não), usamos apenas 2 possibilidades de 255.

Possibilidades de representações em um campo string qualquer de 1 posição:
A B C D E F X Y Z 0 1 2 3 4 + - _ ^ ~ " ' ! (são algumas das 255 possibilidades)

Possibilidades de representações em um campo numerico qualquer de 1 posição:
0 1 2 3 4 5 6 7 8 9 (cabou, percebe como o universo de representação é bem menor, isto poupa espaço)

Para cada byte, tenho o espaço de 8 bits... vamos exemplificar:
00000000

Para representar um caracter B, de 255 possibilidades, eu tenho que usar 1 byte inteiro, ou seja, tenho que usar os 8 bits para 1 representação apenas. Para representar um caracter 9, de 10 possibilidades, eu uso 4 bits, ou seja, metade da informação.

Sobre o INT, o que eu quis dizer é que este numero não vai influenciar no seu sistema, pelo menos, até onde se saiba, por exemplo, INT(3) siginifica que 3 digitos serão exibidos, mas se vc gravar 123456, ele vai exibir da mesma forma, talvez seja nencessário um pouco mais de estudos sobre esta instrução INT(M), mas, isto não difere em nada se o campo for INT ou INT(10) ou INT(3)... tudo igual.
------
Mero mortal!

#13 Alexx Ares

Alexx Ares

    Doutor

  • Usuários
  • 921 posts
  • Sexo:Masculino
  • Localidade:Santos - SP

Posted 14/01/2005, 13:38

Olha, agora to entendendo melhor tudo...

fiz alguns testes depois de reler todo o manual, e juntar com as informações aqui e reparei algums coisas:

o INT por exemplo, não importa o tamanho que se defina em INT ( X ) , ele terá no máximo um numero com valor de 2147483647
Portanto, quando se insere um INT sem (X) , ele automaticamente vira INT(11) ( 10 casas mais sinal )

Porem, o decimal por exemplo, que armazena não como numero, mas como string, pode ter o numero que for, desde que tenha caracteres suficiente ( ex: DECIMAL(5) vai armazenar valores até 99999 ).

Outra coisa legal é o ZEROFILL, que permito, por exemplo para código de produtos, completar as casas de um numero com zeros na frente ( ex: 123 fica 0000123 ) de acordo com o que for especificado em INT(4) por exemplo.

De qualquer forma, já deu pra aprender bastante coisa, que tiver mais observações e dicas posta ae

valeu!!

:lol: (y)

--------------------------
Editando:

Prog, vi sua resposta depois de postar....

A unica coisa é que, se em INT vc declarar INT(3), não vai gravar 6666 apenas 666.

Mas se declarar INT(15) e tentar gravar 999999999999 vai gravar apenas 2147483647 que é u numero maximo.

:lol:

Edição feita por: Alexx Ares, 14/01/2005, 13:42.

||| PENSE NISSO ||| O ser humano, dizem, deve dormir 8 horas por dia. Isso equivale a 1 terço do seu dia dormindo. Agora imagine a seguinte situação: você, com 75 anos, prestes a morrer, olha para trás e percebe que dormiu 1 terço da sua vida, ou seja, 25 anos. Cara... 25 ANOS DORMINDO !!! Se você tem menos de 25 anos, simplesmente você vai dormir mais do que viveu até hoje!!! Pense nisso... e durma menos.

#14 Prog

Prog

    ...

  • Ex-Admins
  • 3761 posts
  • Sexo:Masculino
  • Localidade:Rio de Janeiro/RJ
  • Interesses:TI, Software Livre, Design Digital e Rock'n'Roll.

Posted 14/01/2005, 14:03

Yeah man... seguindo essa idéia, de fazer testes, vc vai aprender e saber mais do que o manual quer dizer.

Mas algumas coisas do seu teste, não foram iguais ao meu teste... qual a interface com o MySQL que vc esta usando???
------
Mero mortal!

#15 Alexx Ares

Alexx Ares

    Doutor

  • Usuários
  • 921 posts
  • Sexo:Masculino
  • Localidade:Santos - SP

Posted 14/01/2005, 14:09

... interface vc diz o phpMyAdmin? é esse que estou utilizando. :)
||| PENSE NISSO ||| O ser humano, dizem, deve dormir 8 horas por dia. Isso equivale a 1 terço do seu dia dormindo. Agora imagine a seguinte situação: você, com 75 anos, prestes a morrer, olha para trás e percebe que dormiu 1 terço da sua vida, ou seja, 25 anos. Cara... 25 ANOS DORMINDO !!! Se você tem menos de 25 anos, simplesmente você vai dormir mais do que viveu até hoje!!! Pense nisso... e durma menos.




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq