Jump to content


Anderson de Camargo

Member Since 20/12/2011
Offline Last Active 21/12/2011, 21:29
-----

Topics I've Started

Função - Problema C/ Acentuação - Collate

20/12/2011, 18:15

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. :wacko:

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.

IPB Skin By Virteq