Обсуждение: [SQL] ERROR: invalid byte sequence for encoding "UTF8": 0xe9 0x6d 0x61

Поиск
Список
Период
Сортировка

[SQL] ERROR: invalid byte sequence for encoding "UTF8": 0xe9 0x6d 0x61

От
ROS Didier
Дата:

Hi

               The following function does not work anymore in PostgreSQL 9.6 (it worked in 9.3) :

 

>> 

CREATE OR REPLACE FUNCTION fonction_verif_droits (pmodulename varchar(32), prolename varchar(15)) RETURNS boolean

AS $$

DECLARE is_exists BOOLEAN;

BEGIN

    -- Securisation du search_path: les schémas de confiance, puis 'pg_temp'.

    PERFORMpg_catalog.set_config('search_path', public,pg_temp', true);

    SELECT a.droit_acces INTO is_exists FROM gestion_droits a WHERE a.rolename=prolename AND a.module=pmodulename ;

    IF NOT FOUND THEN

        RETURN false;

    END IF;

    RETURN is_exists;

END

$$ LANGUAGE plpgsql SECURITY DEFINER;

<< 

The error message is :

ERROR:  invalid byte sequence for encoding "UTF8": 0xe9 0x6d 0x61

 

Have you any idea where the problem comes from ?

 

Thanks in advance

 

Best regards

 


Didier ROS
DSP/CSP IT-DMA/Solutions Groupe EDF/Expertise Applicative

Expertise SGBD
32 Avenue Pablo Picasso
92000 NANTERRE

Bureau : E2 565D (aile Nord-Est)
Tél. : 01.78.66.61.14
Tél. mobile : 06.49.51.11.88
Fax : 01.78.66.93.47

Mail : didier.ros@edf.fr
Mail du support : support-oracle-niveau3@edf.fr

Mail du support : support-postgres-niveau3@edf.fr

Site du support : https://sissi.edf.fr/web/expertise-sgbd/accueil

 


Ce message et toutes les pièces jointes (ci-après le 'Message') sont établis à l'intention exclusive des destinataires et les informations qui y figurent sont strictement confidentielles. Toute utilisation de ce Message non conforme à sa destination, toute diffusion ou toute publication totale ou partielle, est interdite sauf autorisation expresse.

Si vous n'êtes pas le destinataire de ce Message, il vous est interdit de le copier, de le faire suivre, de le divulguer ou d'en utiliser tout ou partie. Si vous avez reçu ce Message par erreur, merci de le supprimer de votre système, ainsi que toutes ses copies, et de n'en garder aucune trace sur quelque support que ce soit. Nous vous remercions également d'en avertir immédiatement l'expéditeur par retour du message.

Il est impossible de garantir que les communications par messagerie électronique arrivent en temps utile, sont sécurisées ou dénuées de toute erreur ou virus.
____________________________________________________

This message and any attachments (the 'Message') are intended solely for the addressees. The information contained in this Message is confidential. Any use of information contained in this Message not in accord with its purpose, any dissemination or disclosure, either whole or partial, is prohibited except formal approval.

If you are not the addressee, you may not copy, forward, disclose or use any part of it. If you have received this message in error, please delete it and all copies from your system and notify the sender immediately by return message.

E-mail communication cannot be guaranteed to be timely secure, error or virus-free.

Re: [SQL] ERROR: invalid byte sequence for encoding "UTF8": 0xe9 0x6d 0x61

От
Feike Steenbergen
Дата:


On 10 October 2017 at 15:28, ROS Didier <didier.ros@edf.fr> wrote:
>     -- Securisation du search_path: les schémas de confiance, puis 
> The error message is :
>
> ERROR:  invalid byte sequence for encoding "UTF8": 0xe9 0x6d 0x61

I'm guessing your client is actually using an encoding of something like LATIN1, but is identifying itself as UTF8.

The sequence 0xe9 0x6d 0x61 in LATIN1 is "éma", which matches your line with 'les schémas'.
However, 0xe9 is invalid in UTF8.

To validate this, you could do the following:

select current_setting('client_encoding');
set client_encoding to 'LATIN1';
select current_setting('client_encoding');

before executing your command.


By the way, did you know you can set configuration parameters per function on a different way as well:

CREATE OR REPLACE FUNCTION abc()
RETURNS boolean
LANGUAGE SQL AS $$
SELECT true;
$$
SET search_path TO 'public, pg_temp';