3 votes

L'exécution de SQL*Plus avec bash provoque un encodage erroné

J'ai un problème avec l'exécution de SQL*Plus dans bash. Voici mon code

#!/bin/bash

#curl http://192.168.168.165:8080/api_test/xsql/f_exp_order_1016.xsql > script.sql
wget -O script.sql 192.168.168.165:8080/api_test/xsql/f_exp_order_1016.xsql
set NLS_LANG=_.UTF8
sqlplus /nolog << ENDL
connect login/password 
set sqlblanklines on
start script.sql
exit
<<endl

Je télécharge les instructions d'insertion depuis notre intranet, je les insère dans un fichier sql et je les exécute via SQL*Plus. Cela fonctionne très bien. Mon problème est que lorsque j'enregistre le fichier script.sql, mon encodage est erroné. Tous les caractères spéciaux (comme íášc) sont cassés et cela entraîne l'insertion de caractères erronés dans ma base de données. L'encodage de ce fichier est UTF-8, et UTF-8 est également défini sur la page XSQL de notre intranet. Je ne sais donc pas où se situe le problème.

Et tout conseil concernant mon script est le bienvenu, je suis totalement novice en matière de scripts Linux :-)

9voto

Petr Mensik Points 205

Ok, le problème n'était pas dans le fichier (l'encodage était UTF-8 comme il se doit) mais dans le paramétrage de la variable environnementale NLS_LANG d'Oracle. La solution a donc été de mettre cette ligne avant d'exécuter SQL*Plus script

NLS_LANG="CZECH_CZECH REPUBLIC.UTF8" export NLS_LANG

0voto

David Locke Points 4419

Il se peut que vous deviez convertir vos encarts en une page de code ISO8859. Vérifiez l'encodage utilisé sur votre serveur Oracle. L'encodage doit ressembler à "WE8ISO8859P1" ou à quelque chose de similaire, ce qui indique la page de code ISO utilisée.

Vous pouvez utiliser iconv ou quelque chose de similaire pour convertir votre fichier de l'encodage UTF-8 à l'encodage ISO8859, puis essayez de l'exécuter via SQL*Plus.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X