[firebase-br] Firebird Multiplataforma - Problemas com o Blob

Sandro Souza escovadordebits em gmail.com
Qua Dez 2 14:04:46 -03 2015


Bom dia/tarde/noite Christian.

Vamos por partes.
Quando você criou essa base de dados no Windows, você lembroi de definir o
conjunto de caracteres (charset) padrão da base de dados?
O charset ideal para o nosso português brasileiro seria o ISO8859_1, e nas
colunas do tipo CHAR, VARCHAR e BLOB subtype 1, usaria a colação (collate)
PT_BR (português brasileiro).
O charset define o conjunto de caracteres a ser utilizados, incluindo os
caracteres acentuados.
Nos parâmetros de conexão, na sua aplicação, veja se tem o parâmetro
charset ou LC_TYPE, que define qual o charset da sua aplicação.
Se o charset que estiver nos parâmetros de conexão da sua aplicação não for
o mesmo que o charset da base de dados, então o Firebird tentará fazer as
respectivas conversões de caracteres, o que pode gerar esse problema de
acentuação errada.
A colação (collate) interfere na forma como as strings/textos são
comparados.
No caso do PT_BR, ele não faz diferença entre letras maiúsculas e
minúsculas e entre letras acentuadas e não acentuadas, ou seja, fica
perfeito para as comparações (incluindo o operador LIKE) e com isso, também
afeta as ordenações (ORDER BY) ficando perfeito para o nosso idioma.
Se você definiu um charset na base de dados (quando a criou) e também
definir o mesmo charset nos parâmetros de conexão da sua aplicação, então
não deveriam aparecer esses caracteres acentuados de forma errada.
Infelizmeinte, não conheço qualquer forma de trocar o charset padrão de uma
base de dados do Firebird, mas independente do charset padrão da base de
dados, você pode forçar um outro charset e collate por coluna, ex:

CREATE TABLE MINHA_TABELA(
  CODIGO INTEGER NOT NULL,
  DESCRICAO VARCHAR(200) CHARACTER SET ISO8859_1 NOT NULL COLLATE PT_BR,
  (outras colunas....)
);

Vai criar a coluna DESCRICAO com o charset ISO8859_1 e collate PT_BR
independente do charset padrão ser o que você especificou.
Se você não especificar o charset para a coluna CHAR, VARCHAR ou BLOB
subtype 1, então vai valer o charset padrão da base, senão vai valer o que
você especificar.

Tentarei lhe ajudar no que eu puder.

Espero ter ajudado mais que atrapalhado.

Em 2 de dezembro de 2015 12:37, Christian e Ana Luiza Britto <
chriseana em gmail.com> escreveu:

> Olá,
>
> Desenvolvi uma aplicação em Lazarus 1.4.4 e Firebird 2.5.1. No
> programa, tenho um campo Blob Subtype 1 - UTF8. Criei o banco de dados
> no Firebird para Windows 10. Copiei o banco para Linux Kubuntu 14.05 e
> Mac OS X Mavericks. Aplicação está rodando corretamente, mas quando
> apresento os dados deste campo Blob a acentuação não aparece
> corretamente. No Linux aparece de uma, no Mac de outra. Apenas no
> Windows funciona corretamente. Obs. Utilizo a mesma versão do Firebird
> em todos os OS.
>
> Podem me ajudar?
> Grande abraço,
> Christian
>
> ______________________________________________
> 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://www.firebase.com.br/pesquisa_lista.html
>



Mais detalhes sobre a lista de discussão lista