[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