[firebase-br] Erro na migração para do 2.5 para o 5

Carlos H. Cantu listas em warmboot.com.br
Terça Agosto 6 10:04:35 -03 2024


Não tinha me atentado que no seu caso o parâmetro passado para o LPAD não é um
string.

[]s
Carlos H. Cantu
eBook Guia de Migração para o FB 5 - www.firebase.com.br/guiafb5.php
www.FireBase.com.br - www.firebirdnews.org - blog.firebase.com.br

ÉMdN> Mesmo passando o charset na conexão do IB, e do nosso frame(acho que usamos
ÉMdN> a firedac para conexão entre aplicação e banco), a lpad de um inteiro, no
ÉMdN> 2.5 retorna a da conexão. no 5 tá retornando none para inteiro.

ÉMdN> select
ÉMdN> lpad(1,2,'0') as lc_none, -- Retorna None
ÉMdN> lpad('1',2,'0') as lc_iso -- Retornar da conexão, no caso ISO8859_1
ÉMdN> from rdb$database

ÉMdN> O colega registrou o comportamento no
ÉMdN> https://github.com/FirebirdSQL/firebird/issues/8206






ÉMdN> *Éder Monteiro do Nascimento*

ÉMdN> Analista de Sistemas Full Stack

ÉMdN> Fator Sistemas & Consultoria

ÉMdN> e-mail: *eder.monteiro em fator.tec.br <eder.monteiro em fator.tec.br>*

ÉMdN> http://fatorsistemas.com.br


ÉMdN> Em ter., 6 de ago. de 2024 às 09:31, Éder Monteiro do Nascimento <
ÉMdN> eder.monteiro em fator.tec.br> escreveu:

