Ir para conteúdo
Fórum Script Brasil
  • 0

Outro problema c/ acentuação (collate)


Anderson de Camargo

Pergunta

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.

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Oi 'Anderson de Camargo',

Corrigi sua função

DROP FUNCTION IF EXISTS alfa;

DELIMITER $$
CREATE FUNCTION alfa (caracter CHAR(1)) RETURNS TINYINT(1)
BEGIN
  DECLARE result TINYINT(1) DEFAULT 0;

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

Link para o comentário
Compartilhar em outros sites

  • 0

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.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...