Problema de converção de texto quando passo de bytea para varchar no postgres 9
quando rodo este select
recebo o seguinte resultado:
preciso que o resultado seja o mesmo que foi passado! ou seja: AMÉRICA
Alguém sabe o porque de estar vindo com esta \311 no lugar do É e como mudar isso?
SELECT cast(CAST(AMÉRICA as bytea) as varchar(5000))
recebo o seguinte resultado:
AM\311RICA
preciso que o resultado seja o mesmo que foi passado! ou seja: AMÉRICA
Alguém sabe o porque de estar vindo com esta \311 no lugar do É e como mudar isso?
Km Sistemas
Curtidas 0
Melhor post
Saulo Benvenutti
19/03/2012
Jair creio que o mais simples e direto (usando o seu exemplo) seria:
SELECT convert_from(CAST('AMÉRICA' as bytea), 'latin1')
SELECT convert_from(CAST('AMÉRICA' as bytea), 'latin1')
GOSTEI 1
Mais Respostas
Jair N.
09/02/2012
Você precisa da palavra acentuada? Caso sim você vai precisar transformar valores Octetos por decimal, ou seja transformar uma cadeia inteira de caracteres com acentos e especiais... ou...substituir seu tipo atual (bytea) por outro...ou...sem acentuação.
quando rodo este select
recebo o seguinte resultado:
preciso que o resultado seja o mesmo que foi passado! ou seja: AMÉRICA
Alguém sabe o porque de estar vindo com esta \311 no lugar do É e como mudar isso?
SELECT cast(CAST(AMÉRICA as bytea) as varchar(5000))
recebo o seguinte resultado:
AM\311RICA
preciso que o resultado seja o mesmo que foi passado! ou seja: AMÉRICA
Alguém sabe o porque de estar vindo com esta \311 no lugar do É e como mudar isso?
GOSTEI 0
Km Sistemas
09/02/2012
e como eu faria isso?
GOSTEI 0
Km Sistemas
09/02/2012
Você precisa da palavra acentuada? Caso sim você vai precisar transformar valores Octetos por decimal, ou seja transformar uma cadeia inteira de caracteres com acentos e especiais... ou...substituir seu tipo atual (bytea) por outro...ou...sem acentuação.
quando rodo este select
recebo o seguinte resultado:
preciso que o resultado seja o mesmo que foi passado! ou seja: AMÉRICA
Alguém sabe o porque de estar vindo com esta \311 no lugar do É e como mudar isso?
SELECT cast(CAST(AMÉRICA as bytea) as varchar(5000))
recebo o seguinte resultado:
AM\311RICA
preciso que o resultado seja o mesmo que foi passado! ou seja: AMÉRICA
Alguém sabe o porque de estar vindo com esta \311 no lugar do É e como mudar isso?
E como eu faria isso?
Pois preciso da palavra acentuada!
GOSTEI 0
Jair N.
09/02/2012
Veja o uso do comando ENCODE para hex e base64 o problema é que vai transformar tudo para hexadecimal e depois passar tudo novamente para ascii
Olhe a cadeia de caracteres: §ªºÀÁÂÃÄÇÈÉÊËÌÍÎïÒÓÔÕÖÙÚÛÜàáâãäçèéêëìíîïòóôõöùúûü sua codificação hex e base64
você vai ter que criar uma função para converter esse tido de dado, é trabalhoso...
E como eu faria isso?
Pois preciso da palavra acentuada!
Olhe a cadeia de caracteres: §ªºÀÁÂÃÄÇÈÉÊËÌÍÎïÒÓÔÕÖÙÚÛÜàáâãäçèéêëìíîïòóôõöùúûü sua codificação hex e base64
você vai ter que criar uma função para converter esse tido de dado, é trabalhoso...
Você precisa da palavra acentuada? Caso sim você vai precisar transformar valores Octetos por decimal, ou seja transformar uma cadeia inteira de caracteres com acentos e especiais... ou...substituir seu tipo atual (bytea) por outro...ou...sem acentuação.
quando rodo este select
recebo o seguinte resultado:
preciso que o resultado seja o mesmo que foi passado! ou seja: AMÉRICA
Alguém sabe o porque de estar vindo com esta \311 no lugar do É e como mudar isso?
SELECT cast(CAST(AMÉRICA as bytea) as varchar(5000))
recebo o seguinte resultado:
AM\311RICA
preciso que o resultado seja o mesmo que foi passado! ou seja: AMÉRICA
Alguém sabe o porque de estar vindo com esta \311 no lugar do É e como mudar isso?
E como eu faria isso?
Pois preciso da palavra acentuada!
GOSTEI 0
Jair N.
09/02/2012
Mais Fácil execute a função abaixo com sua informação BYTEA
CREATE OR REPLACE FUNCTION ByteaToText(texto BYTEA) RETURNS TEXT AS
$BODY$
DECLARE
intRetorno INTEGER;
txtRetorno TEXT DEFAULT ;
aryvch_und_BIN VARCHAR[] := ARRAY[247,252,272,300,301,302,303,304,307,310,311,312,313,314,315,316,357,322,323,324,325,326,331,332,333,334,340,341,342,343,344,347,350,351,352,353,354,355,356,357,362,363,364,365,366,371,372,373,374];
aryvch_und_CHR VARCHAR[] := ARRAY[§,ª,º,À,Á,Â,Ã,Ä,Ç,È,É,Ê,Ë,Ì,Í,Î,Ï,Ò,Ó,Ô,Õ,Ö,Ù,Ú,Û,Ü,à,á,â,ã,ä,ç,è,é,ê,ë,ì,í,î,ï,ò,ó,ô,õ,ö,ù,ú,û,ü];
BEGIN
SELECT INTO txtRetorno REPLACE(CAST(texto AS VARCHAR),CHR(92),#);
FOR intRetorno IN 1..49
LOOP
txtRetorno := REPLACE(txtRetorno, #|| aryvch_und_BIN[intRetorno] ,aryvch_und_CHR[intRetorno]);
END LOOP;
RETURN TRIM(txtRetorno);
END;
$BODY$
LANGUAGE plpgsql VOLATILE
Ninguém trabalha porquê gosta, trabalho é o meio que utilizamos para realizar algo, originado de ideias ou desafios. [Klaus Hans]
CREATE OR REPLACE FUNCTION ByteaToText(texto BYTEA) RETURNS TEXT AS
$BODY$
DECLARE
intRetorno INTEGER;
txtRetorno TEXT DEFAULT ;
aryvch_und_BIN VARCHAR[] := ARRAY[247,252,272,300,301,302,303,304,307,310,311,312,313,314,315,316,357,322,323,324,325,326,331,332,333,334,340,341,342,343,344,347,350,351,352,353,354,355,356,357,362,363,364,365,366,371,372,373,374];
aryvch_und_CHR VARCHAR[] := ARRAY[§,ª,º,À,Á,Â,Ã,Ä,Ç,È,É,Ê,Ë,Ì,Í,Î,Ï,Ò,Ó,Ô,Õ,Ö,Ù,Ú,Û,Ü,à,á,â,ã,ä,ç,è,é,ê,ë,ì,í,î,ï,ò,ó,ô,õ,ö,ù,ú,û,ü];
BEGIN
SELECT INTO txtRetorno REPLACE(CAST(texto AS VARCHAR),CHR(92),#);
FOR intRetorno IN 1..49
LOOP
txtRetorno := REPLACE(txtRetorno, #|| aryvch_und_BIN[intRetorno] ,aryvch_und_CHR[intRetorno]);
END LOOP;
RETURN TRIM(txtRetorno);
END;
$BODY$
LANGUAGE plpgsql VOLATILE
Ninguém trabalha porquê gosta, trabalho é o meio que utilizamos para realizar algo, originado de ideias ou desafios. [Klaus Hans]
GOSTEI 0
Km Sistemas
09/02/2012
assim funcionou!
muito obrigado...
muito obrigado...
convert_from(campo_bytea,SQL_ASCII)
GOSTEI 0