[firebase-br] ALTER DOMAIN [Adicionar collate]

Hélio Oliveira hpensador em gmail.com
Qui Abr 4 14:11:13 -03 2019


Grande Gladiston!

Exato.

A definição do CharSet e do Collate devem ser feitos na criação do banco 
de dados. A situação aqui é a seguinte... o banco de dados foi criado 
sem essas definições e já temos clientes com bases na casa do 100GB.

Recentemente eles adotaram criar domains para os nomes de alguns campos 
e atualmente observaram a questão da não ordenação corretamente no caso 
de um simples select

SELECT NOME FROM TABELA ORDER BY NOME

Inicialmente acreditei que poderia simplesmente alterar o DOMAIN e assim 
resolver o problema, porém a coisa não é tão simples como esperado.

Baseando-me no script gerado do IBExpert onde ele faz essa alteração 
atraves da tabela de sistemas:

update RDB$FIELDS
    set
       RDB$CHARACTER_SET_ID = 53,
       RDB$COLLATION_ID     = 6
    where RDB$FIELD_NAME    = 'NOME_DO_DOMINIO';

Fiz o processo, porém o resultado final ao meu ver só irá surtir efeito 
após um backup/restore da base de dados (o que em alguns clientes este 
processo é muito complicado - Hospitais).

Bem, para tentar amenizar o problema, estou criando campos auxiliares, 
transferindo o conteúdo do campo atual para este, removendo o campo 
atual e recriando com [ALTER TABLE ADD NOME_DO_CAMPO VARCHAR(XX) 
CHARACTER SET WIN_1252 COLLATE WIN_PTBR].


Em 04/04/2019 13:48, Gladiston Santana escreveu:
> Acho que você não pode fazer isso, o charset é uma caracteristica da
> estrutura enquanto o collate é a forma como o banco interpretará os
> caracteres, por exemplo se 'João' e 'joao' são iguais ou diferentes, e até
> mesmo se 'ph' terá igual a 'f'.
> O charset é apenas um dafault caso não haja citação explicita como select *
> from clientes where razao_social collate win_ptbr like  '%joão%', por isso
> é bom defini-lo no inicio, isto é, na criação do banco e não exatamente na
> criação da tabela.
> se quiser alterá-lo, acho que se faz isso para o banco, ex:
> alter character set win1252  set default collation win_ptbr;
> 
> Mas algumas coisas mudaram recentemente então é bom conferir no manual.
> 
> []´s
> 
> Em qui, 4 de abr de 2019 às 10:38, Hélio Oliveira <hpensador em gmail.com>
> escreveu:
> 
>> Bom dia Colegas!
>>
>> Criei um domínio ---> CREATE DOMAIN DM_NM_METODO VARCHAR(100).
>>
>> Gostaria de alterar o mesmo para adicionar o COLLATE, estou tentando com
>> o comando ---> ALTER DOMAIN DM_NM_METODO TYPE VARCHAR(100) CHARACTER SET
>> WIN_1252 COLLATE WIN_PTBR, porém quando executo o comando recebo a
>> mensagem:
>>
>> Invalid token.
>> Dynamic SQL Error.
>> SQL error code = -104.
>> Token unknown - line 1, column 72.
>> COLLATE.
>>
>> o que está errado?
>>
>>
> ______________________________________________
> 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