[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 09:05:02 -03 2024


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




Mais detalhes sobre a lista de discussão lista