Duvida de banco de dados (off-topic)

Rpz seguinte, eh 1 duvida c varchar(). Pelo q tinha lido em banco de dados, a variavel char() eh fixa, enquanto a varchar() eh variavel, conforme as seguintes definicoes:

char(n) - armazena strings de tamanho fixo de ate 8000 caracteres.

varchar(n) - armazena strings de tamanho variável de ate 8000 caracteres.

Pelo q entendi, e o q “td mundo” falava, era q varchar() cresce de acordo c a necessidade, ou seja, se eu declaro varchar(5), e insiro a string “pessoal”, esta varchar(5) ira receber e aumentar o tamanho de acordo c a necessidade (mas isto n aconteceu em uma tabela q eu fiz no MYSql). Eu declarei uma variavel “diretorio” como varchar(20) e ai inseri um valor maior, pensei q ela ia aceitar, mas n aceitou. Ai embolou td! Tive q declarar “diretorio” como varchar(200) p/ n acontecer isto. E ai isto eh normal?

Então não defina o tamanho do varchar …

VC está fazendo uma pequena confusão !! veja, um campo do tipo varchar NÃO aumenta de acordo com a necessidade !!! o varchar funciona da seguinte maneira:

Vamos supor que vc tenha um campo varchar(4000) e nele tenha o valor “olá”, veja, ele continua sendo um varchar(4000) porém na memória ele terá tamanho 3 e não 4000, concluindo, o campo varchar ocupa memória de acordo com seu conteúdo, mas seu tamanho físico continua 4000.

entendeu ?? qualquer outra dúvida pode perguntar.

ja tentei fazer isto, colocando varchar() n pega, nem no mysql nem no mssql.

[quote=marceloplis]VC está fazendo uma pequena confusão !! veja, um campo do tipo varchar NÃO aumenta de acordo com a necessidade !!! o varchar funciona da seguinte maneira:

Vamos supor que vc tenha um campo varchar(4000) e nele tenha o valor “olá”, veja, ele continua sendo um varchar(4000) porém na memória ele terá tamanho 3 e não 4000, concluindo, o campo varchar ocupa memória de acordo com seu conteúdo, mas seu tamanho físico continua 4000.

entendeu ?? qualquer outra dúvida pode perguntar.[/quote]

blz, entao no varchar() vc sempre tem q definir o tamanho, ele n aceita so varchar(). Outra coisa se eu definir o char(4000) ele ira ocupar os 4000 independente de esta sendo usado ou n ne isso?

[quote=marceloplis]VC está fazendo uma pequena confusão !! veja, um campo do tipo varchar NÃO aumenta de acordo com a necessidade !!! o varchar funciona da seguinte maneira:

Vamos supor que vc tenha um campo varchar(4000) e nele tenha o valor “olá”, veja, ele continua sendo um varchar(4000) porém na memória ele terá tamanho 3 e não 4000, concluindo, o campo varchar ocupa memória de acordo com seu conteúdo, mas seu tamanho físico continua 4000.

entendeu ?? qualquer outra dúvida pode perguntar.[/quote]

este espaco fisico q ele ocupa eh o do banco, ou seja, ele ocupará uma string de 4000 no banco idependente do uso, eh isto?

Muitos bancos de dados definem “char(400)” como algo que ocupa 400 caracteres sempre, completando-os com espaços à direita se necessário, e “varchar(400)” como algo que pode ocupar até 400 caracteres. Outros simplesmente dizem que “char(400)” == “varchar(400)”.

Note que 1 caracter pode ser 1 byte , 2 bytes ou algo mais complicado - depende muito da codificação dos dados.

Isso Mesmo !!!

Desculpe, acho que me expressei errado nesta parte, seguinte, no Banco ele assume o tamanho da string dentro dele, sendo assim o tamanho é variável, os 4000 serve apenas pra indicar o tamanho máximo de um string que pode ser guardado por esse campo.

Entao so p fechar o assunto, a vantagem do varchar pro char eh o menor custo de tamanho no banco, pois, no varchar este tamanho eh exatamente a qtd de caracters presentes, enqto no char eh o proprio tamanho do char, correto?

Outra coisa, no caso da minha tabela (no banco q fiz) q tem 1 coluna “diretorio” (q armazena um dir de um arquivo), e este dir tera um tamanho meio grande, de 100-200 caracteres, ai o correto eh como eu fiz msm ne, declarei varchar(200), n tem p “onde correr” n ne?

[quote=hlds]Entao so p fechar o assunto, a vantagem do varchar pro char eh o menor custo de tamanho no banco, pois, no varchar este tamanho eh exatamente a qtd de caracters presentes, enqto no char eh o proprio tamanho do char, correto?

Outra coisa, no caso da minha tabela (no banco q fiz) q tem 1 coluna “diretorio” (q armazena um dir de um arquivo), e este dir tera um tamanho meio grande, de 100-200 caracteres, ai o correto eh como eu fiz msm ne, declarei varchar(200), n tem p “onde correr” n ne?[/quote]

Correto suas duas colocações!!!

ok, vlw cara!

So abusando 1 pouco da tua boa vontade, vo aproveitar e tirar outra duvida, eeehehhe.

Qnd eu fui colocar o banco (em MySQL) do meu pc no pc onde a aplicacao ia rodar, as tabelas n apareceram. Tive q rodar o codigo SQL no pc da aplicacao p criar as tabelas novamente. Eu n sei pq deu isto, mas n eh normal, pois ja fiz c o MSSQL e pegou. As versoes do MySQL q colokei sao iguais. E o banco, eu copiei da pasta “data” do MySQL. Vc sabe pq deu isto e como resolver?

[quote=hlds]So abusando 1 pouco da tua boa vontade, vo aproveitar e tirar outra duvida, eeehehhe.

Qnd eu fui colocar o banco (em MySQL) do meu pc no pc onde a aplicacao ia rodar, as tabelas n apareceram. Tive q rodar o codigo SQL no pc da aplicacao p criar as tabelas novamente. Eu n sei pq deu isto, mas n eh normal, pois ja fiz c o MSSQL e pegou. As versoes do MySQL q colokei sao iguais. E o banco, eu copiei da pasta “data” do MySQL. Vc sabe pq deu isto e como resolver?[/quote]

Eu não trabalho com mysql, mas pelo que sei, o mysql não permite vc copiar o banco como se fosse um arquivo e sim pegar os scripts gerado por ele e rodar na máquina que terá o mesmo banco.

ok, entao td normal oq aconteceu, vlw d novo.