[firebase-br] Character Set X Unicod

Gladiston Santana gladiston em vidy.com.br
Qua Set 26 12:34:10 -03 2012


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
>



Mais detalhes sobre a lista de discussão lista