Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Kaayá Pezzuti

tipos de dados mysql

Recommended Posts

Olá pessoal estou com uma duvida que não consigo achar exatamente a resposta, talvez esteje no tópico errado, mas nao achei nada relacionado a MYSQL e se como estou usando php e mysql achei que poderia colocar aqui.

la vai

 

qual é a melhor forma de formatar os dados mysql.

exemplo que estou criando

 

 

USE comercio; //USOU O BANCO COMERCIO
CREATE TABLE IF NOT EXISTS produtos( //ATE AQUI TUDO BEM
id INT(DEVO COLOCAR ALGUM VALOR AQUI OU SE COLOCO INT ELE JA SABE QUE é INTEIRO) NOT NULL AUTO_INCREMENT,
nome VARCHAR(30) NOT NULL, // JA VI COLOCAREM DEFAULT o que seria o default? é necessario
sobrenome VARCHAR(120) NOT NULL, //OK
telefone VARCHAR() NOT NULL, //TELEFONE ESTA CERTO COLOCAR VARCHAR OU TEM QUE COLOCAR DADO NUMERICO? QUAL SERIA O IDEAL?
endereco VARCHAR(150), //OK
cep CHAR NOT NULL, // O A MESMA DUVIDA DO TELEFONE
data date default NOT NULL, // NESSE CASO ELE ARMAZENA A DATA ATUAL
CPF VARCHAR(11) NOT NULL, // MESMA DUVIDA DO CEP E TELEFONE
PRECO (CASO SEJE UM PRODUTO E PRECISE DE VALOR OQUE POSSO USAR?)
PRIMARY KEY(id)
)
quanto ao INT ja vi muitas vezes colocarem INT(11), ou INT(10) muda oque exatamente?
ja o DEFAULT em algum dos campos é necessario?
espero que tenha dado para entender ja procurei bastante mas a unica coisa que encontro é uma explicação de como funcionam os dados, qual os valores deles, mas oque me interessa é saber qual é melhor forma de utiliza-los nessas situações para obter melhor performace.
Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Recomendo ler

 

http://imasters.com.br/artigo/9196/mysql/tipos-de-dados-do-mysql-50/

 

http://pedrocarneiro.pt/site/index.php?option=com_content&view=article&catid=9:mysql&id=32:tipos-de-dados-em-mysql

 

http://blog.fabianobento.com.br/2010/06/tipo-de-dados-mysql/

 

http://www.guj.com.br/java/128256-cpf-como-tipo-varchar-ou-integer-como-faco-

 

http://blog.tiagopassos.com/2010/04/07/principais-tipos-de-campos-no-mysql/

 

http://dadomingues.blogspot.com.br/2007/09/char-ou-varchar-mysql.html

 

telefone -- seria legal usar varchar (devido ao nono digito dos celulares de SP)
cpf --usaria char(11) já que tem um número fixo de digitos
cep --usaria char(9) já que tem um número fixo de digitos
Tipos inteiros é legal quando você precisar fazer algum cálculo matemático. Como nos campos telefone,cep e cpf não será realizado nenhum cálculo, utilize char (em campos com quantidade digitos fixa)ou varchar(em campos com quantidade digitos não determindada)
PRECO --int(n,2)
onde n é o valor que você preferir e 2 a quantidade de digitos após o ponto. Ex: int(4,2)
exibir-se-á no formato nnnn,nn

Compartilhar este post


Link para o post
Compartilhar em outros sites

O número entre parenteses representa a quantidade máxima de dígitos/caracteres para o campo.

 

[inline]INT(11)[/inline] significa que o campo suporta no máximo 11 dígitos, como em [inline]12345678901[/inline], mas como por padrão (se omitido), o tamanho máximo do campo é o seu máximo, e o máximo de INT é 11 (ou seja, [inline]INT(12)[/inline] não é válido), então usar [inline]INT(11)[/inline] é o mesmo que usar apenas [inline]INT[/inline].

 

Outros tipos de campo também suportam a definição do tamanho, como [inline]VARCHAR(45)[/inline] (número variável de caracteres até no máximo 45 -- o máximo desse tipo é 255).

 

[inline]DEFAULT[/inline] é usada para definir um valor padrão para o campo, caso nenhum seja dado. Por exemplo, se você um campo [inline]INT[/inline] com [inline]DEFAULT 0[/inline], este será o valor desse campo caso você faça um [inline]INSERT[/inline] sem definir um valor para ele. Se é necessário? Não, use apenas se você achar esse comportamento conveniente.

 

