Se si eseguono query che confrontano tipi di dati stringa con database remoti Db2® , che utilizzano il tipo di connessione Db2 non in modalità di compatibilità VARCHAR2 , tali query potrebbero restituire risultati non corretti.
Sintomi
Si eseguono alcune query che confrontano i tipi di dati stringa (CHAR o VARCHAR) con i database remoti Db2 che non sono in modalità di compatibilità VARCHAR2 e utilizzano il tipo di collegamento Db2 . Si ottengono risultati diversi da quelli ottenuti in un database locale poiché le query vengono inviate e seguono le regole di confronto Db2 remote.
select col_char from testable1 union select col_varchar from testable2;
select col_char from testable1 except select col_varchar from testable2;
select col_char from testable1 intersect select col_varchar from testable2;
È possibile controllare la configurazione del database Db2 remoto eseguendo il comando db2 get db
cfg
. Nel seguente esempio, il database non si trova in modalità di compatibilità VARCHAR2 .
$ db2 get db cfg for testdb |grep "Varchar2 compatibility"
Varchar2 compatibility = OFF
Risoluzione del problema
- Eseguire la seguente istruzione per identificare l'ID connessione interno (
CID
) per l'origine dati.select * from DVSYS.LISTRDBC;
Questa query elenca tutte le connessioni nel cluster. Individuare la riga nell'output per la connessione o le connessioni che si desidera modificare.
- Eseguire il seguente comando per modificare il parametro COLLATING_SEQUENCE di questa connessione in
'I'
per ogni connessione che si desidera modificare.ALTER SERVER QPLEX OPTIONS (add <CID>@collating_sequence 'I');
Ad esempio:ALTER SERVER QPLEX OPTIONS (add DB210000@collating_sequence 'I');