Mysql - Tipos De Campos
#1
Posted 13/01/2005, 19:11
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!!
#2
Posted 13/01/2005, 19:28
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).
#3
Posted 13/01/2005, 19:39
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.
#5
Posted 13/01/2005, 23:09
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...
-----------------------
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
Edição feita por: Balala, 14/01/2005, 07:03.
#6
Posted 14/01/2005, 10:02
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
Posted 14/01/2005, 10:33
Eu li e reli o manual varias vezes...
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!!
Não devria dar erro? pois 4 bytes, teria que ser 12.34, ou to completamente perdido nisso??
É esse tipo de coisa que queria deixar claro na minha mente, não preocupado só com espaço, velocidade, mas com o funcionamento correto.
#8
Posted 14/01/2005, 10:56
Leia este:
http://www.sourcekeg...lumn_types.html
Especificamente a parte referente a FLOAT e DECIMAL.
Mero mortal!
#9
Posted 14/01/2005, 11:07
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...
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) ??
#10
Posted 14/01/2005, 11:38
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
Posted 14/01/2005, 12:46
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) ????
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
#12
Posted 14/01/2005, 13:30
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
Posted 14/01/2005, 13:38
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!!
--------------------------
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.
Edição feita por: Alexx Ares, 14/01/2005, 13:42.
#14
Posted 14/01/2005, 14:03
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
Posted 14/01/2005, 14:09
0 user(s) are reading this topic
0 membro(s), 0 visitante(s) e 0 membros anônimo(s)