Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Anderson de Camargo

Acentuação dentro de uma função - Collate

Recommended Posts

Preciso de um help.

 

 

Estou criando uma função para determinar se um certo caracter é ou não alfanumérico (não encontrei no mysql uma já pronta para isto).

Porém, quando vou consulta-lá após criada, vejo que o MySql fez uma zona com meus acentos (quando digito os comandos abaixo posso ver isto).

 

use mysql;
select body from proc;

 

Nesta consulta eu vejo o código fonte da função criada... mas os acentos viraram caracteres estranhos.

 

O problema é que minha função é exatamente para comparação de caracteres, e ela está funcionando indevidamente por causa disto.

 

Segue abaixo a função:

 

DROP FUNCTION IF EXISTS alfa;

delimiter //
CREATE FUNCTION alfa (caracter varchar(1)) RETURNS tinyint(1)
BEGIN
 declare result tinyint(1) default 0;

 if caracter="0" or caracter="1" or caracter="2" or caracter="3" or caracter="4" or caracter="5" or caracter="6" or caracter="7" or caracter="8" or caracter="9" or caracter="a" or caracter="á" or caracter="â" or caracter="à" or caracter="ã" or caracter="ä" or caracter="A" or caracter="Á" or caracter="Â" or caracter="À" or caracter="Ã" or caracter="Ä" or caracter="e" or caracter="é" or caracter="è" or caracter="ê" or caracter="ë" or caracter="E" or caracter="É" or caracter="È" or caracter="Ê" or caracter="Ë" or caracter="i" or caracter="í" or caracter="ì" or caracter="î" or caracter="ï" or caracter="I" or caracter="Í" or caracter="Ì" or caracter="Ï" or caracter="o" or caracter="ó" or caracter="ò" or caracter="ô" or caracter="õ" or caracter="ö" or caracter="O" or caracter="Ó" or caracter="Ò" or caracter="Õ" or caracter="Ô" or caracter="Ö" or caracter="u" or caracter="ú" or caracter="ù" or caracter="û" or caracter="ü" or caracter="U" or caracter="Ú" or caracter="Ù" or caracter="Û" or caracter="Ü" or caracter="b" or caracter="c" or caracter="d" or caracter="f" or caracter="g" or caracter="h" or caracter="i" or caracter="j" or caracter="k" or caracter="l" or caracter="m" or caracter="n" or caracter="o" or caracter="p" or caracter="q" or caracter="r" or caracter="s" or caracter="t" or caracter="u" or caracter="w" or caracter="v" or caracter="x" or caracter="y" or caracter="z" or caracter="ÿ" or caracter="B" or caracter="C" or caracter="D" or caracter="F" or caracter="G" or caracter="H" or caracter="J" or caracter="K" or caracter="L" or caracter="M" or caracter="N" or caracter="P" or caracter="Q" or caracter="R" or caracter="S" or caracter="T" or caracter="W" or caracter="V" or caracter="X" or caracter="Y" or caracter="Z" or caracter="ç"  or caracter="Ç" then
   set result=1;
 end if;

   RETURN result;
END
//
delimiter;

 

Quando digito o comando abaixo, ele me retorna 1: :)

select alfa("a");

 

Mas, se digito isto, me retorna 0:

select alfa("á");

:(

 

 

Obviamente, deveria retornar 1 para ambos os casos.

 

 

Eu tentei fazer o seguinte:

alter database test CHARACTER SET=latin1 COLLATE=latin1_general_ci;

 

Depois disto, saí do mysql, entrei novamente, dei drop e recriei a função. NADA FEITO.

 

 

O que eu posso fazer??

 

Desde já agradeço a ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Descobri uma coisa interessante.

 

 

A função funciona quando crio diretamente na tela da console. O Mysql reconhece perfeitamente os acentuados.

Antes eu estava criando a função em arquivo .sql e depois chamando o arquivo com "SOURCE C:/DATA/ARQUIVO.SQL".

 

Testei criar o arquivo .sql em 3 editores diferentes (sendo um deles o NOTEPAD), mas sempre da pau com os acentos (não no editor, mas no banco).

 

O que diabos pode estar ocorrendo?

 

*Obs.: Não estou parado por causa disto, só estou 'encucado' com esta questão.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.