- [inline]VARCHAR(120)[/inline] para o campo 'sobrenome' é muito curto, assim você só poderá armazenar sobrenomes com menos de 120 caracteres. Melhor usar [inline]VARCHAR(255)[/inline].

 

- Para números telefones, creio que o tipo [inline]INT[/inline] seja mais adequado. Se o usuário informar qualquer outro caractere não-numérico, basta removê-los antes de colocar no banco de dados, quando for imprimí-los, basta formatá-los para melhor visualização. O mesmo vale para números de CPFs, CNPJs e CEPs. Limite o tamanho do campo de acordo com a informação que ele irá armazenar, por exemplo, CPF tem 11 números, então use limite padrão, já CEP tem apenas 8 números, então use [inline]INT(8)[/inline]. Já um CNPJ tem 14 números, ou seja, não cabe no timpo [inline]INT[/inline], nesse caso você pode dividí-lo em duas partes, como por exemplo, para: "03.847.655/0001-98", armazene "03.847.655" em um tipo [inline]INT(8)[/inline] e "0001-98" em um [inline]INT(6)[/inline], ou pode simplesmente usar um tipo [inline]CHAR(14)[/inline], certificando-se de colocar apenas números.

 

- Para endereço, 120 também é muito pouco, use 255.

 

- Para preço, use o tipo [inline]FLOAT[/inline] (ponto-flutuante), onde a parte da fração representa os centavos. O valor pode ser depois facilmente formatado para melhor visualização.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

PRECO --int(n,2)

onde n é o valor que você preferir e 2 a quantidade de digitos após o ponto. Ex: int(4,2)
exibir-se-á no formato nnnn,nn

Deixa eu ver se entendi, 2.45 é um número inteiro para o seu MySQL? Isso não existe, nem no MySQL, nem no mundo real.

 

 

 

Já um CNPJ tem 14 números, ou seja, não cabe no timpo [inline]INT[/inline], nesse caso você pode dividí-lo em duas partes,

 

- Para preço, use o tipo

FLOAT
(ponto-flutuante), onde a parte da fração representa os centavos. O valor pode ser depois facilmente formatado para melhor visualização.

 

 

Ótima idéia... se o número tiver 100 caracteres basta colocar 9 campos =). Quanto ao tipo, float:

The FLOAT and DOUBLE types represent approximate numeric data values. MySQL uses four bytes for single-precision values and eight bytes for double-precision values.

O correto é decimal, pois ele leva em conta a precisão.

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ótima idéia... se o número tiver 100 caracteres basta colocar 9 campos =).

 

Aff... dei uma sugestão, que deve ser seguida ou não a depender do caso. <_<

 

Usar o bom senso é sempre necessário, certo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Aff... dei uma sugestão, que deve ser seguida ou não a depender do caso. <_<

 

Usar o bom senso é sempre necessário, certo?

