[firebase-br] Character Set X Unicod

Felipe Aron felipearon em gmail.com
Qua Set 26 12:55:22 -03 2012


Excelente resposta Gladiston. Gostei... aprendendo muito.

Em 26 de setembro de 2012 12:34, Gladiston Santana
<gladiston em vidy.com.br>escreveu:

> Antes de saber o que escolher, voce deve entender o porquê.
>
> O charset é nada mais do que uma tabela que define o conjunto de
> caracteres, o padrão ascii  (saldoso MSX) tinha 256 caracteres.
>
> Assim ISO8859_1 (tambem conhecida como latin1) e UTF-8 são dois conjunto de
> caracteress distintos com muita coisa em comum já que o Unicode derivou-se
> dele, a tabela latin1 foi descontinuada, mesmo assim teve variações, a
> ultima foi para acrescentar o caractere do euro. O padrão mundial é UTF,
> contudo quem fala inglês não tem porque mudar e por isso ainda existe muita
> coisa em latin1, vai ser dificil irradicá-la de uma única vez.
>
> O collate por sua vez define como os caracteres serão tratados
> individualmente ou em grupo de palavras, isso gera caracteres de controle
> que normalmente não são vistos, mas ocupam bytes preciosos, por exemplo, a
> letra "A" ocupa 1 byte em latin1, utf ou mesmo ascii, a letra "Á" também.
> Mas se você pretende que o banco de dados reconheça "A","a","á","Á" como
> sendo iguais e qual é a ordenação correta entre elas, então terá de usar um
> collate que seja case incensitive e accent incensitive não importando que
> tenha escolhido latin1 ou UTF-8 e isso vai gastar alguns bytes a mais para
> cada derivação do "A". Normalmente um banco de dados inteiro tá codificado
> em latin1 ou UTF, mas um conjunto de dados dentro dele pode estar usando
> collates diferentes conforme a necessidade.
>
> No Firebird há collates distintos para cada charset, há pouco tempo atrás
> só havia collate case/accent insensitive para quem usasse charset latin1.
> Na versão posterior do FB, foi acrescentado ao UTF-8 também. Assim, charset
> é apenas uma rotulagem indicando o conjunto de caracteres que será usada
> enquanto o collate define o tratamento a um grupo delas que pode ser
> aplicado a um campo ou uma tabela inteira.
>
> Se você tem uma base latin1 e vai passar a usar utf-8, não tem problema,
> você não perde nada - o inverso até poderia, pois a tabela UTF-8 é bem
> maior que o latin1. Mas o grande problema é o collate, os collates criados
> para latin1 e utf-8 não são os mesmos, isto é, nada garante que o mesmo
> case/accent sensitive para um tenha os mesmos caracteres de controle do que
> o outro para definir a mesma situação. Na prática, como os caracteres de
> controle poderão ser diferentes então é provável que se perderá
> acentuações, por exemplo, ao invés de "atenção" obter "atenç?o".
>
> Eu me esforcei em explicar o porquê, não sei se consegui.
> Essa é uma matéria muito antiga para mim e algumas coisas podem estar
> incorretas, vale a pena consultar o google  nestas questões.
>
> Agora ao invés de ter uma resposta pronta para a sua pergunta, seria melhor
> considerar o que é melhor para você e sua empresa usar.
>
> []'s e sucesso.
>
> Em 26 de setembro de 2012 10:11, Adilson Pazzini <
> adilson em storesystems.com.br> escreveu:
>
> > Vou tentar passar o meu problema .
> > Bom hj tenho um sistema em Delphi 7 com Firebird 2.1 , e qndo iniciei o
> > sistema ate agora estou utilizando
> > o Character Set no Firebird ISO8859_1 , e para campos como Nome utilizo o
> > Colate PT_BR .
> >
> > Ai comecei a fazer alguns projetos em Lazarus utilizando ZEOS ,
> >
> > Utilizando essas configuracoes abaixo (Pois um pessoal da Lista Lazarus
> me
> > passou pra utilzar essas configurações) :
> >
> >
> > DM.DATABASE.Connected := false ;
> > DM.DATABASE.HostName := 'localhost' ;
> > DM.DATABASE.Database := 'c:\sistema\banco.fdb' ;
> > DM.DATABASE.User := 'SYSDBA';
> > DM.DATABASE.Password := 'masterkey';
> > DM.DATABASE.Properties.Add('codepage=UTF8');
> > DM.DATABASE.Properties.Add('Dialect=1');
> > DM.DATABASE.LoginPrompt := False;
> >
> > So que é o seguinte . dependendo da Query que executo , com parametros de
> > pesquisa , ele nao retorna registro nenhum .
> > Se eu fizer uma query simples . tipo de uma tabela só . abre normalmente
> .
> > ...
> >
> > Existe alguma coisa haver com o Unicode com o Character set utilizado no
> > banco , pois no Delphi , esta mesma query ,funciona perfeitamente
> > me retornando registros . mais ja no Lazarus nao me resultou nada ...
> >
> > Tambem queria saber qual seria o Character Set ideal para sistemas Unicod
> > .... se usaria o WIN1252 / UTF8 ... etc ...
> >
> >
> >
> > Desde ja agradesço
> >
> > Adilson PAZZINI
> > ______________________________________________
> > FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> > Para saber como gerenciar/excluir seu cadastro na lista, use:
> > http://www.firebase.com.br/fb/artigo.php?id=1107
> > Para consultar mensagens antigas: http://firebase.com.br/pesquisa
> >
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>



-- 
Analista-Programador
#FollowMe: @felipearon <http://twitter.com/felipearon> (
http://felipearon.net)



Mais detalhes sobre a lista de discussão lista