>> Contudo Cantu, observe:
>> [image: image.png]
>> Conectando na base pelo IB, no registro da conexão está setado Charset
>> como ISO8859_1
>>
>> e se rodo isso: select lpad(1,2,'0') from rdb$database
>>
>> ele retorna isso:
>> [image: image.png]
>>
>>
>>
>>
>>
>>
>> *Éder Monteiro do Nascimento*
>>
>> Analista de Sistemas Full Stack
>>
>> Fator Sistemas & Consultoria
>>
>> e-mail: *eder.monteiro em fator.tec.br <eder.monteiro em fator.tec.br>*
>>
>> http://fatorsistemas.com.br
>>
>>
>> Em ter., 6 de ago. de 2024 às 09:25, Éder Monteiro do Nascimento <
>> eder.monteiro em fator.tec.br> escreveu:
>>
>>> Muito obrigado pelo retorno.
>>> Já setamos o charset na conexão. Mas fazemos por meio de um framework,
>>> Vou passar isso para o responsável para verificar se pode ser algo na
>>> montagem da conexão.
>>> Muito obrigado.
>>>
>>>
>>>
>>>
>>>
>>> *Éder Monteiro do Nascimento*
>>>
>>> Analista de Sistemas Full Stack
>>>
>>> Fator Sistemas & Consultoria
>>>
>>> e-mail: *eder.monteiro em fator.tec.br <eder.monteiro em fator.tec.br>*
>>>
>>> http://fatorsistemas.com.br
>>>
>>>
>>> Em ter., 6 de ago. de 2024 às 09:05, Carlos H. Cantu via lista <
>>> lista em firebase.com.br> escreveu:
>>>
>>>> Fiz um teste aqui e só consegui reproduzir o problema mencionado por
>>>> você quando
>>>> eu conecto na base sem definir um charset para a conexão, por exemplo,
>>>> no isql,
>>>> conectando sem falar que charset quero usar:
>>>>
>>>> isql employee
>>>> SQL> set sqlda_display on;
>>>> SQL> select lpad('123',5,'0') from rdb$database;
>>>>
>>>> INPUT message field count: 0
>>>>
>>>> OUTPUT message field count: 1
>>>> 01: sqltype: 448 VARYING scale: 0 subtype: 0 len: 5 charset: 0 NONE <----
>>>>   :  name: LPAD  alias: LPAD
>>>>   : table:   owner:
>>>>
>>>> LPAD
>>>> ======
>>>> 00123
>>>>
>>>>
>>>> Conectando com o charset ISO8859_1:
>>>>
>>>>
>>>> isql -ch ISO8859_1 employee
>>>> Database: employee, User: SYSDBA
>>>> SQL> set sqlda_display on;
>>>> SQL> select lpad('123',5,'0') from rdb$database;
>>>>
>>>> INPUT message field count: 0
>>>>
>>>> OUTPUT message field count: 1
>>>> 01: sqltype: 448 VARYING scale: 0 subtype: 0 len: 5 charset: 21
>>>> ISO8859_1 <----
>>>>   :  name: LPAD  alias: LPAD
>>>>   : table:   owner:
>>>>
>>>> LPAD
>>>> ======
>>>> 00123
>>>>
>>>>
>>>> Ou seja, aparentemente você não está especificando o charset da sua
>>>> conexão,
>>>> fazendo com que a função retorne usando o charset NONE.
>>>>
>>>> []s
>>>> Carlos H. Cantu
>>>> eBook Guia de Migração para o FB 5 - www.firebase.com.br/guiafb5.php
>>>> www.FireBase.com.br - www.firebirdnews.org - blog.firebase.com.br
>>>>
>>>> ÉMdNvl> Bom dia.
>>>> ÉMdNvl> Estamos realizando a migração de um sistema do  2.5 para o 5.
>>>> ÉMdNvl> Fizemos os procedimentos orientados pelo mestre Cantu, e antes
>>>> de migrar,
>>>> ÉMdNvl> já fizemos diversas correções que poderiam gerar problemas no 5.
>>>> ÉMdNvl> Contudo fui pego num ponto que não estou sabendo como buscar a
>>>> solução no
>>>> ÉMdNvl> google por não saber exatamente o que procurar.
>>>>
>>>> ÉMdNvl> A situação é que no 2.5 usamos muito (muito mesmo) o seguinte
>>>> comando.
>>>> ÉMdNvl> LPAD(ID_MES,2,'0') para completar o campo com '0' à esquerda, e
>>>> ele
>>>> ÉMdNvl> funciona perfeitamente. O campo ID_MES é um BIG_INT
>>>> ÉMdNvl> No fire 5, ele continua funcionando, contudo, gera um problema.
>>>>
>>>> ÉMdNvl> 2.5 LPAD(ID_MES,2,'0') = '01' charset *ISO8859_1 *collation PT_BR
>>>> ÉMdNvl> 5   LPAD(ID_MES,2,'0') = '01' charset *None *collation PT_BR
>>>> ÉMdNvl> O problema, nosso sistema trabalha todo em Charset ISO8859_1
>>>> Collation
>>>> ÉMdNvl> PT_BR, e temos diversos lugares, que a comparação é busca é por
>>>> esse campo.
>>>> ÉMdNvl> Só que aí sobe o erro:
>>>>
>>>> ÉMdNvl> Erro de collation PT_br For character set none
>>>>
>>>> ÉMdNvl> Por estar comparando entre charset diferentes.
>>>> ÉMdNvl> Já iniciei o *ajuste* fazendo o processo LPAD(CAST(ID_MES AS
>>>> ÉMdNvl> VARCHAR(2)),2,'0'), isso retorna Charset ISO8859_1.
>>>> ÉMdNvl> Contudo, temos algumas centenas de consultas, relatórios, e
>>>> outras coisas
>>>> ÉMdNvl> mais, que essa situação está impactando. Atrasando nossa
>>>> migração.
>>>> ÉMdNvl> Tem algum lugar que possa de configurar para que ele entenda
>>>> isso como
>>>> ÉMdNvl> antes?
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> ÉMdNvl> *Éder Monteiro do Nascimento*
>>>>
>>>> ÉMdNvl> Analista de Sistemas Full Stack
>>>>
>>>> ÉMdNvl> Fator Sistemas & Consultoria
>>>>
>>>> ÉMdNvl> e-mail: *eder.monteiro em fator.tec.br <eder.monteiro em fator.tec.br
>>>> >*
>>>>
>>>> ÉMdNvl> http://fatorsistemas.com.br
>>>> ÉMdNvl> ______________________________________________
>>>> ÉMdNvl> FireBase-BR (www.firebase.com.br) - Hospedado em
>>>> www.locador.com.br
>>>> ÉMdNvl> Para saber como gerenciar/excluir seu cadastro na lista, use:
>>>> ÉMdNvl> http://www.firebase.com.br/fb/artigo.php?id=1107
>>>> ÉMdNvl> Para consultar mensagens antigas:
>>>> http://www.firebase.com.br/pesquisa_lista.html
>>>>
>>>>
>>>> ______________________________________________
>>>> 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