Quebrar um CNPJ em dois campos para caber é coisa baiano... mesmo porque existe um tipo chamado BIGINT. Mas eu mesmo usaria um campo char ou varchar (caso o campo fosse compartilhado com cpf/cnpj.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quebrar um CNPJ em dois campos para caber é coisa baiano... mesmo porque existe um tipo chamado BIGINT. Mas eu mesmo usaria um campo char ou varchar (caso o campo fosse compartilhado com cpf/cnpj.

Você quis dizer "coisa [de] baiano"? Por acaso, eu sou baiano mesmo. Sou burro só por causa disso, seu racista!?

 

Sobre usar [inline]CHAR[/inline], eu também citei isso:

ou pode simplesmente usar um tipo [inline]CHAR(14)[/inline], certificando-se de colocar apenas números.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O número entre parenteses representa a quantidade máxima de dígitos/caracteres para o campo.

 

[inline]INT(11)[/inline] significa que o campo suporta no máximo 11 dígitos, como em [inline]12345678901[/inline], mas como por padrão (se omitido), o tamanho máximo do campo é o seu máximo, e o máximo de INT é 11 (ou seja, [inline]INT(12)[/inline] não é válido), então usar [inline]INT(11)[/inline] é o mesmo que usar apenas [inline]INT[/inline].

 

Outros tipos de campo também suportam a definição do tamanho, como [inline]VARCHAR(45)[/inline] (número variável de caracteres até no máximo 45 -- o máximo desse tipo é 255).

 

[inline]DEFAULT[/inline] é usada para definir um valor padrão para o campo, caso nenhum seja dado. Por exemplo, se você um campo [inline]INT[/inline] com [inline]DEFAULT 0[/inline], este será o valor desse campo caso você faça um [inline]INSERT[/inline] sem definir um valor para ele. Se é necessário? Não, use apenas se você achar esse comportamento conveniente.

 

- [inline]VARCHAR(120)[/inline] para o campo 'sobrenome' é muito curto, assim você só poderá armazenar sobrenomes com menos de 120 caracteres. Melhor usar [inline]VARCHAR(255)[/inline].

 

- Para números telefones, creio que o tipo [inline]INT[/inline] seja mais adequado. Se o usuário informar qualquer outro caractere não-numérico, basta removê-los antes de colocar no banco de dados, quando for imprimí-los, basta formatá-los para melhor visualização. O mesmo vale para números de CPFs, CNPJs e CEPs. Limite o tamanho do campo de acordo com a informação que ele irá armazenar, por exemplo, CPF tem 11 números, então use limite padrão, já CEP tem apenas 8 números, então use [inline]INT(8)[/inline]. Já um CNPJ tem 14 números, ou seja, não cabe no timpo [inline]INT[/inline], nesse caso você pode dividí-lo em duas partes, como por exemplo, para: "03.847.655/0001-98", armazene "03.847.655" em um tipo [inline]INT(8)[/inline] e "0001-98" em um [inline]INT(6)[/inline], ou pode simplesmente usar um tipo [inline]CHAR(14)[/inline], certificando-se de colocar apenas números.

 

- Para endereço, 120 também é muito pouco, use 255.

 

- Para preço, use o tipo [inline]FLOAT[/inline] (ponto-flutuante), onde a parte da fração representa os centavos. O valor pode ser depois facilmente formatado para melhor visualização.

 

essa resposta ajudou bastante, so nao usaria dividir o cnpj em 2,, usaria um char mesmo

valew pela resposta exclareceu bem

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quanto ao tipo FLOAT, o ESerra está certo, o DECIMAL é mais seguro pois o tipo FLOAT não armazena o número exato. Para o seu caso, se a fração de centavos precisar de apenas dois dígitos, essa precisão deve funcionar para você:


DECIMAL(10,2)

Isso fica 8 dígitos para o inteiro (10 - 2) e dois dígitos para a fração, o valor máximo será: 99999999.99.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Quanto ao tipo FLOAT, o ESerra está certo, o DECIMAL é mais seguro pois o tipo FLOAT não armazena o número exato. Para o seu caso, se a fração de centavos precisar de apenas dois dígitos, essa precisão deve funcionar para você:

DECIMAL(10,2)
Isso fica 8 dígitos para o inteiro (10 - 2) e dois dígitos para a fração, o valor máximo será: 99999999.99.

 

 

 

Quanto ao tipo FLOAT, o ESerra está certo, o DECIMAL é mais seguro pois o tipo FLOAT não armazena o número exato. Para o seu caso, se a fração de centavos precisar de apenas dois dígitos, essa precisão deve funcionar para você:

DECIMAL(10,2)
Isso fica 8 dígitos para o inteiro (10 - 2) e dois dígitos para a fração, o valor máximo será: 99999999.99.

 

ahh intendi.. vou faser um texte aqui,

 

ou seja se o numero foi

10.199,99 ele ficaria exato?

nao da na mesma usar um char e depois fomata-lo no php?

ou é regra de boas maneiras de usar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

"10.199,99" não é um número válido, deve ser 10199.99.

 

Para formatá-lo com PHP, use o seguinte:

$num = 10199.99;
echo number_format($num, 2, ',', '.'); // 10.199,99

 

O problema de usar CHAR para números é que ele não permitirá que você faça cálculos (só para citar um dos problemas).

Compartilhar este post


Link para o post
Compartilhar em outros sites

Deixa eu ver se entendi, 2.45 é um número inteiro para o seu MySQL? Isso não existe, nem no MySQL, nem no mundo real.

 

Um pouco sem educação nas suas respostas Sr Eserra.

É legal manter o respeito aos usuários e debater e não simplesmente ser ignorante com os demais.

 

 

Foi uma falha minha ao inserir o texto seguinte:

 

PRECO --int(n,2)
onde n é o valor que você preferir e 2 a quantidade de digitos após o ponto. Ex: int(4,2)
onde o correto é
PRECO -- decimal(n,2)
Att

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.