Árvore de páginas

O client do DB2 no Linux utiliza a configuração de locale do sistema operacional para fazer a conexão com o SGBD e para fazer as conversões de caracteres entre os dois. Para que as operações de inserção e/ou atualização de campos caractere funcionem corretamente com caracteres especiais é necessário que a variável de ambiente LC_CTYPE esteja alinhada com o codepage do SGBD. Essa variável é responsável pelo codepage de strings no Linux.

No exemplo abaixo o SGBD está configurado com codepage 1252, mas o LC_CTYPE da máquina em que está o DBAccess está como UTF-8.


Conexão do DBAccess com o DB2, mostrando as configurações do banco acessado:

...


15/05/2018 16:46:54 : [INFO] Connection [DB2/TEC2012-DB2] using client library [/usr/lib64/libodbc.so] (ODBC10)
15/05/2018 16:46:54 : --------------- Initial Connection Check-Up ---------------
Database......: DB2
Environment...: TEC2012-DB2
TableSpace....: 
IndexSpace....: 
Compression ..: NONE
logfilsiz  ...: 1024
logprimary ...: 13
logsecond  ...: 12
codepage   ...: 1252
codeset    ...: IBM-1252
collate_in ...: 
DBMS Isolation ...:   
-----------------------------------------------------------

...


Configuração de locale na máquina do DBAccess:

tec-db-linux:~ # locale
LANG=POSIX
LC_CTYPE=en_US.UTF-8
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=
tec-db-linux:~ #


Caso haja essa diferença de configuração, caso seja feito a inserção de caracteres especiais num campo caractere ou memo, a inserção colocará caracteres diferentes e mostrará uma mensagem de warning (se habilitado as chaves DBWarings e MsgWarnings) da forma:

Warning : 0 (01517) (RC=1) - [IBM][CLI Driver][DB2/NT64] SQLSTATE 01517: A character that could not be converted was replaced with a substitute character.


Para corrigir essa situação deve-se colocar a variável de ambiente LC_CTYPE no mesmo codepage do banco (no caso 1252):

export LC_CTYPE=POSIX
  • Sem rótulos