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

Christian e Ana Luiza Britto chriseana em gmail.com
Qua Dez 2 14:34:48 -03 2015


Olá Sandro,

Muito obrigado pelo pronto retorno.
Esta questão parece ser simples, mas está me deixando maluco.

Sua resposta me deu pistas. Mas, ainda não consegui solucionar o problema.
Criei o banco de dados assim:
/******************************************************************************/
/*           Generated by IBExpert 2015.11.18.1 02/12/2015 14:29:43           */
/******************************************************************************/

SET SQL DIALECT 3;

SET NAMES UTF8;

CREATE DATABASE
'C:\Users\Christian\Copy\Public\SmCube\Dev\SmCube_Pascal\SMCUBE.FDB'
USER 'SYSDBA' PASSWORD 'masterkey'
PAGE_SIZE 16384
DEFAULT CHARACTER SET UTF8 COLLATION UNICODE_CI_AI;

A tabela que está me causando problemas é esta (especificamente o campo NOTE):

CREATE TABLE ITEMS (
    ITEM          INTEGER,
    ITEMID        INTEGER,
    NOTE          BLOB SUB_TYPE 1 SEGMENT SIZE 80 CHARACTER SET UTF8
COLLATE UNICODE_CI_AI,
    SOURCEITEMID  INTEGER,
    SYNCHRONIZED  VARCHAR(1) CHARACTER SET UTF8 COLLATE UNICODE_CI_AI,
    TITLE         VARCHAR(120) CHARACTER SET UTF8 COLLATE UNICODE_CI_AI,
    EXTRA         VARCHAR(10) CHARACTER SET UTF8 COLLATE UNICODE_CI_AI

Quando faço a conexão com o banco, usando LAzarus Free Pascal (1.4.4),
utilizo estes comandos:

  IBConnection_ConnSmCube.DatabaseName:= GetCurrentDirUTF8 +
DirectorySeparator + 'SMCUBE.FDB';
  IBConnection_ConnSmCube.UserName:= 'SYSDBA';
  IBConnection_ConnSmCube.Password:= 'masterkey';
  IBConnection_ConnSmCube.HostName:= 'localhost';
  IBConnection_ConnSmCube.CharSet := 'UTF8';
  IBConnection_ConnSmCube.Dialect := 3;


Há algo errado?
Abs,
Christian


Em 02/12/15, Sandro Souza<escovadordebits em gmail.com> escreveu:
> 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