GARANTIR DESCONTO

Fórum Dúvidas COLLATE e CHARACTER SET #38965

25/09/2003

0

Boa tarde pessoal,
tenho algumas dúvidas sobre qual collate e character set usar para aplicação, bem como a forma de definição para os mesmos. Estudei o artigo ´http://www.firebase.com.br/cgi-bin/firebase.cgi/dica?ID=1 ´, mas de esclarecer as dúvidas abaixo :
//***********************************************************
1) Eu uso BDE, então, o artigo diz que para esta forma de acesso a dados devo definir o Character Set da conexão : [u:1c5a3a3971]Configuration -> Drivers -> Native -> INTRBASE e escolha para LANGDRIVER a opção Borland PTG Latin-1[/u:1c5a3a3971]. Isto realmente é necessário e é a forma correta levando em consideração que pretendo definir os Character Set e Collate na criação da base como será visto nas próximas questões ?
//***********************************************************
2) Levando em consideração acentuação e correta ordenação dos dados nas consultas, pretendo usar os seguintes character set e collate :
CHARACTER SET ISO8859_1 COLLATE PT_PT ou
CHARACTER SET WIN1252 COLLATE PXW_INTL850;
Qual dos dois casos é o mais indicado(o artigo faz comentários que para os campos indexados devo usar collate TP_TP). Isto quer dizer que terei que usar a primeira opção ou posso usar misto das duas ?
//***********************************************************
3) Tenho um script para criação da base de dados. Qual a forma correta de definir o CHARACTER SET e o COLLATE? Preciso definir nos campos Varchar e Char, mas esta definição tem que ser campo a campo ou posso só definir no início do Script ? Para definir campo a campo fiz cfe o exemplo abaixo :
CREATE TABLE ´PACIENTE´ (
´CD_PAC´ INTEGER NOT NULL,
´NM_PAC´ VARCHAR(120) CHARACTER SET ISO8859_1 COLLATE PT_TP,
´CD_CONV´ INTEGER ,
´DT_NASC´ DATE,
´DT_INCL´ DATE,
´DT_EXCL´ DATE,
´DT_ULT_ATEND´ DATE,
´SEXO´ VARCHAR(10) CHARACTER SET ISO8859_1 COLLATE PT_TP,
´EST_CIV´ VARCHAR(15) CHARACTER SET ISO8859_1 COLLATE PT_TP,
´ID´ VARCHAR(10) CHARACTER SET ISO8859_1 COLLATE PT_TP,
´CPF´ VARCHAR(12) CHARACTER SET ISO8859_1 COLLATE PT_TP,
´FONE_RES´ VARCHAR(20) CHARACTER SET ISO8859_1 COLLATE PT_TP,
´FONE_COM´ VARCHAR(20),
´FONE_CEL´ VARCHAR(20),
´NUM_FICHARIO´ VARCHAR(120),
´PAC_TEMP´ BOOLEAN DEFAULT ´N´,
´IDADE´ INTEGER DEFAULT 0
);

3) O Character Set de conexão é o que eu defino no DBE cfe pergunta nº 1 certo? o que este character set tem a ver com o character set que defino na criação do campo de uma tabela ?

Desculpem pela quantidade de informações, mas com certeza serão de grade utilidade para todos que frequentam a lista como eu.
Por favou, e alguem puder me exclarecer as dúvidas acima, fico muito grato;

Atenciosamente
Gilmar André Ehrig
Analista/Programador


Andreehrig

Andreehrig

Responder

Posts

25/09/2003

Afarias

1) Não sei te responder esta ao certo pois não uso BDE, mas siga o q o autor disse q deve estar certo. -- Agora, de uma coisa eu tenho certesa vc **NÃO** devia usar BDE para conexão com qualquer SGBD (como o IB ou FB)


2) O mais indicado é o q vc achar melhor dentro das características descritas no artigo. Vc deveria escolher apenas 1 não misturá-los, a título de evitar problemas. Pese os prós/cons de cada um e faça sua escolha!


3) Está correto esta forma de definição. Entretanto existe outra (a qual particularmente prefiro) -- basta definir o character set padrão do banco de dados ::

create database ´banco.gdb´ page_size 4096
default character set iso8859_1;

então, para todas as tabelas criadas neste banco, os campos CHAR/VARCHAR terão o character sets ISO8859_1 (ex!)

dai vc pode na criação das tabelas definir apenas o COLLATE nas colunas q vai precisar. Quando a nessecidade for apenas para ordenação, nem precisa definir o COLLATE, vc vai poder utilizá-lo da forma::

select * from tabela
order by nome collate pt_pt;


4) o character set de conexão deve em geral ser o mesmo utilizado pelo banco de dados!


Bom... no mais, olha, procura, não iniciar um novo tópico para falar de algo já iniciado em outro. Apenas continue (responda) o tópico original... assim fica mais fácil para acompanhar a discussão e o fórum fica mais organizado beleza?! :D


T+


Responder

Gostei + 0

26/09/2003

Andreehrig

Bom dia, to eu aí te pentelhando mais um pouco he he,
1) O que fica mais prático para o futuro : Aplicar os collate na criação das tabelas ou na hora de fazer a pesquisa como vc me exemplificou ?
2) Li em alguns lugares que existe um collate feito para a
nossa língua e os fontes foram entregues ao pessoal da firebird-devel para a incorporação no FB, mas não será incorporado na versão 1.5..... Pergunto, se eu definir collate a nível de base terá problema em atualizar com outro collate futuramente ?
3) Haaa, qdo coloco o collate no order by, dá um erro. Fiz o teste no IBExpert que náo encontra um arquivo no c:\Windows\temp

Obrigado

Gilmar André


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar