Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
#26 17/03/2020 18:27:46
- pifor
- Membre
Re : Administration base Postgresql via SSH
Désolé il manquait un ';' pour la commande "show client_encoding'
\encoding
show client_encoding;
\l intensetbm
INSERT INTO adm_pay (pay_nom_eng,pay_nom_fra,pay_abr) VALUES ('Ivory Coast','Côte d Ivoire','CIV');
select * from_adm_pay where pay_abr='CIV';
Dernière modification par pifor (17/03/2020 18:28:09)
Pierre
Hors ligne
#27 17/03/2020 18:29:02
- pifor
- Membre
Re : Administration base Postgresql via SSH
LECARROU a écrit :j'ai modifier runpsql.bat et je n'ai plus l'avertissement au lancement de psql (cool)
si je fait
INSERT INTO adm_pay (pay_nom_eng,pay_nom_fra,pay_abr) VALUES ('Ivory Coast','Côte d Ivoire','CIV');
directement dans la console pslq pas de problème, il m'insère correctement les accents
mais si je lance le script depuis la console : \i 'D:/Users/jl3/intensetbm_test/intensetbm-etool/script2.txt' toujours un problème sur les accents...
Il faut vérifier/corriger l'encodage du fichier .txt contenant le script (D:/Users/jl3/intensetbm_test/intensetbm-etool/script2.txt par exemple)
OK mais comment fait-on avec Windows ?
Pierre
Hors ligne
#28 17/03/2020 18:30:24
- LECARROU
- Membre
Re : Administration base Postgresql via SSH
WIN1252
client_encoding
-----------------
WIN1252
(1 ligne)
Liste des bases de données
Nom | Propriétaire | Encodage | Collationnement | Type caract. | Droits d'accès
------------+--------------+----------+--------------------+--------------------+-------------------------------
intensetbm | postgres | UTF8 | French_France.1252 | French_France.1252 | =Tc/postgres +
| | | | | postgres=CTc/postgres +
| | | | | intensetbm_admin=CTc/postgres
(1 ligne)
INSERT 0 1
deleted | pay_ide | pay_nom_eng | pay_abr | pay_nom_fra
---------+---------+-------------+---------+----------------
| 2 | Ivory Coast | CIV | Côte d Ivoire
| 8 | Ivory Coast | CIV | Côte d Ivoire
| 9 | Ivory Coast | CIV | Côte d Ivoire
(3 lignes)
il ne faut considérer que la dernière ligne de la tabel
Hors ligne
#29 17/03/2020 18:33:27
- pifor
- Membre
Re : Administration base Postgresql via SSH
Le paramètrage jeu de caractère côté client Windows et côté serveur PostgreSQL me semblent corrects.
Reste la piste de l'encodage du script sur Windows et peut-être autre chose que je ne vois pas.
Dernière modification par pifor (17/03/2020 18:33:41)
Pierre
Hors ligne
#30 17/03/2020 18:34:24
- LECARROU
- Membre
Re : Administration base Postgresql via SSH
quand j'enregistre mon fichier avec blocnote l'encodage est bien UTF-8
Hors ligne
#31 17/03/2020 18:35:41
- LECARROU
- Membre
Re : Administration base Postgresql via SSH
bon merci quand même ; )
bonne fin de journée
Hors ligne
#32 17/03/2020 19:21:41
- pifor
- Membre
Re : Administration base Postgresql via SSH
Remarque générale qui n'explique pas le problème précis qu'on a: au début de la discussion vous avez dit que vous prévoyez d'avoir une base sur Linux et vous développez avec une base Windows. Si vous utilisez la même version de PostgreSQL vous devez avoir en général le même comportement de la base mais pas sur certaines fonctionnalités liées aux jeux de caractères car PostgreSQL peut avoir un comportement différent liés aux paramètres de création de la base qui ne sont pas les mêmes sur Windows et Linux. Ainsi si je crée une base sur Linux avec PG 10.12 j'ai par défaut:
postgres=# create database demo;
CREATE DATABASE
postgres=# \l demo;
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
------+----------+----------+-------------+-------------+-------------------
demo | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
(1 row)
postgres=#
Je constate que le paramètres LC_COLLATE et LC_CTYPE sont différents avec Windows: ce qui peut entraîner des comportements différents, par exemple dans le tri de chaînes de caractères.
Dernière modification par pifor (17/03/2020 19:27:18)
Pierre
Hors ligne
#33 17/03/2020 21:30:00
- pifor
- Membre
Re : Administration base Postgresql via SSH
J'ai fait des tests avec PostgreSQL 10.12 sur Windows 2016, j'ai créé un script SQL avec notepad.exe.
Que le script soit sauvegardé en ANSI ou UTF-8 ne semble influer ni sur l'affichage ni sur le stockage d'une chaîne de caractères avec un caractère accentué.
Mon script en entrée:
select version();
\encoding
show client_encoding;
\l demo
\d t
truncate t;
insert into t values('Côte');
select * from t;
Résultat
select version();
version
-------------------------------------------------------------
PostgreSQL 10.12, compiled by Visual C++ build 1800, 64-bit
(1 ligne)
WIN1252
show client_encoding;
client_encoding
-----------------
WIN1252
(1 ligne)
Liste des bases de données
Nom | Propriétaire | Encodage | Collationnement | Type caract. | Droits d'accès
------+--------------+----------+--------------------+--------------------+----------------
demo | postgres | UTF8 | French_France.1252 | French_France.1252 |
(1 ligne)
Table « public.t »
Colonne | Type | Collationnement | NULL-able | Par défaut
---------+------+-----------------+-----------+------------
c | text | | |
truncate t;
TRUNCATE TABLE
insert into t values('Côte');
INSERT 0 1
select * from t;
c
------
Côte
(1 ligne)
Dernière modification par pifor (17/03/2020 21:31:23)
Pierre
Hors ligne
#34 18/03/2020 02:27:57
- jmarsac
- Membre
Re : Administration base Postgresql via SSH
jmarsac a écrit :Il faut vérifier/corriger l'encodage du fichier .txt contenant le script (D:/Users/jl3/intensetbm_test/intensetbm-etool/script2.txt par exemple)
OK mais comment fait-on avec Windows ?
Le plus simple est d'utiliser notepad++ qui permet de contrôler et convertir l'encodage du fichier (client psql 12, server 11.2); j'ai utilisé deux scripts différents :
itest-ansi.sql (encodé en ANSI) :
\encoding
set client_encoding to 'Win1252';
show client_encoding;
\l b1
insert into t2 values ('öéùàè','ANSI');
select * from t2;
set client_encoding to 'UTF8';
show client_encoding;
select * from t2;
set client_encoding to 'Win1252';
show client_encoding;
select * from t2;
itest-utf8.sql (encodé en UTF8) :
\encoding
set client_encoding to 'Win1252';
show client_encoding;
\l b1
insert into t2 values ('öéùàè','UTF8');
select * from t2;
set client_encoding to 'UTF8';
show client_encoding;
select * from t2;
set client_encoding to 'Win1252';
show client_encoding;
select * from t2;
********* QUERY **********
create table t2 (a text,script_encoding text);
**************************
CREATE TABLE
********* QUERY **********
set client_encoding to 'Win1252';
**************************
SET
********* QUERY **********
show client_encoding;
**************************
client_encoding
-----------------
WIN1252
(1 row)
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
------+----------+----------+--------------------+--------------------+-------------------
b1 | postgres | UTF8 | French_France.1252 | French_France.1252 |
(1 row)
********* QUERY **********
insert into t2 values ('öéùàè','ANSI');
**************************
INSERT 0 1
********* QUERY **********
select * from t2;
**************************
a | script_encoding
-------+-----------------
öéùàè | ANSI
(1 row)
********* QUERY **********
set client_encoding to 'UTF8';
**************************
SET
********* QUERY **********
show client_encoding;
**************************
client_encoding
-----------------
UTF8
(1 row)
********* QUERY **********
select * from t2;
**************************
a | script_encoding
-------+-----------------
öéùà è | ANSI
(1 row)
********* QUERY **********
set client_encoding to 'win1252';
**************************
SET
********* QUERY **********
select * from t2;
**************************
a | script_encoding
-------+-----------------
öéùàè | ANSI
(1 row)
********* QUERY **********
set client_encoding to 'Win1252';
**************************
SET
********* QUERY **********
show client_encoding;
**************************
client_encoding
-----------------
WIN1252
(1 row)
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
------+----------+----------+--------------------+--------------------+-------------------
b1 | postgres | UTF8 | French_France.1252 | French_France.1252 |
(1 row)
********* QUERY **********
insert into t2 values ('öéùà è','UTF8');
**************************
INSERT 0 1
********* QUERY **********
select * from t2;
**************************
a | script_encoding
------------+-----------------
öéùàè | ANSI
öéùà è | UTF8
(2 rows)
********* QUERY **********
set client_encoding to 'UTF8';
**************************
SET
********* QUERY **********
show client_encoding;
**************************
client_encoding
-----------------
UTF8
(1 row)
********* QUERY **********
select * from t2;
**************************
a | script_encoding
------------+-----------------
öéùà è | ANSI
öéùàè | UTF8
(2 rows)
********* QUERY **********
set client_encoding to 'Win1252';
**************************
SET
********* QUERY **********
show client_encoding;
**************************
client_encoding
-----------------
WIN1252
(1 row)
********* QUERY **********
select * from t2;
**************************
a | script_encoding
------------+-----------------
öéùàè | ANSI
öéùà è | UTF8
(2 rows)
Comme le dit Pifor, l'important est de bien configurer l'encodage du client et d'utiliser la bonne page de code dans la console (chcp)
Hors ligne