ibmdb / node-ibm_db

IBM DB2 and IBM Informix bindings for node
MIT License
188 stars 151 forks source link

Incorrect results with XML containing Chinese data on Linux. Same code works on Windows. #959

Closed markddrake closed 7 months ago

markddrake commented 8 months ago

Please provide below information while opening an issue to understand your problem

[db2inst1@1b0693d46d58 /]$

DB2 CFG

db2 => get db cfg

   Database Configuration for Database

Database configuration release level = 0x1500 Database release level = 0x1500

Database territory = us Database code page = 1208 Database code set = utf-8 Database country/region code = 1 Database collating sequence = IDENTITY Alternate collating sequence (ALT_COLLATE) = Number compatibility = OFF Varchar2 compatibility = OFF Date compatibility = OFF Database page size = 4096

Statement concentrator (STMT_CONC) = OFF

Discovery support for this database (DISCOVER_DB) = ENABLE

Restrict access = NO Default query optimization class (DFT_QUERYOPT) = 5 Degree of parallelism (DFT_DEGREE) = ANY Continue upon arithmetic exceptions (DFT_SQLMATHWARN) = NO Default refresh age (DFT_REFRESH_AGE) = 0 Default maintained table types for opt (DFT_MTTB_TYPES) = SYSTEM Number of frequent values retained (NUM_FREQVALUES) = 10 Number of quantiles retained (NUM_QUANTILES) = 20

Decimal floating point rounding mode (DECFLT_ROUNDING) = ROUND_HALF_EVEN

DECIMAL arithmetic mode (DEC_ARITHMETIC) =

Backup pending = NO

All committed transactions have been written to disk = NO Rollforward pending = NO Restore pending = NO

Upgrade pending = NO

Multi-page file allocation enabled = YES

Log retain for recovery status = NO User exit for logging status = YES

Self tuning memory (SELF_TUNING_MEM) = ON Size of database shared memory (4KB) (DATABASE_MEMORY) = AUTOMATIC(164848) Database memory threshold (DB_MEM_THRESH) = 100 Max storage for lock list (4KB) (LOCKLIST) = AUTOMATIC(4096) Percent. of lock lists per application (MAXLOCKS) = AUTOMATIC(60) Package cache size (4KB) (PCKCACHESZ) = AUTOMATIC(320) Sort heap thres for shared sorts (4KB) (SHEAPTHRES_SHR) = AUTOMATIC(5000) Sort list heap (4KB) (SORTHEAP) = AUTOMATIC(1000)

Database heap (4KB) (DBHEAP) = AUTOMATIC(5137) Catalog cache size (4KB) (CATALOGCACHE_SZ) = 300 Log buffer size (4KB) (LOGBUFSZ) = 2152 Utilities heap size (4KB) (UTIL_HEAP_SZ) = AUTOMATIC(74870) SQL statement heap (4KB) (STMTHEAP) = AUTOMATIC(8192) Default application heap (4KB) (APPLHEAPSZ) = AUTOMATIC(1024) Application Memory Size (4KB) (APPL_MEMORY) = AUTOMATIC(40000) Statistics heap size (4KB) (STAT_HEAP_SZ) = AUTOMATIC(4384)

Interval for checking deadlock (ms) (DLCHKTIME) = 10000 Lock timeout (sec) (LOCKTIMEOUT) = -1

Changed pages threshold (CHNGPGS_THRESH) = 80 Number of asynchronous page cleaners (NUM_IOCLEANERS) = AUTOMATIC(4) Number of I/O servers (NUM_IOSERVERS) = AUTOMATIC(8) Sequential detect flag (SEQDETECT) = YES Default prefetch size (pages) (DFT_PREFETCH_SZ) = AUTOMATIC

Track modified pages (TRACKMOD) = NO

Default number of containers = 1 Default tablespace extentsize (pages) (DFT_EXTENT_SZ) = 32

Max number of active applications (MAXAPPLS) = AUTOMATIC(40) Average number of active applications (AVG_APPLS) = AUTOMATIC(1) Lifetime of cached credentials (AUTHN_CACHE_DURATION) = 3 Max number of users in the cache (AUTHN_CACHE_USERS) = 0 Max DB files open per database (MAXFILOP) = 61440

Active log space disk capacity (MB) (LOG_DISK_CAP) = 0 Log file size (4KB) (LOGFILSIZ) = 10240 Number of primary log files (LOGPRIMARY) = 16 Number of secondary log files (LOGSECOND) = 22 Changed path to log files (NEWLOGPATH) = Path to log files = /database/data/db2inst1/NODE0000/SQL00002/LOGSTREAM0000/ Overflow log path (OVERFLOWLOGPATH) = Mirror log path (MIRRORLOGPATH) = First active log file = S0004019.LOG Block log on disk full (BLK_LOG_DSK_FUL) = NO Block non logged operations (BLOCKNONLOGGED) = NO Percent max primary log space by transaction (MAX_LOG) = 0 Num. of active log files for 1 active UOW(NUM_LOG_SPAN) = 0

Percent log file reclaimed before soft chckpt (SOFTMAX) = 0 Target for oldest page in LBP (PAGE_AGE_TRGT_MCR) = 240

HADR database role = STANDARD HADR local host name (HADR_LOCAL_HOST) = HADR local service name (HADR_LOCAL_SVC) = HADR remote host name (HADR_REMOTE_HOST) = HADR remote service name (HADR_REMOTE_SVC) = HADR instance name of remote server (HADR_REMOTE_INST) = HADR timeout value (HADR_TIMEOUT) = 120 HADR target list (HADR_TARGET_LIST) = HADR log write synchronization mode (HADR_SYNCMODE) = NEARSYNC HADR spool log data limit (4KB) (HADR_SPOOL_LIMIT) = AUTOMATIC(0) HADR log replay delay (seconds) (HADR_REPLAY_DELAY) = 0 HADR peer window duration (seconds) (HADR_PEER_WINDOW) = 0

First log archive method (LOGARCHMETH1) = DISK:/database/logs/ Archive compression for logarchmeth1 (LOGARCHCOMPR1) = OFF Options for logarchmeth1 (LOGARCHOPT1) = Second log archive method (LOGARCHMETH2) = OFF Archive compression for logarchmeth2 (LOGARCHCOMPR2) = OFF Options for logarchmeth2 (LOGARCHOPT2) = Failover log archive path (FAILARCHPATH) = Number of log archive retries on error (NUMARCHRETRY) = 5 Log archive retry Delay (secs) (ARCHRETRYDELAY) = 20 Vendor options (VENDOROPT) =

Auto restart enabled (AUTORESTART) = ON Index re-creation time and redo index build (INDEXREC) = Log pages during index build (LOGINDEXBUILD) = OFF Default number of loadrec sessions (DFT_LOADREC_SES) = 1 Number of database backups to retain (NUM_DB_BACKUPS) = 12 Recovery history retention (days) (REC_HIS_RETENTN) = 90 Auto deletion of recovery objects (AUTO_DEL_REC_OBJ) = OFF

TSM management class (TSM_MGMTCLASS) = TSM node name (TSM_NODENAME) = TSM owner (TSM_OWNER) = TSM password (TSM_PASSWORD) =

Automatic maintenance (AUTO_MAINT) = ON Automatic database backup (AUTO_DB_BACKUP) = OFF Automatic table maintenance (AUTO_TBL_MAINT) = ON Automatic runstats (AUTO_RUNSTATS) = ON Real-time statistics (AUTO_STMT_STATS) = ON Statistical views (AUTO_STATS_VIEWS) = OFF Automatic sampling (AUTO_SAMPLING) = ON Automatic column group statistics (AUTO_CG_STATS) = OFF Automatic reorganization (AUTO_REORG) = OFF

Auto-Revalidation (AUTO_REVAL) = DEFERRED

Currently Committed (CUR_COMMIT) = ON CHAR output with DECIMAL input (DEC_TO_CHAR_FMT) = NEW Enable XML Character operations (ENABLE_XMLCHAR) = YES Enforce Constraint (DDL_CONSTRAINT_DEF) = YES Enable row compression by default (DDL_COMPRESSION_DEF) = NO Replication site ID (REPL_SITE_ID) = 0 Monitor Collect Settings Request metrics (MON_REQ_METRICS) = BASE Activity metrics (MON_ACT_METRICS) = BASE Object metrics (MON_OBJ_METRICS) = EXTENDED Routine data (MON_RTN_DATA) = NONE Routine executable list (MON_RTN_EXECLIST) = OFF Unit of work events (MON_UOW_DATA) = NONE UOW events with package list (MON_UOW_PKGLIST) = OFF UOW events with executable list (MON_UOW_EXECLIST) = OFF Lock timeout events (MON_LOCKTIMEOUT) = NONE Deadlock events (MON_DEADLOCK) = WITHOUT_HIST Lock wait events (MON_LOCKWAIT) = NONE Lock wait event threshold (MON_LW_THRESH) = 5000000 Number of package list entries (MON_PKGLIST_SZ) = 32 Lock event notification level (MON_LCK_MSG_LVL) = 1

SMTP Server (SMTP_SERVER) = SQL conditional compilation flags (SQL_CCFLAGS) = Section actuals setting (SECTION_ACTUALS) = NONE Connect procedure (CONNECT_PROC) = Adjust temporal SYSTEM_TIME period (SYSTIME_PERIOD_ADJ) = NO Log DDL Statements (LOG_DDL_STMTS) = NO Log Application Information (LOG_APPL_INFO) = NO Default data capture on new Schemas (DFT_SCHEMAS_DCC) = NO Strict I/O for EXTBL_LOCATION (EXTBL_STRICT_IO) = NO Allowed paths for external tables (EXTBL_LOCATION) = /database/config/db2inst1 Default table organization (DFT_TABLE_ORG) = ROW Default string units (STRING_UNITS) = SYSTEM National character string mapping (NCHAR_MAPPING) = CHAR_CU32 Database is in write suspend state = NO Extended row size support (EXTENDED_ROW_SZ) = ENABLE Encryption Library for Backup (ENCRLIB) = Encryption Options for Backup (ENCROPTS) =

WLM Collection Interval (minutes) (WLM_COLLECT_INT) = 0 Target agent load per CPU core (WLM_AGENT_LOAD_TRGT) = AUTOMATIC(14) WLM admission control enabled (WLM_ADMISSION_CTRL) = NO Allocated share of CPU resources (WLM_CPU_SHARES) = 1000 CPU share behavior (hard/soft) (WLM_CPU_SHARE_MODE) = HARD Maximum allowable CPU utilization (%) (WLM_CPU_LIMIT) = 0 Encrypted database = NO Procedural language stack trace (PL_STACK_TRACE) = NONE HADR SSL certificate label (HADR_SSL_LABEL) =


### For non-Windows system

C:\YADAMU-QA\YDB1>docker exec -it YADAMU-01 bash root@08c09ec59e37:/usr/src/YADAMU# uname Linux root@08c09ec59e37:/usr/src/YADAMU# uname -m x86_64 root@08c09ec59e37:/usr/src/YADAMU# node -v v20.8.0 root@08c09ec59e37:/usr/src/YADAMU# npm ls ibm_db yadamu@1.0.0 /usr/src/YADAMU `-- ibm_db@3.2.2


### For Windows system, output of below commands from windows command prompt:

c:\Development\YADAMU\src\scratch\db2>node -v v20.7.0

c:\Development\YADAMU\src\scratch\db2>npm ls ibm_db yadamu@1.0.0 c:\Development\YADAMU\src `-- ibm_db@3.2.2

c:\Development\YADAMU\src\scratch\db2>

TestCase as follows

import ibmdb from 'ibm_db'

async function main() { const cn = "DATABASE=SAMPLE;HOSTNAME=yadamu-db2;PORT=50000;PROTOCOL=TCPIP;UID=DB2INST1;PWD=oracle;"

const conn = await ibmdb.open(cn)
let results 

const SQL_XML_PARSING = "SET CURRENT IMPLICIT XMLPARSE OPTION = 'PRESERVE WHITESPACE'";
results = await conn.query(SQL_XML_PARSING)

results = await conn.query(`BEGIN DECLARE V_STATEMENT VARCHAR(300) DEFAULT 'drop table XML_TAB'; DECLARE CONTINUE HANDLER FOR SQLSTATE '42704' BEGIN  END;  EXECUTE IMMEDIATE V_STATEMENT; END;`)
console.log(results)

results = await conn.querySync(`create table XML_TAB(X XML )`);
console.log(results)

const data = [doc1,doc2,doc3,doc4]

let idx=0

try {
  const query = {
    sql:          `insert into XML_TAB (X) values (?)`
  , params: [{
       ParamType: 'ARRAY',
       DataType: 'CLOB',
       Data: data,
       Length : 8192
    }]
  , ArraySize: data.length
  }

  results = await conn.query(query);
  console.log(results)
} catch (e) {
  console.log(1,e)
}

console.log(data.length)

results = await conn.query(`select X, XMLSERIALIZE("X"  AS CLOB(2048) EXCLUDING XMLDECLARATION) "XX", XMLSERIALIZE("X"  AS BLOB(2048) EXCLUDING XMLDECLARATION) "YY" from XML_TAB`)

results.forEach((row,idx)  => {
  const str = row.YY.toString("utf-8")
  console.log(idx,data[idx].length,row.X.length,row.XX.length,str.length)
  console.log(idx,data[idx] === row.X, data[idx] === row.XX, row.X === row.XX )
  console.log(idx,data[idx].substring(0,20),row.X.substring(0,20),row.XX.substring(0,20),str.substring(0,20))
  if ((data[idx].length === row.XX.length) && (data[idx] !== row.XX)) {
    for (i=0;i++;i<data[idx].length) {
      if (data[idx][i] !== row.XX[i]) {
        console.log('Mismatch',i,data[idx][i],row.XX[i])
      }
    }
  }   
})

}

main().then(() => { console.log('success')}).catch((e) => { console.log(e) })

const doc1 = <Skills>熟悉所有销售环节,专业知识丰富。13 年来,为提高公司收入成绩卓著。在计划和预测销售、发展客户以及运用多种销售技巧方面具有一定经验。\n具有五年的销售管理经验,包括客户线索生成、销售人员管理以及销售区域管理。在管理由现场销售代表、产品演示人员和供应商组成的分布式销售网络过程中,能够利用各种管理风格和专业技能来进行有效管理和沟通。\n极佳的沟通和表达能力\n </Skills>

const doc2 = <Skills>熟悉所有销售环节,专业知识丰富。13 年来,为提高公司收入成绩卓著。在计划和预测销售、发展客户以及运用多种销售技巧方面具有一定经验。\n具有五年的销售管理经验,包括客户线索生成、销售人员管理以及销售区域管理。在管理由现场销售代表、产品演示人员和供应商组成的分布式销售网络过程中,能够利用各种管理风格和专业技能来进行有效管理和沟通。\n极佳的沟通和表达能力\n </Skills>;

const doc3 = <Skills>我是一名经验丰富的机械师,技术全面,不仅单独操作各种机械设备,还管理其他机械师的工作。我专攻诊断和精度检测,可以读懂设计图,能够妥善处理各方面的人际关系并具备良好的沟通能力来指导我管辖的机械师的工作. 与其他候选者相比,我拥有的机械工程学位使我对机械师行业在理论方面具有更深刻的了解,数学背景知识也更深厚.\n </Skills>;

const doc4 = <Skills>None worth mentioning\n </Skills>;

Running on Windows generates 

c:\Development\YADAMU\src\scratch\db2>node testXML2.js [] [] [] 4 0 197 243 197 537 0 false true false 0 熟悉所有销售环节,专业知 <?xml version="1.0" 熟悉所有销售环节,专业知 熟悉所有 1 197 243 197 537 1 false true false 1 熟悉所有销售环节,专业知 <?xml version="1.0" 熟悉所有销售环节,专业知 熟悉所有 2 175 221 175 475 2 false true false 2 我是一名经验丰富的机械师 <?xml version="1.0" 我是一名经验丰富的机械师 我是一å 3 43 89 43 43 3 false true false 3 None worth m <?xml version="1.0" None worth m None worth m success


Running same code on Linux results in

root@08c09ec59e37:/usr/src/YADAMU# node mnt/work/testXML2.js [] [] [] 4 0 197 250 206 537 0 false false false 0 熟悉所有销售环节,专业知 <?xml version="1.0" 熟悉所有销售环节,专业知 çæææ 1 197 250 206 537 1 false false false 1 熟悉所有销售环节,专业知 <?xml version="1.0" 熟悉所有销售环节,专业知 çæææ 2 175 234 190 475 2 false false false 2 我是一名经验丰富的机械师 <?xml version="1.0" 我是一名经验丰富的机械师 ææ¯ä¸å 3 43 87 43 43 3 false true false 3 None worth m <?xml version="1.0" None worth m None worth m success root@08c09ec59e37:/usr/src/YADAMU#


I think there are two issues here.

1. The contents of the CLOB returned by the XMLSerialize operation (Column XX) is corrupted in the Linux environment. The Length is not the same as the original data. In the Windows environment the lengths are the same.
2. In both environments the  Buffer containing BLOB returned by the XMLSerialize operation (Column YY) cannot be successfully converted back to a UTF-8 String
bimalkjha commented 8 months ago

@markddrake On Linux system, cd to ibm_db\test directory and then run .\trace mnt\work\testXML2.js. It will generate cli trace file 1.cli. Please open this file and check the data. Do it have correct data returned from db2 server? I'll try to reproduce the issue locally to find root cause. Thanks.

markddrake commented 8 months ago

Here's the file.. Not sure how to interpret it..

<db2trc_header>
Marker                  :  @TRACE@
Trace version           :      7.0
Platform                : Linux/X8664
Build level             : special_26260
maxBufferSize           : 33554432 bytes (32 MB)
auxBufferSize           : 0 bytes (0 MB)
allocationCount         : 0
DB2TRCD pid             : 0
Trace destination       : 1.trc
numSuspended            : 0
Trace starting time     : 2023-10-26-13.46.42.481429+000
Trace status            : UNKNOWN
Trace status change time: N/A
Buffer size             : 33554432 bytes (32 MB)
Allow buffer to wrap    : yes
Mask                    : *.*.*.*.*
Timestamps              : disabled
PID.TID mask            : all
Fixed data mask #1      : all
Fixed data mask #2      : all
Max system errors       : infinite
Treat this rc as sys err: none
sqlcodes for stoptrc    :  none
Search Pattern          : none
clitracelevel           : none
Member mask             : none
Application handle mask : none
Application ID mask     : none

</db2trc_header>

[ Process: 470, Thread: 140379070401600 ]
[ Date & Time:               10/26/2023 13:46:49.604317 ]
[ Product:                   QDB2/LINUXX8664 DB2 v11.5.8.0 ]
[ Level Identifier:          0609010F ]
[ CLI Driver Version:        10.01.0000 ]
[ Informational Tokens:      "DB2 v11.5.8.0","special_26260","DYN2301190517AMD64_26260","Fixpack 0" ]
[ Install Path:              /usr/src/YADAMU/node_modules/ibm_db/test/../installer/clidriver ]
[ db2cli.ini Location:       db2cli.ini file not found. ( rc = 100 ) ]
[ CLI Driver Type:           IBM Data Server Driver For ODBC and CLI ]
[ Hostname:             08c09ec59e37 ]

1301    SQLAllocHandle( fHandleType=SQL_HANDLE_ENV, hInput=0:0, phOutput=&0000000005807bc8 )
    ---> Time elapsed - 0 seconds

SQLAllocHandle( fHandleType=SQL_HANDLE_ENV, hInput=0:0, phOutput=0:1 )
1785    <--- SQL_SUCCESS   Time elapsed - +0.000000E+000 seconds

1786    SQLSetEnvAttr( hEnv=0:1, fAttribute=SQL_ATTR_ODBC_VERSION, vParam=3, cbParam=-5 )
    ---> Time elapsed - -1.032764E+000 seconds

SQLSetEnvAttr( )
1839    <--- SQL_SUCCESS   Time elapsed - -1.032764E+000 seconds

4775    SQLGetDiagRec( fHandleType=SQL_HANDLE_STMT, hHandle=1:1, iRecNumber=1, pszSqlState=&00007ffc2dee7972, pfNativeError=&00007ffc2dee796c, pszErrorMsg=&00007ffc2dee79c0, cbErrorMsgMax=1024, pcbErrorMsg=&00007ffc2dee796a )
    ---> Time elapsed - -8.081421E+008 seconds
( iRowNumber=-2, iColumnNumber=-2 )

SQLGetDiagRec( pszSqlState="24000", pfNativeError=-99999, pszErrorMsg="[IBM][CLI Driver] CLI0115E  Invalid cursor state. SQLSTATE=24000", pcbErrorMsg=64 )
4876    <--- SQL_SUCCESS   Time elapsed - -8.081421E+008 seconds

4877    SQLGetDiagRec( fHandleType=SQL_HANDLE_STMT, hHandle=1:1, iRecNumber=2, pszSqlState=&00007ffc2dee7972, pfNativeError=&00007ffc2dee796c, pszErrorMsg=&00007ffc2dee79c0, cbErrorMsgMax=1024, pcbErrorMsg=&00007ffc2dee796a )
    ---> Time elapsed - -1.941103E+009 seconds

SQLGetDiagRec( )
4893    <--- SQL_NO_DATA_FOUND   Time elapsed - -1.941103E+009 seconds

4894    SQLNumResultCols( hStmt=1:1, pcCol=&0000000005783120 )
    ---> Time elapsed - -8.081421E+008 seconds

SQLNumResultCols( pcCol=0 )
4911    <--- SQL_SUCCESS   Time elapsed - -8.081421E+008 seconds

4912    SQLMoreResults( hStmt=1:1 )
    ---> Time elapsed - -8.081421E+008 seconds

SQLMoreResults( )
4930    <--- SQL_NO_DATA_FOUND   Time elapsed - -8.081421E+008 seconds

4931    SQLFreeHandle( fHandleType=SQL_HANDLE_STMT, hHandle=1:1 )
    ---> Time elapsed - -8.081421E+008 seconds
( Caching Statement Structure=1 )

SQLFreeHandle( )
4958    <--- SQL_SUCCESS   Time elapsed - -8.081421E+008 seconds

5533    SQLGetDiagRec( fHandleType=SQL_HANDLE_STMT, hHandle=1:1, iRecNumber=1, pszSqlState=&00007ffc2dee7972, pfNativeError=&00007ffc2dee796c, pszErrorMsg=&00007ffc2dee79c0, cbErrorMsgMax=1024, pcbErrorMsg=&00007ffc2dee796a )
    ---> Time elapsed - -1.941103E+009 seconds
( iRowNumber=-2, iColumnNumber=-2 )

SQLGetDiagRec( pszSqlState="24000", pfNativeError=-99999, pszErrorMsg="[IBM][CLI Driver] CLI0115E  Invalid cursor state. SQLSTATE=24000", pcbErrorMsg=64 )
5618    <--- SQL_SUCCESS   Time elapsed - -1.941103E+009 seconds

5619    SQLGetDiagRec( fHandleType=SQL_HANDLE_STMT, hHandle=1:1, iRecNumber=2, pszSqlState=&00007ffc2dee7972, pfNativeError=&00007ffc2dee796c, pszErrorMsg=&00007ffc2dee79c0, cbErrorMsgMax=1024, pcbErrorMsg=&00007ffc2dee796a )
    ---> Time elapsed - -1.941103E+009 seconds

SQLGetDiagRec( )
5635    <--- SQL_NO_DATA_FOUND   Time elapsed - -1.941103E+009 seconds

5636    SQLNumResultCols( hStmt=1:1, pcCol=&0000000005847d00 )
    ---> Time elapsed - -8.081421E+008 seconds

SQLNumResultCols( pcCol=0 )
5653    <--- SQL_SUCCESS   Time elapsed - -8.081421E+008 seconds

5654    SQLMoreResults( hStmt=1:1 )
    ---> Time elapsed - -8.081421E+008 seconds

SQLMoreResults( )
5681    <--- SQL_NO_DATA_FOUND   Time elapsed - -8.081421E+008 seconds

5682    SQLFreeHandle( fHandleType=SQL_HANDLE_STMT, hHandle=1:1 )
    ---> Time elapsed - -8.081421E+008 seconds
( Caching Statement Structure=1 )

SQLFreeHandle( )
5712    <--- SQL_SUCCESS   Time elapsed - -8.081421E+008 seconds

5720    SQLAllo
4424    SQLAllocHandle( fHandleType=SQL_HANDLE_STMT, hInput=0:1, phOutput=&00000000058454e0 )
    ---> Time elapsed - 0 seconds

SQLAllocHandle( fHandleType=SQL_HANDLE_STMT, hInput=0:1, phOutput=1:1 )
4435    <--- SQL_SUCCESS   Time elapsed - +0.000000E+000 seconds

4436    SQLExecDirect( hStmt=1:1 )
    ---> Time elapsed - -1.014384E+000 seconds
( pszSqlStr="SET CURRENT IMPLICIT XMLPARSE OPTION = 'PRESERVE WHITESPACE'", cbSqlStr=60 )
( StmtOut="SET CURRENT IMPLICIT XMLPARSE OPTION = 'PRESERVE WHITESPACE'" )
( Package="SYSSH200          ", Section=65 )
( COMMIT REPLY RECEIVED=1 )

SQLExecDirect( )
4747    <--- SQL_SUCCESS   Time elapsed - -1.014384E+000 seconds

5995    SQLAllocHandle( fHandleType=SQL_HANDLE_STMT, hInput=0:1, phOutput=&0000000005827550 )
    ---> Time elapsed - -1.941103E+009 seconds

SQLAllocHandle( fHandleType=SQL_HANDLE_STMT, hInput=0:1, phOutput=1:1 )
6006    <--- SQL_SUCCESS   Time elapsed - -1.941103E+009 seconds

6007    SQLPrepare( hStmt=1:1 )
    ---> Time elapsed - -8.081421E+008 seconds
( pszSqlStr="insert into XML_TAB (X) values (?)", cbSqlStr=34 )
( StmtOut="insert into XML_TAB (X) values (?)" )

SQLPrepare( )
6042    <--- SQL_SUCCESS   Time elapsed - -8.081421E+008 seconds

6043    SQLSetStmtAttr( hStmt=1:1, fOption=SQL_ATTR_PARAM_BIND_TYPE, pvParam=<NULL pointer>, uiStrLen=0 )
    ---> Time elapsed - -1.941103E+009 seconds

SQLSetStmtAttr( )
6059    <--- SQL_SUCCESS   Time elapsed - -1.941103E+009 seconds

6060    SQLSetStmtAttr( hStmt=1:1, fOption=SQL_ATTR_PARAMSET_SIZE, pvParam=&0000000000000004, uiStrLen=0 )
    ---> Time elapsed - -8.081421E+008 seconds

SQLSetStmtAttr( )
6078    <--- SQL_SUCCESS   Time elapsed - -8.081421E+008 seconds

6079    SQLBindParameter( hStmt=1:1, iPar=1, fParamType=SQL_PARAM_INPUT, fCType=SQL_C_CHAR, fSQLType=SQL_CLOB, cbColDef=8192, ibScale=0, rgbValue=&0000000005890ef0, cbValueMax=8192, pcbValue=&00000000058023f0 )
    ---> Time elapsed - -8.081421E+008 seconds

SQLBindParameter( )
6105    <--- SQL_SUCCESS   Time elapsed - -8.081421E+008 seconds

6106    SQLExecute( hStmt=1:1 )
    ---> Time elapsed - -8.081421E+008 seconds
( Package="SYSSH200          ", Section=4 )
( Row=1, iPar=1, fCType=SQL_C_CHAR, rgbValue="<Skills>熟悉所有销售环节,专业知识丰富。13 年来,为提高公司收入成绩卓著。在计划和预测销售、发展客户以及运用多种销售技巧方面具有一定经验。
具有五年的销售管理经验,包括客户线索生成、销售人员管理以及销售区域管理。在管理由现场销售代表、产品演示人员和供应商组成的分布式销售网络过程中,能够利用各种管理风格和专业技能来进行有效管理和沟通。
极佳的沟通和表达能力
    </Skills>" - x'3C536B696C6C733EE7869FE68289E68980E69C89E99480E594AEE78EAFE88A82EFBC8CE4B893E4B89AE79FA5E8AF86E4B8B0E5AF8CE38082313320E5B9B4E69DA5EFBC8CE4B8BAE68F90E9AB98E585ACE58FB8E694B6E585A5E68890E7BBA9E58D93E89197E38082E59CA8E8AEA1E58892E5928CE9A284E6B58BE99480E594AEE38081E58F91E5B195E5AEA2E688B7E4BBA5E58F8AE8BF90E794A8E5A49AE7A78DE99480E594AEE68A80E5B7A7E696B9E99DA2E585B7E69C89E4B880E5AE9AE7BB8FE9AA8CE380820AE585B7E69C89E4BA94E5B9B4E79A84E99480E594AEE7AEA1E79086E7BB8FE9AA8CEFBC8CE58C85E68BACE5AEA2E688B7E7BABFE7B4A2E7949FE68890E38081E99480E594AEE4BABAE59198E7AEA1E79086E4BBA5E58F8AE99480E594AEE58CBAE59F9FE7AEA1E79086E38082E59CA8E7AEA1E79086E794B1E78EB0E59CBAE99480E594AEE4BBA3E8A1A8E38081E4BAA7E59381E6BC94E7A4BAE4BABAE59198E5928CE4BE9BE5BA94E59586E7BB84E68890E79A84E58886E5B883E5BC8FE99480E594AEE7BD91E7BB9CE8BF87E7A88BE4B8ADEFBC8CE883BDE5A49FE588A9E794A8E59084E7A78DE7AEA1E79086E9A38EE6A0BCE5928CE4B893E4B89AE68A80E883BDE69DA5E8BF9BE8A18CE69C89E69588E7AEA1E79086E5928CE6B29FE9809AE380820AE69E81E4BDB3E79A84E6B29FE9809AE5928CE8A1A8E8BEBEE883BDE58A9B0A202020203C2F536B696C6C733E', pcbValue=537 )
( Row=2, iPar=1, fCType=SQL_C_CHAR, rgbValue="<Skills>熟悉所有销售环节,专业知识丰富。13 年来,为提高公司收入成绩卓著。在计划和预测销售、发展客户以及运用多种销售技巧方面具有一定经验。
具有五年的销售磈andle( fHandleType=SQL_HANDLE_STMT, hInput=0:1, phOutput=&00007ffc2dee6978 )
    ---> Time elapsed - -1.941103E+009 seconds

SQLAllocHandle( fHandleType=SQL_HANDLE_STMT, hInput=0:1, phOutput=1:1 )
5731    <--- SQL_SUCCESS   Time elapsed - -1.941103E+009 seconds

5732    SQLExecDirect( hStmt=1:1 )
    ---> Time elapsed - -8.081421E+008 seconds
( pszSqlStr="create table XML_TAB(X XML )", cbSqlStr=28 )
( StmtOut="create table XML_TAB(X XML )" )
( Package="SYSSH200          ", Section=65 )
( COMMIT REPLY RECEIVED=1 )

SQLExecDirect( )
5941    <--- SQL_SUCCESS   Time elapsed - -8.081421E+008 seconds

5942    SQLNumResultCols( hStmt=1:1, pcCol=&0000000005847070 )
    ---> Time elapsed - -1.941103E+009 seconds

SQLNumResultCols( pcCol=0 )
5959    <--- SQL_SUCCESS   Time elapsed - -1.941103E+009 seconds

5960    SQLFreeHandle( fHandleType=SQL_HANDLE_STMT, hHandle=1:1 )
    ---> Time elapsed - -8.081421E+008 seconds
( Caching Statement Structure=1 )

SQLFreeHandle( )
5987    <--- SQL_SUCCESS   Time elapsed - -8.081421E+008 seconds

6718    SQLGetDiagRec( fHandleType=SQL_HANDLE_STMT, hHandle=1:1, iRecNumber=1, pszSqlState=&00007ffc2dee7972, pfNativeError=&00007ffc2dee796c, pszErrorMsg=&00007ffc2dee79c0, cbErrorMsgMax=1024, pcbErrorMsg=&00007ffc2dee796a )
    ---> Time elapsed - -1.941103E+009 seconds
( iRowNumber=-2, iColumnNumber=-2 )

SQLGetDiagRec( pszSqlState="24000", pfNativeError=-99999, pszErrorMsg="[IBM][CLI Driver] CLI0115E  Invalid cursor state. SQLSTATE=24000", pcbErrorMsg=64 )
6803    <--- SQL_SUCCESS   Time elapsed - -1.941103E+009 seconds

6804    SQLGetDiagRec( fHandleType=SQL_HANDLE_STMT, hHandle=1:1, iRecNumber=2, pszSqlState=&00007ffc2dee7972, pfNativeError=&00007ffc2dee796c, pszErrorMsg=&00007ffc2dee79c0, cbErrorMsgMax=1024, pcbErrorMsg=&00007ffc2dee796a )
    ---> Time elapsed - -1.941103E+009 seconds

SQLGetDiagRec( )
6820    <--- SQL_NO_DATA_FOUND   Time elapsed - -1.941103E+009 seconds

6821    SQLNumResultCols( hStmt=1:1, pcCol=&0000000005807940 )
    ---> Time elapsed - -8.081421E+008 seconds

SQLNumResultCols( pcCol=0 )
6838    <--- SQL_SUCCESS   Time elapsed - -8.081421E+008 seconds

6839    SQLMoreResults( hStmt=1:1 )
    ---> Time elapsed - -8.081421E+008 seconds

SQLMoreResults( )
6857    <--- SQL_NO_DATA_FOUND   Time elapsed - -8.081421E+008 seconds

6858    SQLFreeHandle( fHandleType=SQL_HANDLE_STMT, hHandle=1:1 )
    ---> Time elapsed - -8.081421E+008 seconds
( Caching Statement Structure=1 )

SQLFreeHandle( )
6895    <--- SQL_SUCCESS   Time elapsed - -8.081421E+008 seconds

7606    SQLNumResultCols( hStmt=1:1, pcCol=&0000000005847d00 )
    ---> Time elapsed - -1.941103E+009 seconds

SQLNumResultCols( pcCol=3 )
7623    <--- SQL_SUCCESS   Time elapsed - -1.941103E+009 seconds

7624    SQLColAttribute( hStmt=1:1, iCol=1, fDescType=SQL_DESC_LABEL, rgbDesc=&00007ffc2dee79c0, cbDescMax=1024, pcbDesc=&00007ffc2dee79bc, pfDesc=<NULL pointer> )
    ---> Time elapsed - -8.081421E+008 seconds

SQLColAttribute( pCharAttribute="X", psCharAttributeByteLen=1 )
7685    <--- SQL_SUCCESS   Time elapsed - -8.081421E+008 seconds

7686    SQLColAttribute( hStmt=1:1, iCol=1, fDescType=SQL_DESC_DISPLAY_SIZE, rgbDesc=<NULL pointer>, cbDescMax=0, pcbDesc=<NULL pointer>, pfDesc=&0000000005827554 )
    ---> Time elapsed - -8.081421E+008 seconds

SQLColAttribute( piNumericAttribute=0 )
7707    <--- SQL_SUCCESS   Time elapsed - -8.081421E+008 seconds

7708    SQLColAttribute( hStmt=1:1, iCol=1, fDescType=SQL_DESC_PRECISION, rgbDesc=<NULL pointer>, cbDescMax=0, pcbDesc=<NULL pointer>, pfDesc=&0000000005827558 )
    ---> Time elapsed - -8.081421E+008 seconds

SQLColAttribute( piNumericAttribute=0 )
7729    <--- SQL_SUCCESS   Time elapsed - -8.081421E+008 seconds

7730    SQLColAttribute( hStmt=1:1, iCol=1, fDescType=SQL_DESC_SCALE, rgbDesc=<NULL pointer>, cbDescMax=0, pcbDesc=<NULL pointer>, pfDesc=&0000000005827556 )
    ---> Time elapsed - -8.081421E+008 seconds

SQLColAttribute( piNumericAttribute=0 )
7751    <--- SQL_SUCCESS   Time elapsed - -8.081421E+008 seconds

7752    SQLColAttribute( hStmt=1:1, iCol=1, fDescType=SQL_DESC_LENGTH, rgbDesc=<NULL pointer>, cbDescMax=0, pcbDesc=<NULL pointer>, pfDesc=&000000000582755a )
    ---> Time elapsed - -8.081421E+008 seconds

SQLColAttribute( piNumericAttribute=0 )
7773    <--- SQL_SUCCESS   Time elapsed - -8.081421E+008 seconds

7774    SQLColAttribute( hStmt=1:1, iCol=1, fDescType=SQL_DESC_CONCISE_TYPE, rgbDesc=<NULL pointer>, cbDescMax=0, pcbDesc=<NULL pointer>, pfDesc=&000000000582755c )
    ---> Time elapsed - -8.081421E+008 seconds

SQLColAttribute( piNumericAttribute=-370 )
7795    <--- SQL_SUCCESS   Time elapsed - -8.081421E+008 seconds

7796    SQLColAttribute( hStmt=1:1, iCol=1, fDescType=SQL_DESC_TYPE_NAME, rgbDesc=&0000000005806510, cbDescMax=1024, pcbDesc=&00007ffc2dee79be, pfDesc=<NULL pointer> )
    ---> Time elapsed - -8.081421E+008 seconds

SQLColAttribute( pCharAttribute="XML", psCharAttributeByteLen=3 )
7821    <--- SQL_SUCCESS   Time elapsed - -8.081421E+008 seconds

7822    SQLColAttribute( hStmt=1:1, iCol=2, fDescType=SQL_DESC_LABEL, rgbDesc=&00007ffc2dee79c0, cbDescMax=1024, pcbDesc=&00007ffc2dee79bc, pfDesc=<NULL pointer> )
    ---> Time elapsed - -8.081421E+008 seconds

SQLColAttribute( pCharAttribute="XX", psCharAttributeByteLen=2 )
7864    <--- SQL_SUCCESS   Time elapsed - -8.081421E+008 seconds

7865    SQLColAttribute( hStmt=1:1, iCol=2, fDescType=SQL_DESC_DISPLAY_SIZE, rgbDesc=<NULL pointer>, cbDescMax=0, pcbDesc=<NULL pointer>, pfDesc=&000000000582757c )
    ---> Time elapsed - -8.081421E+008 seconds

SQLColAttribute( piNumericAttribute=2048 )
7886    <--- SQL_SUCCESS   Time elapsed - -8.081421E+008 seconds

7887    SQLColAttribute( hStmt=1:1, iCol=2, fDescType=SQL_DESC_PRECISION, rgbDesc=<NULL pointer>, cbDescMax=0, pcbDesc=<NULL pointer>, pfDesc=&0000000005827580 )
    ---> Time elapsed - -8.081421E+008 seconds

SQLColAttribute( piNumericAttribute=0 )
7908    <--- SQL_SUCCESS   Time elapsed - -8.081421E+008 seconds

7909    SQLColAttribute( hStmt=1:1, iCol=2, fDescType=SQL_DESC_SCALE, rgbDesc=<NULL pointer>, cbDescMax=0, pcbDesc=<NULL pointer>, pfDesc=&000000000582757e )
    ---> Time elapsed - -8.081421E+008 seconds

SQLColAttribute( piNumericAttribute=0 )
7930    <--- SQL_SUCCESS   Time elapsed - -8.081421E+008 seconds

7931    SQLColAttribute( hStmt=1:1, iCol=2, fDescType=SQL_DESC_LENGTH, rgbDesc=<NULL pointer>, cbDescMax=0, pcbDesc=<NULL pointer>, pfDesc=&0000000005827582 )
    ---> Time elapsed - -8.081421E+008 seconds

SQLColAttribute( piNumericAttribute=2048 )
7952    <--- SQL_SUCCESS   Time elapsed - -8.081421E+008 seconds

7953    SQLColAttribute( hStmt=1:1, iCol=2, fDescType=SQL_DESC_CONCISE_TYPE, rgbDesc=<NULL pointer>, cbDescMax=0, pcbDesc=<NULL pointer>, pfDesc=&0000000005827584 )
    ---> Time elapsed - -8.081421E+008 seconds

SQLColAttribute( piNumericAttribute=-99 )
7974    <--- SQL_SUCCESS   Time elapsed - -8.081421E+008 seconds

7975    SQLColAttribute( hStmt=1:1, iCol=2, fDescType=SQL_DESC_TYPE_NAME, rgbDesc=&000000000573a5e0, cbDescMax=1024, pcbDesc=&00007ffc2dee79be, pfDesc=<NULL pointer> )
    ---> Time elapsed - -8.081421E+008 seconds

SQLColAttribute( pCharAttribute="CLOB", psCharAttributeByteLen=4 )
8000    <--- SQL_SUCCESS   Time elapsed - -8.081421E+008 seconds

8001    SQLColAttribute( hStmt=1:1, iCol=3, fDescType=SQL_DESC_LABEL, rgbDesc=&00007ffc2dee79c0, cbDescMax=1024, pcbDesc=&00007ffc2dee79bc, pfDesc=<NULL pointer> )
    ---> Time elapsed - -8.081421E+008 seconds

SQLColAttribute( pCharAttribute="YY", psCharAttributeByteLen=2 )
8043    <--- SQL_SUCCESS   Time elapsed - -8.081421E+008 seconds

8044    SQLColAttribute( hStmt=1:1, iCol=3, fDescType=SQL_DESC_DISPLAY_SIZE, rgbDesc=<NULL pointer>, cbDescMax=0, pcbDesc=<NULL pointer>, pfDesc=&00000000058275a4 )
    ---> Time elapsed - -8.081421E+008 seconds

SQLColAttribute( piNumericAttribute=4096 )
8065    <--- SQL_SUCCESS   Time elapsed - -8.081421E+008 seconds

8066    SQLColAttribute( hStmt=1:1, iCol=3, fDescType=SQL_DESC_PRECISION, rgbDesc=<NULL pointer>, cbDescMax=0, pcbDesc=<NULL pointer>, pfDesc=&00000000058275a8 )
    ---> Time elapsed - -8.081421E+008 seconds

SQLColAttribute( piNumericAttribute=0 )
8087    <--- SQL_SUCCESS   Time elapsed - -8.081421E+008 seconds

8088    SQLColAttribute( hStmt=1:1, iCol=3, fDescType=SQL_DESC_SCALE, rgbDesc=<NULL pointer>, cbDescMax=0, pcbDesc=<NULL pointer>, pfDesc=&00000000058275a6 )
    ---> Time elapsed - -8.081421E+008 seconds

SQLColAttribute( piNumericAttribute=0 )
8109    <--- SQL_SUCCESS   Time elapsed - -8.081421E+008 seconds

8110    SQLColAttribute( hStmt=1:1, iCol=3, fDescType=SQL_DESC_LENGTH, rgbDesc=<NULL pointer>, cbDescMax=0, pcbDesc=<NULL pointer>, pfDesc=&00000000058275aa )
    ---> Time elapsed - -8.081421E+008 seconds

SQLColAttribute( piNumericAttribute=2048 )
8131    <--- SQL_SUCCESS   Time elapsed - -8.081421E+008 seconds

8132    SQLColAttribute( hStmt=1:1, iCol=3, fDescType=SQL_DESC_CONCISE_TYPE, rgbDesc=<NULL pointer>, cbDescMax=0, pcbDesc=<NULL pointer>, pfDesc=&00000000058275ac )
    ---> Time elapsed - -8.081421E+008 seconds

SQLColAttribute( piNumericAttribute=-98 )
8153    <--- SQL_SUCCESS   Time elapsed - -8.081421E+008 seconds

8154    SQLColAttribute( hStmt=1:1, iCol=3, fDescType=SQL_DESC_TYPE_NAME, rgbDesc=&00000000057e8ba0, cbDescMax=1024, pcbDesc=&00007ffc2dee79be, pfDesc=<NULL pointer> )
    ---> Time elapsed - -8.081421E+008 seconds

SQLColAttribute( pCharAttribute="BLOB", psCharAttributeByteLen=4 )
8179    <--- SQL_SUCCESS   Time elapsed - -8.081421E+008 seconds

8180    SQLGetData( hStmt=1:1, iCol=1, fCType=SQL_C_CHAR, rgbValue=&0000000005867c60, cbValueMax=1023, pcbValue=&00007ffc2dee7c3c )
    ---> Time elapsed - -8.081421E+008 seconds

SQLGetData( rgbValue="<?xml version="1.0" encoding="ISO-8859-1" ?><Skills>熟悉所有销售环节,专业知识丰富。13 年来,为提高劬司收劥成绩卓著。在计划和预测销售、发展客户以及运用多种销售技巧方面劷有一定经验。
劷有五年的销售管理经验,匊括客户线索生成、销售人员管理以及销售区域管理。在管理由现场销售代表、产品演示人员和供应商组成的分布式销售网络过程中,能够利用各种管理风格和专业技能来进行有效管理和沟通。
极佳的沟通和表达能力
    </Skills>" - x'3C3F786D6C2076657273696F6E3D22312E302220656E636F64696E673D2249534F2D383835392D3122203F3E3C536B696C6C733EE7869FE68289E68980E69C89E99480E594AEE78EAFE88A82EFBC8CE4B893E4B89AE79FA5E8AF86E4B8B0E5AF8CE38082313320E5B9B4E69DA5EFBC8CE4B8BAE68F90E9AB98E50AACE58FB8E694B6E50AA5E68890E7BBA9E58D93E89197E38082E59CA8E8AEA1E58892E5928CE9A284E6B58BE99480E594AEE38081E58F91E5B195E5AEA2E688B7E4BBA5E58F8AE8BF90E794A8E5A49AE7A78DE99480E594AEE68A80E5B7A7E696B9E99DA2E50AB7E69C89E4B880E5AE9AE7BB8FE9AA8CE380820AE50AB7E69C89E4BA94E5B9B4E79A84E99480E594AEE7AEA1E79086E7BB8FE9AA8CEFBC8CE58C0AE68BACE5AEA2E688B7E7BABFE7B4A2E7949FE68890E38081E99480E594AEE4BABAE59198E7AEA1E79086E4BBA5E58F8AE99480E594AEE58CBAE59F9FE7AEA1E79086E38082E59CA8E7AEA1E79086E794B1E78EB0E59CBAE99480E594AEE4BBA3E8A1A8E38081E4BAA7E59381E6BC94E7A4BAE4BABAE59198E5928CE4BE9BE5BA94E59586E7BB84E68890E79A84E58886E5B883E5BC8FE99480E594AEE7BD91E7BB9CE8BF87E7A88BE4B8ADEFBC8CE883BDE5A49FE588A9E794A8E59084E7A78DE7AEA1E79086E9A38EE6A0BCE5928CE4B893E4B89AE68A80E883BDE69DA5E8BF9BE8A18CE69C89E69588E7AEA1E79086E5928CE6B29FE9809AE380820AE69E81E4BDB3E79A84E6B29FE9809AE5928CE8A1A8E8BEBEE883BDE58A9B0A202020203C2F536B696C6C733E', pcbValue=581 )
8279    <--- SQL_SUCCESS   Time elapsed - -8.081421E+008 seconds

8280    SQLGetData( hStmt=1:1, iCol=2, fCType=SQL_C_CHAR, rgbValue=&0000000005867c60, cbValueMax=1023, pcbValue=&00007ffc2dee7c3c )
    ---> Time elapsed - -8.081421E+008 seconds

SQLGetData( rgbValue="<Skills>熟悉所有销售环节,专业知识丰富。13 年来,为提高劬司收劥成绩卓著。在计划和预测销售、发展客户以及运用多种销售技巧方面劷有一定经验。
劷有五年的销售管理经验,匊括客户线索生成、销售人员管理以及销售区域管理。在管理由现场销售代表、产品演示人员和供应商组成的分布式销售网络过程中,能够利用各种管理风格和专业技能来进行有效管理和沟通。
极佳的沟通和表达能力
    </Skills>" - x'3C536B696C6C733EE7869FE68289E68980E69C89E99480E594AEE78EAFE88A82EFBC8CE4B893E4B89AE79FA5E8AF86E4B8B0E5AF8CE38082313320E5B9B4E69DA5EFBC8CE4B8BAE68F90E9AB98E50AACE58FB8E694B6E50AA5E68890E7BBA9E58D93E89197E38082E59CA8E8AEA1E58892E5928CE9A284E6B58BE99480E594AEE38081E58F91E5B195E5AEA2E688B7E4BBA5E58F8AE8BF90E794A8E5A49AE7A78DE99480E594AEE68A80E5B7A7E696B9E99DA2E50AB7E69C89E4B880E5AE9AE7BB8FE9AA8CE380820AE50AB7E69C89E4BA94E5B9B4E79A84E99480E594AEE7AEA1E79086E7BB8FE9AA8CEFBC8CE58C0AE68BACE5AEA2E688B7E7BABFE7B4A2E7949FE68890E38081E99480E594AEE4BABAE59198E7AEA1E79086E4BBA5E58F8AE99480E594AEE58CBAE59F9FE7AEA1E79086E38082E59CA8E7AEA1E79086E794B1E78EB0E59CBAE99480E594AEE4BBA3E8A1A8E38081E4BAA7E59381E6BC94E7A4BAE4BABAE59198E5928CE4BE9BE5BA94E59586E7BB84E68890E79A84E58886E5B883E5BC8FE99480E594AEE7BD91E7BB9CE8BF87E7A88BE4B8ADEFBC8CE883BDE5A49FE588A9E794A8E59084E7A78DE7AEA1E79086E9A38EE6A0BCE5928CE4B893E4B89AE68A80E883BDE69DA5E8BF9BE8A18CE69C89E69588E7AEA1E79086E5928CE6B29FE9809AE380820AE69E81E4BDB3E79A84E6B29FE9809AE5928CE8A1A8E8BEBEE883BDE58A9B0A202020203C2F536B696C6C733E', pcbValue=537 )
8352    <--- SQL_SUCCESS   Time elapsed - -8.081421E+008 seconds

8353    SQLGetData( hStmt=1:1, iCol=3, fCType=SQL_C_BINARY, rgbValue=&0000000005867c60, cbValueMax=1022, pcbValue=&00007ffc2dee7c3c )
    ---> Time elapsed - -8.081421E+008 seconds

SQLGetData( rgbValue=x'3C536B696C6C733EC3A7C286C29FC3A6C282C289C3A6C289C280C3A6C29CC289C3A9C294C280C3A5C294C2AEC3A7C28EC2AFC3A8C28AC282C3AFC2BCC28CC3A4C2B8C293C3A4C2B8C29AC3A7C29FC2A5C3A8C2AFC286C3A4C2B8C2B0C3A5C2AFC28CC3A3C280C282313320C3A5C2B9C2B4C3A6C29DC2A5C3AFC2BCC28CC3A4C2B8C2BAC3A6C28FC290C3A9C2ABC298C3A50AC2ACC3A5C28FC2B8C3A6C294C2B6C3A50AC2A5C3A6C288C290C3A7C2BBC2A9C3A5C28DC293C3A8C291C297C3A3C280C282C3A5C29CC2A8C3A8C2AEC2A1C3A5C288C292C3A5C292C28CC3A9C2A2C284C3A6C2B5C28BC3A9C294C280C3A5C294C2AEC3A3C280C281C3A5C28FC291C3A5C2B1C295C3A5C2AEC2A2C3A6C288C2B7C3A4C2BBC2A5C3A5C28FC28AC3A8C2BFC290C3A7C294C2A8C3A5C2A4C29AC3A7C2A7C28DC3A9C294C280C3A5C294C2AEC3A6C28AC280C3A5C2B7C2A7C3A6C296C2B9C3A9C29DC2A2C3A50AC2B7C3A6C29CC289C3A4C2B8C280C3A5C2AEC29AC3A7C2BBC28FC3A9C2AAC28CC3A3C280C2820AC3A50AC2B7C3A6C29CC289C3A4C2BAC294C3A5C2B9C2B4C3A7C29AC284C3A9C294C280C3A5C294C2AEC3A7C2AEC2A1C3A7C290C286C3A7C2BBC28FC3A9C2AAC28CC3AFC2BCC28CC3A5C28C0AC3A6C28BC2ACC3A5C2AEC2A2C3A6C288C2B7C3A7C2BAC2BFC3A7C2B4C2A2C3A7C294C29FC3A6C288C290C3A3C280C281C3A9C294C280C3A5C294C2AEC3A4C2BAC2BAC3A5C291C298C3A7C2AEC2A1C3A7C290C286C3A4C2BBC2A5C3A5C28FC28AC3A9C294C280C3A5C294C2AEC3A5C28CC2BAC3A5C29FC29FC3A7C2AEC2A1C3A7C290C286C3A3C280C282C3A5C29CC2A8C3A7C2AEC2A1C3A7C290C286C3A7C294C2B1C3A7C28EC2B0C3A5C29CC2BAC3A9C294C280C3A5C294C2AEC3A4C2BBC2A3C3A8C2A1C2A8C3A3C280C281C3A4C2BAC2A7C3A5C293C281C3A6C2BCC294C3A7C2A4C2BAC3A4C2BAC2BAC3A5C291C298C3A5C292C28CC3A4C2BEC29BC3A5C2BAC294C3A5C295C286C3A7C2BBC284C3A6C288C290C3A7C29AC284C3A5C288C286C3A5C2B8C283C3A5C2BCC28FC3A9C294C280C3A5C294C2AEC3A7C2BDC291C3A7C2BBC29CC3A8C2BFC287C3A7C2A8C28BC3A4C2B8C2ADC3AFC2BCC28CC3A8C283C2BDC3A5C2A4C29FC3A5C288C2A9C3A7C294C2A8C3A5C290C284C3A7C2A7C28DC3A7C2AEC2A1C3A7C290C286C3A9C2A3C28EC3A6C2A0C2BCC3A5C292C28CC3A4C2B8C293C3A4C2B8C29AC3A6C28AC280C3A8C283C2BDC3A6C29DC2A5C3A8C2BFC29BC3A8C2A1C28CC3A6C29CC289C3A6C295C288C3A7C2AEC2A1C3A7C290C286C3A5C292C28CC3A6C2B2C29FC3A9C280C29AC3A3C280C2820AC3A6C29EC281C3A4C2BDC2B3C3A7C29AC284C3A6C2B2C29FC3A9C280C29AC3A5C292C28CC3A8C2A1C2A8C3A8C2BEC2BEC3A8C283C2BD', pcbValue=0 )
8401    <--- SQL_SUCCESS_WITH_INFO   Time elapsed - -8.081421E+008 seconds

8402    SQLGetData( hStmt=1:1, iCol=3, fCType=SQL_C_BINARY, rgbValue=&0000000005826b1e, cbValueMax=20, pcbValue=&00007ffc2dee7c3c )
    ---> Time elapsed - -8.081421E+008 seconds
( Unretrieved error message="[IBM][CLI Driver] CLI0002W  Data truncated. SQLSTATE=01004" )

SQLGetData( rgbValue=x'C3A5C28AC29B0A202020203C2F536B696C6C733E', pcbValue=20 )
8481    <--- SQL_SUCCESS   Time elapsed - -8.081421E+008 seconds

8736    SQLGetData( hStmt=1:1, iCol=1, fCType=SQL_C_CHAR, rgbValue=&0000000005867c60, cbValueMax=1023, pcbValue=&00007ffc2dee7c3c )
    ---> Time elapsed - -1.941103E+009 seconds

SQLGetData( rgbValue="<?xml version="1.0" encoding="ISO-8859-1" ?><Skills>熟悉所有销售环节,专业知识丰富。13 年来,为提高劬司收劥成绩卓著。在计划和预测销售、发展客户以及运用多种销售技巧方面劷有一定经验。
劷有五年的销售管理经验,匊括客户线索生成、销售人员管理以及销售区域管理。在管理由现场销售代表、产品演示人员和供应商组成的分布式销售网络过程中,能够利用各种管理风格和专业技能来进行有效管理和沟通。
极佳的沟通和表达能力
    </Skills>" - x'3C3F786D6C2076657273696F6E3D22312E302220656E636F64696E673D2249534F2D383835392D3122203F3E3C536B696C6C733EE7869FE68289E68980E69C89E99480E594AEE78EAFE88A82EFBC8CE4B893E4B89AE79FA5E8AF86E4B8B0E5AF8CE38082313320E5B9B4E69DA5EFBC8CE4B8BAE68F90E9AB98E50AACE58FB8E694B6E50AA5E68890E7BBA9E58D93E89197E38082E59CA8E8AEA1E58892E5928CE9A284E6B58BE99480E594AEE38081E58F91E5B195E5AEA2E688B7E4BBA5E58F8AE8BF90E794A8E5A49AE7A78DE99480E594AEE68A80E5B7A7E696B9E99DA2E50AB7E69C89E4B880E5AE9AE7BB8FE9AA8CE380820AE50AB7E69C89E4BA94E5B9B4E79A84E99480E594AEE7AEA1E79086E7BB8FE9AA8CEFBC8CE58C0AE68BACE5AEA2E688B7E7BABFE7B4A2E7949FE68890E38081E99480E594AEE4BABAE59198E7AEA1E79086E4BBA5E58F8AE99480E594AEE58CBAE59F9FE7AEA1E79086E38082E59CA8E7AEA1E79086E794B1E78EB0E59CBAE99480E594AEE4BBA3E8A1A8E38081E4BAA7E59381E6BC94E7A4BAE4BABAE59198E5928CE4BE9BE5BA94E59586E7BB84E68890E79A84E58886E5B883E5BC8FE99480E594AEE7BD91E7BB9CE8BF87E7A88BE4B8ADEFBC8CE883BDE5A49FE588A9E794A8E59084E7A78DE7AEA1E79086E9A38EE6A0BCE5928CE4B893E4B89AE68A80E883BDE69DA5E8BF9BE8A18CE69C89E69588E7AEA1E79086E5928CE6B29FE9809AE380820AE69E81E4BDB3E79A84E6B29FE9809AE5928CE8A1A8E8BEBEE883BDE58A9B0A202020203C2F536B696C6C733E', pcbValue=581 )
8775    <--- SQL_SUCCESS   Time elapsed - -1.941103E+009 seconds

8776    SQLGetData( hStmt=1:1, iCol=2, fCType=SQL_C_CHAR, rgbValue=&0000000005867c60, cbValueMax=1023, pcbValue=&00007ffc2dee7c3c )
    ---> Time elapsed - -8.081421E+008 seconds

SQLGetData( rgbValue="<Skills>熟悉所有销售环节,专业知识丰富。13 年来,为提高劬司收劥成绩卓著。在计划和预测销售、发展客户以及运用多种销售技巧方面劷有一定经验。
劷有五年的销售管理经验,匊括客户线索生成、销售人员管理以及销售区域管理。在管理由现场销售代表、产品演示人员和供应商组成的分布式销售网络过程中,能够利用各种管理风格和专业技能来进行有效管理和沟通。
极佳的沟通和表达能力
    </Skills>" - x'3C536B696C6C733EE7869FE68289E68980E69C89E99480E594AEE78EAFE88A82EFBC8CE4B893E4B89AE79FA5E8AF86E4B8B0E5AF8CE38082313320E5B9B4E69DA5EFBC8CE4B8BAE68F90E9AB98E50AACE58FB8E694B6E50AA5E68890E7BBA9E58D93E89197E38082E59CA8E8AEA1E58892E5928CE9A284E6B58BE99480E594AEE38081E58F91E5B195E5AEA2E688B7E4BBA5E58F8AE8BF90E794A8E5A49AE7A78DE99480E594AEE68A80E5B7A7E696B9E99DA2E50AB7E69C89E4B880E5AE9AE7BB8FE9AA8CE380820AE50AB7E69C89E4BA94E5B9B4E79A84E99480E594AEE7AEA1E79086E7BB8FE9AA8CEFBC8CE58C0AE68BACE5AEA2E688B7E7BABFE7B4A2E7949FE68890E38081E99480E594AEE4BABAE59198E7AEA1E79086E4BBA5E58F8AE99480E594AEE58CBAE59F9FE7AEA1E79086E38082E59CA8E7AEA1E79086E794B1E78EB0E59CBAE99480E594AEE4BBA3E8A1A8E38081E4BAA7E59381E6BC94E7A4BAE4BABAE59198E5928CE4BE9BE5BA94E59586E7BB84E68890E79A84E58886E5B883E5BC8FE99480E594AEE7BD91E7BB9CE8BF87E7A88BE4B8ADEFBC8CE883BDE5A49FE588A9E794A8E59084E7A78DE7AEA1E79086E9A38EE6A0BCE5928CE4B893E4B89AE68A80E883BDE69DA5E8BF9BE8A18CE69C89E69588E7AEA1E79086E5928CE6B29FE9809AE380820AE69E81E4BDB3E79A84E6B29FE9809AE5928CE8A1A8E8BEBEE883BDE58A9B0A202020203C2F536B696C6C733E', pcbValue=537 )
8844    <--- SQL_SUCCESS   Time elapsed - -8.081421E+008 seconds

8845    SQLGetData( hStmt=1:1, iCol=3, fCType=SQL_C_BINARY, rgbValue=&0000000005867c60, cbValueMax=1022, pcbValue=&00007ffc2dee7c3c )
    ---> Time elapsed - -8.081421E+008 seconds

SQLGetData( rgbValue=x'3C536B696C6C733EC3A7C286C29FC3A6C282C289C3A6C289C280C3A6C29CC289C3A9C294C280C3A5C294C2AEC3A7C28EC2AFC3A8C28AC282C3AFC2BCC28CC3A4C2B8C293C3A4C2B8C29AC3A7C29FC2A5C3A8C2AFC286C3A4C2B8C2B0C3A5C2AFC28CC3A3C280C282313320C3A5C2B9C2B4C3A6C29DC2A5C3AFC2BCC28CC3A4C2B8C2BAC3A6C28FC290C3A9C2ABC298C3A50AC2ACC3A5C28FC2B8C3A6C294C2B6C3A50AC2A5C3A6C288C290C3A7C2BBC2A9C3A5C28DC293C3A8C291C297C3A3C280C282C3A5C29CC2A8C3A8C2AEC2A1C3A5C288C292C3A5C292C28CC3A9C2A2C284C3A6C2B5C28BC3A9C294C280C3A5C294C2AEC3A3C280C281C3A5C28FC291C3A5C2B1C295C3A5C2AEC2A2C3A6C288C2B7C3A4C2BBC2A5C3A5C28FC28AC3A8C2BFC290C3A7C294C2A8C3A5C2A4C29AC3A7C2A7C28DC3A9C294C280C3A5C294C2AEC3A6C28AC280C3A5C2B7C2A7C3A6C296C2B9C3A9C29DC2A2C3A50AC2B7C3A6C29CC289C3A4C2B8C280C3A5C2AEC29AC3A7C2BBC28FC3A9C2AAC28CC3A3C280C2820AC3A50AC2B7C3A6C29CC289C3A4C2BAC294C3A5C2B9C2B4C3A7C29AC284C3A9C294C280C3A5C294C2AEC3A7C2AEC2A1C3A7C290C286C3A7C2BBC28FC3A9C2AAC28CC3AFC2BCC28CC3A5C28C0AC3A6C28BC2ACC3A5C2AEC2A2C3A6C288C2B7C3A7C2BAC2BFC3A7C2B4C2A2C3A7C294C29FC3A6C288C290C3A3C280C281C3A9C294C280C3A5C294C2AEC3A4C2BAC2BAC3A5C291C298C3A7C2AEC2A1C3A7C290C286C3A4C2BBC2A5C3A5C28FC28AC3A9C294C280C3A5C294C2AEC3A5C28CC2BAC3A5C29FC29FC3A7C2AEC2A1C3A7C290C286C3A3C280C282C3A5C29CC2A8C3A7C2AEC2A1C3A7C290C286C3A7C294C2B1C3A7C28EC2B0C3A5C29CC2BAC3A9C294C280C3A5C294C2AEC3A4C2BBC2A3C3A8C2A1C2A8C3A3C280C281C3A4C2BAC2A7C3A5C293C281C3A6C2BCC294C3A7C2A4C2BAC3A4C2BAC2BAC3A5C291C298C3A5C292C28CC3A4C2BEC29BC3A5C2BAC294C3A5C295C286C3A7C2BBC284C3A6C288C290C3A7C29AC284C3A5C288C286C3A5C2B8C283C3A5C2BCC28FC3A9C294C280C3A5C294C2AEC3A7C2BDC291C3A7C2BBC29CC3A8C2BFC287C3A7C2A8C28BC3A4C2B8C2ADC3AFC2BCC28CC3A8C283C2BDC3A5C2A4C29FC3A5C288C2A9C3A7C294C2A8C3A5C290C284C3A7C2A7C28DC3A7C2AEC2A1C3A7C290C286C3A9C2A3C28EC3A6C2A0C2BCC3A5C292C28CC3A4C2B8C293C3A4C2B8C29AC3A6C28AC280C3A8C283C2BDC3A6C29DC2A5C3A8C2BFC29BC3A8C2A1C28CC3A6C29CC289C3A6C295C288C3A7C2AEC2A1C3A7C290C286C3A5C292C28CC3A6C2B2C29FC3A9C280C29AC3A3C280C2820AC3A6C29EC281C3A4C2BDC2B3C3A7C29AC284C3A6C2B2C29FC3A9C280C29AC3A5C292C28CC3A8C2A1C2A8C3A8C2BEC2BEC3A8C283C2BD', pcbValue=0 )
8893    <--- SQL_SUCCESS_WITH_INFO   Time elapsed - -8.081421E+008 seconds

8894    SQLGetData( hStmt=1:1, iCol=3, fCType=SQL_C_BINARY, rgbValue=&000000000586522e, cbValueMax=20, pcbValue=&00007ffc2dee7c3c )
    ---> Time elapsed - -8.081421E+008 seconds
( Unretrieved error message="[IBM][CLI Driver] CLI0002W  Data truncated. SQLSTATE=01004" )

SQLGetData( rgbValue=x'C3A5C28AC29B0A202020203C2F536B696C6C733E', pcbValue=20 )
8973    <--- SQL_SUCCESS   Time elapsed - -8.081421E+008 seconds

9228    SQLGetData( hStmt=1:1, iCol=1, fCType=SQL_C_CHAR, rgbValue=&0000000005867c60, cbValueMax=1023, pcbValue=&00007ffc2dee7c3c )
    ---> Time elapsed - -1.941103E+009 seconds

SQLGetData( rgbValue="<?xml version="1.0" encoding="ISO-8859-1" ?><Skills>我是一名经验丰富的机械师,技术动面,不今单独操作各种机械设备,还管理劶他机械师的工作。我专攻诊断和精度检测,可以读懂设计图,能够妥善处理各方面的人陊劳系并劷备良好的沟通能力来指导我管辖的机械师的工作. 与劶他候选耊相比,我拥有的机械工程学位使我对机械师行业在理论方面劷有更深刻的了解,数学背景知识也更深厚.
    </Skills>" - x'3C3F786D6C2076657273696F6E3D22312E302220656E636F64696E673D2249534F2D383835392D3122203F3E3C536B696C6C733EE68891E698AFE4B880E5908DE7BB8FE9AA8CE4B8B0E5AF8CE79A84E69CBAE6A2B0E5B888EFBC8CE68A80E69CAFE50AA8E99DA2EFBC8CE4B88DE4BB0AE58D95E78BACE6938DE4BD9CE59084E7A78DE69CBAE6A2B0E8AEBEE5A487EFBC8CE8BF98E7AEA1E79086E50AB6E4BB96E69CBAE6A2B0E5B888E79A84E5B7A5E4BD9CE38082E68891E4B893E694BBE8AF8AE696ADE5928CE7B2BEE5BAA6E6A380E6B58BEFBC8CE58FAFE4BBA5E8AFBBE68782E8AEBEE8AEA1E59BBEEFBC8CE883BDE5A49FE5A6A5E59684E5A484E79086E59084E696B9E99DA2E79A84E4BABAE9990AE50AB3E7B3BBE5B9B6E50AB7E5A487E889AFE5A5BDE79A84E6B29FE9809AE883BDE58A9BE69DA5E68C87E5AFBCE68891E7AEA1E8BE96E79A84E69CBAE6A2B0E5B888E79A84E5B7A5E4BD9C2E20E4B88EE50AB6E4BB96E58099E98089E8800AE79BB8E6AF94EFBC8CE68891E68BA5E69C89E79A84E69CBAE6A2B0E5B7A5E7A88BE5ADA6E4BD8DE4BDBFE68891E5AFB9E69CBAE6A2B0E5B888E8A18CE4B89AE59CA8E79086E8AEBAE696B9E99DA2E50AB7E69C89E69BB4E6B7B1E588BBE79A84E4BA86E8A7A3EFBC8CE695B0E5ADA6E8838CE699AFE79FA5E8AF86E4B99FE69BB4E6B7B1E58E9A2E0A202020203C2F536B696C6C733E', pcbValue=519 )
9266    <--- SQL_SUCCESS   Time elapsed - -1.941103E+009 seconds

9267    SQLGetData( hStmt=1:1, iCol=2, fCType=SQL_C_CHAR, rgbValue=&0000000005867c60, cbValueMax=1023, pcbValue=&00007ffc2dee7c3c )
    ---> Time elapsed - -8.081421E+008 seconds

SQLGetData( rgbValue="<Skills>我是一名经验丰富的机械师,技术动面,不今单独操作各种机械设备,还管理劶他机械师的工作。我专攻诊断和精度检测,可以读懂设计图,能够妥善处理各方面的人陊劳系并劷备良好的沟通能力来指导我管辖的机械师的工作. 与劶他候选耊相比,我拥有的机械工程学位使我对机械师行业在理论方面劷有更深刻的了解,数学背景知识也更深厚.
    </Skills>" - x'3C536B696C6C733EE68891E698AFE4B880E5908DE7BB8FE9AA8CE4B8B0E5AF8CE79A84E69CBAE6A2B0E5B888EFBC8CE68A80E69CAFE50AA8E99DA2EFBC8CE4B88DE4BB0AE58D95E78BACE6938DE4BD9CE59084E7A78DE69CBAE6A2B0E8AEBEE5A487EFBC8CE8BF98E7AEA1E79086E50AB6E4BB96E69CBAE6A2B0E5B888E79A84E5B7A5E4BD9CE38082E68891E4B893E694BBE8AF8AE696ADE5928CE7B2BEE5BAA6E6A380E6B58BEFBC8CE58FAFE4BBA5E8AFBBE68782E8AEBEE8AEA1E59BBEEFBC8CE883BDE5A49FE5A6A5E59684E5A484E79086E59084E696B9E99DA2E79A84E4BABAE9990AE50AB3E7B3BBE5B9B6E50AB7E5A487E889AFE5A5BDE79A84E6B29FE9809AE883BDE58A9BE69DA5E68C87E5AFBCE68891E7AEA1E8BE96E79A84E69CBAE6A2B0E5B888E79A84E5B7A5E4BD9C2E20E4B88EE50AB6E4BB96E58099E98089E8800AE79BB8E6AF94EFBC8CE68891E68BA5E69C89E79A84E69CBAE6A2B0E5B7A5E7A88BE5ADA6E4BD8DE4BDBFE68891E5AFB9E69CBAE6A2B0E5B888E8A18CE4B89AE59CA8E79086E8AEBAE696B9E99DA2E50AB7E69C89E69BB4E6B7B1E588BBE79A84E4BA86E8A7A3EFBC8CE695B0E5ADA6E8838CE699AFE79FA5E8AF86E4B99FE69BB4E6B7B1E58E9A2E0A202020203C2F536B696C6C733E', pcbValue=475 )
9334    <--- SQL_SUCCESS   Time elapsed - -8.081421E+008 seconds

9335    SQLGetData( hStmt=1:1, iCol=3, fCType=SQL_C_BINARY, rgbValue=&0000000005867c60, cbValueMax=1022, pcbValue=&00007ffc2dee7c3c )
    ---> Time elapsed - -8.081421E+008 seconds

SQLGetData( rgbValue=x'3C536B696C6C733EC3A6C288C291C3A6C298C2AFC3A4C2B8C280C3A5C290C28DC3A7C2BBC28FC3A9C2AAC28CC3A4C2B8C2B0C3A5C2AFC28CC3A7C29AC284C3A6C29CC2BAC3A6C2A2C2B0C3A5C2B8C288C3AFC2BCC28CC3A6C28AC280C3A6C29CC2AFC3A50AC2A8C3A9C29DC2A2C3AFC2BCC28CC3A4C2B8C28DC3A4C2BB0AC3A5C28DC295C3A7C28BC2ACC3A6C293C28DC3A4C2BDC29CC3A5C290C284C3A7C2A7C28DC3A6C29CC2BAC3A6C2A2C2B0C3A8C2AEC2BEC3A5C2A4C287C3AFC2BCC28CC3A8C2BFC298C3A7C2AEC2A1C3A7C290C286C3A50AC2B6C3A4C2BBC296C3A6C29CC2BAC3A6C2A2C2B0C3A5C2B8C288C3A7C29AC284C3A5C2B7C2A5C3A4C2BDC29CC3A3C280C282C3A6C288C291C3A4C2B8C293C3A6C294C2BBC3A8C2AFC28AC3A6C296C2ADC3A5C292C28CC3A7C2B2C2BEC3A5C2BAC2A6C3A6C2A3C280C3A6C2B5C28BC3AFC2BCC28CC3A5C28FC2AFC3A4C2BBC2A5C3A8C2AFC2BBC3A6C287C282C3A8C2AEC2BEC3A8C2AEC2A1C3A5C29BC2BEC3AFC2BCC28CC3A8C283C2BDC3A5C2A4C29FC3A5C2A6C2A5C3A5C296C284C3A5C2A4C284C3A7C290C286C3A5C290C284C3A6C296C2B9C3A9C29DC2A2C3A7C29AC284C3A4C2BAC2BAC3A9C2990AC3A50AC2B3C3A7C2B3C2BBC3A5C2B9C2B6C3A50AC2B7C3A5C2A4C287C3A8C289C2AFC3A5C2A5C2BDC3A7C29AC284C3A6C2B2C29FC3A9C280C29AC3A8C283C2BDC3A5C28AC29BC3A6C29DC2A5C3A6C28CC287C3A5C2AFC2BCC3A6C288C291C3A7C2AEC2A1C3A8C2BEC296C3A7C29AC284C3A6C29CC2BAC3A6C2A2C2B0C3A5C2B8C288C3A7C29AC284C3A5C2B7C2A5C3A4C2BDC29C2E20C3A4C2B8C28EC3A50AC2B6C3A4C2BBC296C3A5C280C299C3A9C280C289C3A8C2800AC3A7C29BC2B8C3A6C2AFC294C3AFC2BCC28CC3A6C288C291C3A6C28BC2A5C3A6C29CC289C3A7C29AC284C3A6C29CC2BAC3A6C2A2C2B0C3A5C2B7C2A5C3A7C2A8C28BC3A5C2ADC2A6C3A4C2BDC28DC3A4C2BDC2BFC3A6C288C291C3A5C2AFC2B9C3A6C29CC2BAC3A6C2A2C2B0C3A5C2B8C288C3A8C2A1C28CC3A4C2B8C29AC3A5C29CC2A8C3A7C290C286C3A8C2AEC2BAC3A6C296C2B9C3A9C29DC2A2C3A50AC2B7C3A6C29CC289C3A6C29BC2B4C3A6C2B7C2B1C3A5C288C2BBC3A7C29AC284C3A4C2BAC286C3A8C2A7C2A3C3AFC2BCC28CC3A6C295C2B0C3A5C2ADC2A6C3A8C283C28CC3A6C299C2AFC3A7C29FC2A5C3A8C2AFC286C3A4C2B9C29FC3A6C29BC2B4C3A6C2B7C2B1C3A5C28EC29A2E0A202020203C2F536B696C6C733E', pcbValue=916 )
9378    <--- SQL_SUCCESS   Time elapsed - -8.081421E+008 seconds

9633    SQLGetData( hStmt=1:1, iCol=1, fCType=SQL_C_CHAR, rgbValue=&0000000005866100, cbValueMax=1023, pcbValue=&00007ffc2dee7c3c )
    ---
4748    SQLFetch( hStmt=1:1 )
    ---> Time elapsed - 0 seconds

SQLFetch( )
4774    <--- SQL_ERROR   Time elapsed - +0.000000E+000 seconds

6699    SQLFetch( hStmt=1:1 )
    ---> Time elapsed - -8.081421E+008 seconds

SQLFetch( )
6717    <--- SQL_ERROR   Time elapsed - -8.081421E+008 seconds

8974    SQLFetch( hStmt=1:1 )
    ---> Time elapsed - -8.081421E+008 seconds

SQLFetch( )
9227    <--- SQL_SUCCESS   Time elapsed - -8.081421E+008 seconds
®¡理经验,包括客户线索生成、销售人员管理以及销售区域管理。在管理由现场销售代表、产品演示人员和供应商组成的分布式销售网络过程中,能够利用各种管理风格和专业技能来进行有效管理和沟通。
极佳的沟通和表达能力
    </Skills>" - x'3C536B696C6C733EE7869FE68289E68980E69C89E99480E594AEE78EAFE88A82EFBC8CE4B893E4B89AE79FA5E8AF86E4B8B0E5AF8CE38082313320E5B9B4E69DA5EFBC8CE4B8BAE68F90E9AB98E585ACE58FB8E694B6E585A5E68890E7BBA9E58D93E89197E38082E59CA8E8AEA1E58892E5928CE9A284E6B58BE99480E594AEE38081E58F91E5B195E5AEA2E688B7E4BBA5E58F8AE8BF90E794A8E5A49AE7A78DE99480E594AEE68A80E5B7A7E696B9E99DA2E585B7E69C89E4B880E5AE9AE7BB8FE9AA8CE380820AE585B7E69C89E4BA94E5B9B4E79A84E99480E594AEE7AEA1E79086E7BB8FE9AA8CEFBC8CE58C85E68BACE5AEA2E688B7E7BABFE7B4A2E7949FE68890E38081E99480E594AEE4BABAE59198E7AEA1E79086E4BBA5E58F8AE99480E594AEE58CBAE59F9FE7AEA1E79086E38082E59CA8E7AEA1E79086E794B1E78EB0E59CBAE99480E594AEE4BBA3E8A1A8E38081E4BAA7E59381E6BC94E7A4BAE4BABAE59198E5928CE4BE9BE5BA94E59586E7BB84E68890E79A84E58886E5B883E5BC8FE99480E594AEE7BD91E7BB9CE8BF87E7A88BE4B8ADEFBC8CE883BDE5A49FE588A9E794A8E59084E7A78DE7AEA1E79086E9A38EE6A0BCE5928CE4B893E4B89AE68A80E883BDE69DA5E8BF9BE8A18CE69C89E69588E7AEA1E79086E5928CE6B29FE9809AE380820AE69E81E4BDB3E79A84E6B29FE9809AE5928CE8A1A8E8BEBEE883BDE58A9B0A202020203C2F536B696C6C733E', pcbValue=537 )
( Row=3, iPar=1, fCType=SQL_C_CHAR, rgbValue="<Skills>我是一名经验丰富的机械师,技术全面,不仅单独操作各种机械设备,还管理其他机械师的工作。我专攻诊断和精度检测,可以读懂设计图,能够妥善处理各方面的人际关系并具备良好的沟通能力来指导我管辖的机械师的工作. 与其他候选者相比,我拥有的机械工程学位使我对机械师行业在理论方面具有更深刻的了解,数学背景知识也更深厚.
    </Skills>" - x'3C536B696C6C733EE68891E698AFE4B880E5908DE7BB8FE9AA8CE4B8B0E5AF8CE79A84E69CBAE6A2B0E5B888EFBC8CE68A80E69CAFE585A8E99DA2EFBC8CE4B88DE4BB85E58D95E78BACE6938DE4BD9CE59084E7A78DE69CBAE6A2B0E8AEBEE5A487EFBC8CE8BF98E7AEA1E79086E585B6E4BB96E69CBAE6A2B0E5B888E79A84E5B7A5E4BD9CE38082E68891E4B893E694BBE8AF8AE696ADE5928CE7B2BEE5BAA6E6A380E6B58BEFBC8CE58FAFE4BBA5E8AFBBE68782E8AEBEE8AEA1E59BBEEFBC8CE883BDE5A49FE5A6A5E59684E5A484E79086E59084E696B9E99DA2E79A84E4BABAE99985E585B3E7B3BBE5B9B6E585B7E5A487E889AFE5A5BDE79A84E6B29FE9809AE883BDE58A9BE69DA5E68C87E5AFBCE68891E7AEA1E8BE96E79A84E69CBAE6A2B0E5B888E79A84E5B7A5E4BD9C2E20E4B88EE585B6E4BB96E58099E98089E88085E79BB8E6AF94EFBC8CE68891E68BA5E69C89E79A84E69CBAE6A2B0E5B7A5E7A88BE5ADA6E4BD8DE4BDBFE68891E5AFB9E69CBAE6A2B0E5B888E8A18CE4B89AE59CA8E79086E8AEBAE696B9E99DA2E585B7E69C89E69BB4E6B7B1E588BBE79A84E4BA86E8A7A3EFBC8CE695B0E5ADA6E8838CE699AFE79FA5E8AF86E4B99FE69BB4E6B7B1E58E9A2E0A202020203C2F536B696C6C733E', pcbValue=475 )
( Row=4, iPar=1, fCType=SQL_C_CHAR, rgbValue="<Skills>None worth mentioning
    </Skills>" - x'3C536B696C6C733E4E6F6E6520776F727468206D656E74696F6E696E670A202020203C2F536B696C6C733E', pcbValue=43 )
( COMMIT REPLY RECEIVED=1 )

SQLExecute( )
6698    <--- SQL_SUCCESS   Time elapsed - -8.081421E+008 seconds

8482    SQLFetch( hStmt=1:1 )
    ---> Time elapsed - -1.941103E+009 seconds

SQLFetch( )
8735    <--- SQL_SUCCESS   Time elapsed - -1.941103E+009 seconds

2027    SQLSetConnectAttr( hDbc=0:1, fOption=SQL_ATTR_LOGIN_TIMEOUT, pvParam=&000000000000001e, iStrLen=4 )
    ---> Time elapsed - 0 seconds

SQLSetConnectAttr( )
2052    <--- SQL_SUCCESS   Time elapsed - +0.000000E+000 seconds

2053    SQLDriverConnect( hDbc=0:1, hwnd=0:0, szConnStrIn="DATABASE=SAMPLE;HOSTNAME=IBMDB2-01;PORT=50000;PROTOCOL=TCPIP;UID=DB2INST1;PWD=******;", cbConnStrIn=86, szConnStrOut=<NULL pointer>, cbConnStrOutMax=0, pcbConnStrOut=<NULL pointer>, fDriverCompletion=SQL_DRIVER_NOPROMPT )
    ---> Time elapsed - -1.941103E+009 seconds
( DBMS NAME="DB2/LINUXX8664", Version="11.05.0800", Fixpack="0x26090109" )
( Application Codepage=819, Database  Codepage=1208, Database XML Codepage=1208, Char Send/Recv Codepage=819, Graphic Send/Recv Codepage=1200, XML Send/Recv Codepage=1208 )

SQLDriverConnect(
( UID="DB2INST1" )
( PWD="" )
( DATABASE="SAMPLE" )
( HOSTNAME="IBMDB2-01" )
( PORT="50000" )
( PROTOCOL="TCPIP" )
 )
4331    <--- SQL_SUCCESS   Time elapsed - -1.941103E+009 seconds

4339    SQLAllocHandle( fHandleType=SQL_HANDLE_STMT, hInput=0:1, phOutput=&00007fac657bdddc )
    ---> Time elapsed - -1.941103E+009 seconds

SQLAllocHandle( fHandleType=SQL_HANDLE_STMT, hInput=0:1, phOutput=1:1 )
4363    <--- SQL_SUCCESS   Time elapsed - -1.941103E+009 seconds

4364    SQLGetFunctions( hDbc=0:1, fFunction=SQL_API_SQLMORERESULTS, pfExists=&0000000005805ad0 )
    ---> Time elapsed - -8.081421E+008 seconds

SQLGetFunctions( pfExists=1 )
4380    <--- SQL_SUCCESS   Time elapsed - -8.081421E+008 seconds

4381    SQLFreeHandle( fHandleType=SQL_HANDLE_STMT, hHandle=1:1 )
    ---> Time elapsed - -8.081421E+008 seconds
( Caching Statement Structure=1 )

SQLFreeHandle( )
4408    <--- SQL_SUCCESS   Time elapsed - -8.081421E+008 seconds

5511    SQLFetch( hStmt=1:1 )
    ---> Time elapsed - -1.941103E+009 seconds

SQLFetch( )
5532    <--- SQL_ERROR   Time elapsed - -1.941103E+009 seconds

7342    SQLFetch( hStmt=1:1 )
    ---> Time elapsed - -8.081421E+008 seconds

SQLFetch( )
7605    <--- SQL_SUCCESS   Time elapsed - -8.081421E+008 seconds

9782    SQLFetch( hStmt=1:1 )
    ---> Time elapsed - -8.081421E+008 seconds

SQLFetch( )
9976    <--- SQL_NO_DATA_FOUND   Time elapsed - -8.081421E+008 seconds

1862    SQLAllocHandle( fHandleType=SQL_HANDLE_DBC, hInput=0:1, phOutput=&0000000005845ce0 )
    ---> Time elapsed - 0 seconds

SQLAllocHandle( fHandleType=SQL_HANDLE_DBC, hInput=0:1, phOutput=0:1 )
2026    <--- SQL_SUCCESS   Time elapsed - +0.000000E+000 seconds

4982    SQLAllocHandle( fHandleType=SQL_HANDLE_STMT, hInput=0:1, phOutput=&0000000005846770 )
    ---> Time elapsed - -1.012336E+000 seconds

SQLAllocHandle( fHandleType=SQL_HANDLE_STMT, hInput=0:1, phOutput=1:1 )
4993    <--- SQL_SUCCESS   Time elapsed - -1.012336E+000 seconds

4994    SQLExecDirect( hStmt=1:1 )
    ---> Time elapsed - -8.081421E+008 seconds
( pszSqlStr="BEGIN DECLARE V_STATEMENT VARCHAR(300) DEFAULT 'drop table XML_TAB'; DECLARE CONTINUE HANDLER FOR SQLSTATE '42704' BEGIN  END;  EXECUTE IMMEDIATE V_STATEMENT; END;", cbSqlStr=163 )
( StmtOut="BEGIN DECLARE V_STATEMENT VARCHAR(300) DEFAULT 'drop table XML_TAB'; DECLARE CONTINUE HANDLER FOR SQLSTATE '42704' BEGIN  END;  EXECUTE IMMEDIATE V_STATEMENT; END " )
( Package="SYSSH200          ", Section=4 )
( COMMIT REPLY RECEIVED=1 )
( return=-1 )
( COMMIT REQUESTED=1 )
( COMMIT REPLY RECEIVED=1 )

SQLExecDirect( )
5510    <--- SQL_SUCCESS   Time elapsed - -8.081421E+008 seconds

6903    SQLAllocHandle( fHandleType=SQL_HANDLE_STMT, hInput=0:1, phOutput=&0000000005807ae0 )
    ---> Time elapsed - -1.941103E+009 seconds

SQLAllocHandle( fHandleType=SQL_HANDLE_STMT, hInput=0:1, phOutput=1:1 )
6914    <--- SQL_SUCCESS   Time elapsed - -1.941103E+009 seconds

6915    SQLExecDirect( hStmt=1:1 )
    ---> Time elapsed - -8.081421E+008 seconds
( pszSqlStr="select X, XMLSERIALIZE("X"  AS CLOB(2048) EXCLUDING XMLDECLARATION) "XX", XMLSERIALIZE("X"  AS BLOB(2048) EXCLUDING XMLDECLARATION) "YY" from XML_TAB", cbSqlStr=149 )
( StmtOut="select X, XMLSERIALIZE("X"  AS CLOB(2048) EXCLUDING XMLDECLARATION) "XX", XMLSERIALIZE("X"  AS BLOB(2048) EXCLUDING XMLDECLARATION) "YY" from XML_TAB" )
( Package="SYSSH200          ", Section=4 )
( Requested Cursor Attributes=x'03000008' )
( Reply Cursor Attributes=x'02000808' )
( Actual Cursor Attributes=x'03000808' )

SQLExecDirect( )
7341    <--- SQL_SUCCESS   Time elapsed - -8.081421E+008 seconds

9379    SQLFetch( hStmt=1:1 )
    ---> Time elapsed - -1.032748E+000 seconds

SQLFetch( )
9632    <--- SQL_SUCCESS   Time elapsed - -1.032748E+000 seconds
> Time elapsed - -8.081421E+008 seconds

SQLGetData( rgbValue="<?xml version="1.0" encoding="ISO-8859-1" ?><Skills>None worth mentioning
    </Skills>" - x'3C3F786D6C2076657273696F6E3D22312E302220656E636F64696E673D2249534F2D383835392D3122203F3E3C536B696C6C733E4E6F6E6520776F727468206D656E74696F6E696E670A202020203C2F536B696C6C733E', pcbValue=87 )
9670    <--- SQL_SUCCESS   Time elapsed - -8.081421E+008 seconds

9671    SQLGetData( hStmt=1:1, iCol=2, fCType=SQL_C_CHAR, rgbValue=&0000000005866100, cbValueMax=1023, pcbValue=&00007ffc2dee7c3c )
    ---> Time elapsed - -8.081421E+008 seconds

SQLGetData( rgbValue="<Skills>None worth mentioning
    </Skills>" - x'3C536B696C6C733E4E6F6E6520776F727468206D656E74696F6E696E670A202020203C2F536B696C6C733E', pcbValue=43 )
9737    <--- SQL_SUCCESS   Time elapsed - -8.081421E+008 seconds

9738    SQLGetData( hStmt=1:1, iCol=3, fCType=SQL_C_BINARY, rgbValue=&0000000005866100, cbValueMax=1022, pcbValue=&00007ffc2dee7c3c )
    ---> Time elapsed - -8.081421E+008 seconds

SQLGetData( rgbValue=x'3C536B696C6C733E4E6F6E6520776F727468206D656E74696F6E696E670A202020203C2F536B696C6C733E', pcbValue=43 )
9781    <--- SQL_SUCCESS   Time elapsed - -8.081421E+008 seconds

9977    SQLMoreResults( hStmt=1:1 )
    ---> Time elapsed - -8.081421E+008 seconds
( COMMIT REQUESTED=1 )
( COMMIT REPLY RECEIVED=1 )

SQLMoreResults( )
10128    <--- SQL_NO_DATA_FOUND   Time elapsed - -8.081421E+008 seconds

10129   SQLFreeHandle( fHandleType=SQL_HANDLE_STMT, hHandle=1:1 )
    ---> Time elapsed - -1.941103E+009 seconds
( Caching Statement Structure=1 )

SQLFreeHandle( )
10167    <--- SQL_SUCCESS   Time elapsed - -1.941103E+009 seconds
bimalkjha commented 8 months ago

@markddrake Check the data printed by SQLExecute and SQLGetData APIs in this file. You can see the returned XML data by server. Do you see any issue with these data? Please let me know. Thanks.

markddrake commented 8 months ago

Couldn't make sense of the trace.. Sorry..

Tried to simplify the testcase. Started off by running the following SQL

SET CURRENT IMPLICIT XMLPARSE OPTION = 'PRESERVE WHITESPACE';
--
drop table XML_TAB;
--
create table XML_TAB(I INTEGER, X XML);
--
insert into XML_TAB (I,X) values (1,'<Test>ASCII</Test>');
--
insert into XML_TAB (I,X) values (2,'<Test>Jürgen</Test>');
--
insert into XML_TAB (I,X) values (3,'<Test>熟悉所</Test>');
--
commit;
--
select I, XMLSERIALIZE(X as CLOB(32) EXCLUDING XMLDECLARATION) XML_CONTENT, LENGTH(XMLSERIALIZE(X as CLOB(32) EXCLUDING XMLDECLARATION),OCTETS) BYTES_CLOB, LENGTH(XMLSERIALIZE(X as CLOB(32) EXCLUDING XMLDECLARATION),CODEUNITS32) CHARS_CLOB from XML_TAB;
--

from a db2 command line inside the DB2 container and got the following results.

c:\Development\YADAMU\src\scratch\db2>docker exec -it -u db2inst1 IBMDB2-01 bash
[db2inst1@1b0693d46d58 /]$ db2
(c) Copyright IBM Corporation 1993,2007
Command Line Processor for DB2 Client 11.5.8.0

You can issue database manager commands and SQL statements from the command
prompt. For example:
    db2 => connect to sample
    db2 => bind sample.bnd

For general help, type: ?.
For command help, type: ? command, where command can be
the first few keywords of a database manager command. For example:
 ? CATALOG DATABASE for help on the CATALOG DATABASE command
 ? CATALOG          for help on all of the CATALOG commands.

To exit db2 interactive mode, type QUIT at the command prompt. Outside
interactive mode, all commands must be prefixed with 'db2'.
To list the current command option settings, type LIST COMMAND OPTIONS.

For more detailed help, refer to the Online Reference Manual.

db2 => connect to SAMPLE

   Database Connection Information

 Database server        = DB2/LINUXX8664 11.5.8.0
 SQL authorization ID   = DB2INST1
 Local database alias   = SAMPLE

db2 => SET CURRENT IMPLICIT XMLPARSE OPTION = 'PRESERVE WHITESPACE';
DB20000I  The SQL command completed successfully.
db2 => drop table XML_TAB;
DB20000I  The SQL command completed successfully.
db2 => create table XML_TAB(I INTEGER, X XML);
DB20000I  The SQL command completed successfully.
db2 => insert into XML_TAB (I,X) values (1,'<Test>ASCII</Test>');
DB20000I  The SQL command completed successfully.
db2 => insert into XML_TAB (I,X) values (2,'<Test>Jürgen</Test>');
DB20000I  The SQL command completed successfully.
db2 => insert into XML_TAB (I,X) values (3,'<Test>熟悉所</Test>');
DB20000I  The SQL command completed successfully.
db2 => commit;
DB20000I  The SQL command completed successfully.
db2 => select I, XMLSERIALIZE(X as CLOB(32) EXCLUDING XMLDECLARATION) XML_CONTENT, LENGTH(XMLSERIALIZE(X as CLOB(32) EXCLUDING XMLDECLARATION),OCTETS) BYTES_CLOB, LENGTH(XMLSERIALIZE(X as CLOB(32) EXCLUDING XMLDECLARATION),CODEUNITS32) CHARS_CLOB from XML_TAB;

I           XML_CONTENT                      BYTES_CLOB  CHARS_CLOB
----------- -------------------------------- ----------- -----------
          1 <Test>ASCII</Test>                        18          18
          2 <Test>Jürgen</Test>                       20          19
          3 <Test>熟悉所</Test>                       22          16

  3 record(s) selected.

db2 =>

The output is what I would expect. The first rows uses 18 bytes to represent 18 characters since all the characters are 1 bytes UTF-8. The 2nd row uses 20 bytes to represent 19 characters due to the ü, which is a 2 byte UTF-8 Character. The third row uses 22 bytes to represent 16 characters, since the 熟, 悉 and 所 characters are all 3 bytes UTF-8 Characters. This establishes a baseline for subsequent windows and linux tests.

Next I split the original test case into two parts and simplified the datasets

import ibmdb  from 'ibm_db'

async function main() { 
    const cn = "DATABASE=SAMPLE;HOSTNAME=yadamu-db2;PORT=50000;PROTOCOL=TCPIP;UID=DB2INST1;PWD=oracle;"

    const conn = await ibmdb.open(cn)
    let results 

    const SQL_XML_PARSING = "SET CURRENT IMPLICIT XMLPARSE OPTION = 'PRESERVE WHITESPACE'";
    results = await conn.query(SQL_XML_PARSING)

    results = await conn.query(`BEGIN DECLARE V_STATEMENT VARCHAR(300) DEFAULT 'drop table XML_TAB'; DECLARE CONTINUE HANDLER FOR SQLSTATE '42704' BEGIN  END;  EXECUTE IMMEDIATE V_STATEMENT; END;`)
    console.log(results)

    results = await conn.querySync(`create table XML_TAB(I INTEGER, X XML )`);
    console.log(results)

    const data = [doc1,doc2,doc3]

    let idx=0

    try {
      const query = {
        sql:          `insert into XML_TAB (I,X) values (?,?)`
      , params: [{
           ParamType: 'ARRAY',
           DataType: 'INTEGER',
           Data: [11,12,13],
        },{
           ParamType: 'ARRAY',
           DataType: 'CLOB',
           Data: data,
           Length : 8192
        }]
      , ArraySize: data.length
      }

      results = await conn.query(query);
      console.log(results)
    } catch (e) {
      console.log(1,e)
    }

}

main().then(() => { console.log('success')}).catch((e) => { console.log(e) })

const doc1 = `<Test>ASCII</Test>`;

const doc2 = `<Test>Jürgen</Test>`;

const doc3 = `<Test>熟悉所</Test>`

After running the testcase from Windows I got the following results running the last query from the db2 command line.

db2 => db2 => select I, XMLSERIALIZE(X as CLOB(32) EXCLUDING XMLDECLARATION) XML_CONTENT, LENGTH(XMLSERIALIZE(X as CLOB(32) EXCLUDING XMLDECLARATION),OCTETS) BYTES_CLOB, LENGTH(XMLSERIALIZE(X as CLOB(32) EXCLUDING XMLDECLARATION),CODEUNITS32) CHARS_CLOB from XML_TAB;
--

I           XML_CONTENT                      BYTES_CLOB  CHARS_CLOB
----------- -------------------------------- ----------- -----------
         11 <Test>ASCII</Test>                        18          18
         12 <Test>Jürgen</Test>                      22          20
SQL0433N  Value "<Test>熟悉所" is too long.  SQLSTATE=22001
db2 => db2 =>
db2 =>

So it appears that the windows Insert has failed. I adjusted the select command, doubling the size of the CLOB and got the following

I           XML_CONTENT                                                      BYTES_CLOB  CHARS_CLOB
----------- ---------------------------------------------------------------- ----------- -----------
         11 <Test>ASCII</Test>                                                        18          18
         12 <Test>Jürgen</Test>                                                      22          20
         13 <Test>熟悉所</Test>                                                    36          22

  3 record(s) selected.

db2 =>

It appears that 2 and 3 bytes UTF-8 data has not been handled correctly during the insert, even from Windows. I then ran the insertXML.js from Linux. This time the query returned

db2 => select I, XMLSERIALIZE(X as CLOB(64) EXCLUDING XMLDECLARATION) XML_CONTENT, LENGTH(XMLSERIALIZE(X as CLOB(64) EXCLUDING XMLDECLARATION),OCTETS) BYTES_CLOB, LENGTH(XMLSERIALIZE(X as CLOB(64) EXCLUDING XMLDECLARATION),CODEUNITS32) CHARS_CLOB from XML_TAB;
--
I           XML_CONTENT                                                      BYTES_CLOB  CHARS_CLOB
----------- ---------------------------------------------------------------- ----------- -----------
         11 <Test>ASCII</Test>                                                        18          18
         12 <Test>Jürgen</Test>                                                      22          20
         13 <Test>çææ</Test>                                                    31          22

  3 record(s) selected.

db2 =>

So it appears that the data has been corrupted from Linux as well but slightly differently to windows.

markddrake commented 8 months ago

Next I re-ran the sql script to ensure the table contained valid data and then ran the following code to test retrieval operations


import ibmdb  from 'ibm_db'

async function main() { 
    const cn = "DATABASE=SAMPLE;HOSTNAME=yadamu-db2;PORT=50000;PROTOCOL=TCPIP;UID=DB2INST1;PWD=oracle;"

    const conn = await ibmdb.open(cn)
    let results 

    const SQL_XML_PARSING = "SET CURRENT IMPLICIT XMLPARSE OPTION = 'PRESERVE WHITESPACE'";
    results = await conn.query(SQL_XML_PARSING)

    const data = [doc1,doc2,doc3]

    for (const [idx,str] of data.entries()) {
      console.log(idx,str,'Bytes',Buffer.from(str).length,'Chars',str.length)
    }

    results = await conn.query(`select X, XMLSERIALIZE("X"  AS CLOB(32) EXCLUDING XMLDECLARATION) "XX", XMLSERIALIZE("X"  AS BLOB(32) EXCLUDING XMLDECLARATION) "YY" from XML_TAB`)

    results.forEach((row,idx)  => {
      const str = row.YY.toString("utf-8")
      console.log(idx,data[idx],row.X,row.XX,str)
      console.log('Source: [',idx,',',data[idx].length,'] ,X :[',typeof row.X,',',row.X.length,',',Buffer.from(row.X).length,'], XX: [',typeof row.XX,',',Buffer.isBuffer(row.XX),',',row.XX.length,',',Buffer.from(row.XX).length,'], YY: [',Buffer.isBuffer(row.YY),',',row.YY.length,',',str.length,']')
      console.log(idx,data[idx] === row.X, data[idx] === row.XX, row.X === row.XX )
      if ((data[idx].length === row.XX.length) && (data[idx] !== row.XX)) {
        for (let i=0;i++;i<data[idx].length) {
          if (data[idx][i] !== row.XX[i]) {
            console.log('Mismatch',i,data[idx][i],row.XX[i])
          }
        }
      }   
    })

}

main().then(() => { console.log('success')}).catch((e) => { console.log(e) })

  const doc1 = `<Test>ASCII</Test>`;

  const doc2 = `<Test>Jürgen</Test>`;

  const doc3 = `<Test>熟悉所</Test>`

On Windows this generated the following output.

0 <Test>ASCII</Test> Bytes 18 Chars 18
1 <Test>Jürgen</Test> Bytes 20 Chars 19
2 <Test>熟悉所</Test> Bytes 22 Chars 16
0 <Test>ASCII</Test> <?xml version="1.0" encoding="windows-1252" ?><Test>ASCII</Test> <Test>ASCII</Test> <Test>ASCII</Test>
Source: [ 0 , 18 ] ,X :[ string , 64 , 64 ], XX: [ string , false , 18 , 18 ], YY: [ true , 18 , 18 ]
0 false true false
1 <Test>Jürgen</Test> <?xml version="1.0" encoding="windows-1252" ?><Test>J�rgen</Test> <Test>J�rgen</Test> <Test>Jürgen</Test>
Source: [ 1 , 19 ] ,X :[ string , 65 , 67 ], XX: [ string , false , 19 , 21 ], YY: [ true , 20 , 19 ]
1 false false false
2 <Test>熟悉所</Test> <?xml version="1.0" encoding="windows-1252" ?><Test>⸮⸮⸮</Test> <Test>⸮⸮⸮</Test> <Test>熟悉所</Test>
Source: [ 2 , 16 ] ,X :[ string , 62 , 62 ], XX: [ string , false , 16 , 16 ], YY: [ true , 22 , 16 ]
2 false false false
success

So it appears the returning the XML as naked XML or XMLSerialize as CLOB is problematic, as somewhere along the line DB2 is assuming that the content should be returned with the Window-1252 encoding. Since we are running in node where all strings are UTF-8 the client should esure that XML should be encoded in UTF-8 However it appears that retuning it as BLOB, where the database and client do not negotiate character set works.

Finally I ran the fetchXML.js script from Linux and saw roughly the same results except that the encoding was ISO-8859-1.

root@08c09ec59e37:/usr/src/YADAMU/mnt/work# node fetchXML.js
0 <Test>ASCII</Test> Bytes 18 Chars 18
1 <Test>Jürgen</Test> Bytes 20 Chars 19
2 <Test>熟悉所</Test> Bytes 22 Chars 16
0 <Test>ASCII</Test> <?xml version="1.0" encoding="ISO-8859-1" ?><Test>ASCII</Test> <Test>ASCII</Test> <Test>ASCII</Test>
Source: [ 0 , 18 ] ,X :[ string , 62 , 62 ], XX: [ string , false , 18 , 18 ], YY: [ true , 18 , 18 ]
0 false true false
1 <Test>Jürgen</Test> <?xml version="1.0" encoding="ISO-8859-1" ?><Test>J�rgen</Test> <Test>J�rgen</Test> <Test>Jürgen</Test>
Source: [ 1 , 19 ] ,X :[ string , 63 , 65 ], XX: [ string , false , 19 , 21 ], YY: [ true , 20 , 19 ]
1 false false false
2 <Test>熟悉所</Test> <?xml version="1.0" encoding="ISO-8859-1" ?><Test>⸮⸮⸮</Test> <Test>⸮⸮⸮</Test> <Test>熟悉所</Test>
Source: [ 2 , 16 ] ,X :[ string , 60 , 60 ], XX: [ string , false , 16 , 16 ], YY: [ true , 22 , 16 ]
2 false false false
success
root@08c09ec59e37:/usr/src/YADAMU/mnt/work#

I suspect that the CLOB and XML retrieval may be failing because something is attempting to convert to the default character set for the client. In my opinion this makes no sense from node, since all strings are UTF-8. The node client should ensure that the connection is configured to return all strings as UTF-8.

markddrake commented 8 months ago

It appears that I may be able to avoid these issues by sending my XML as BLOB and processing it using XMLParse and returning it as BLOB. Will implement and run regressions.

markddrake commented 8 months ago

Looks like the workaround is to insert XML by converting the UTF-8 format string to a Buffer, using Buffer.from(), and then inserting into an XML column by passing the Buffer object as a BLOB and using XMLPARSE(DOCUMENT CAST(? AS BLOB) PRESERVE WHITESPACE) to convert to XML. When reading the XML back use XMLSERIALIZE("' || c."COLNAME" || '" AS BLOB(2G) EXCLUDING XMLDECLARATION) "' to convert the XML into a BLOB, which will return a Buffer object to Javascript. The Buffer can then be converted back to string using Buffer.from().

markddrake commented 8 months ago

I still think you need to investigate whether, particularly when working with a UTF-8 database the client should be configured to accept and receive UTF-8 data. It would probably save a lot of conversion when reading and writing strings.

bimalkjha commented 8 months ago

@markddrake Please add process.env.DB2CODEPAGE=1208; just after importing ibm_db or at start of your application. This setting will tell client to return data in UTF-8. Thanks.

bimalkjha commented 7 months ago

@markddrake I would like to relook into this issue. Please let me know that after adding process.env.DB2CODEPAGE=1208; in your test program, do you see any change in behavior or not.

The data retrieved on Windows and Linux are different because default codepage on Windows and Linux are different. When we explicitly set the codepage to 1208, data should be in UTF-8 format. You do not see this change in case of BLOB data, because for binary data, no codepage conversion happens. If you still see issue, I would suggest to minimize your test program where you insert a row of Chinese text in varchar or clob column and then select it. I would run the same test program with same text to reproduce the problem. Thanks.

markddrake commented 7 months ago

Currently I have switched my code to always use BLOB and that appears to have fixed the problem. When all my regression suites have completed and I've checked every-in I can try switching back to CLOB and setting 1208 as you suggested. Just as a thought experiment, and given that my assumption, that internally all string handling in node is UTF-8, wouldn't it be more sensible to make that the default, and allow a developer to override in the case that they have some corner case where it does not make sense, particularly if the database is configured for UTF8. Of course there is a bit of a catch-22 there, you need to set codepage before connecting to the database, but setting the code page may only make sense if the database is UTF-8, which can only be determined after connecting to the database :)

bimalkjha commented 7 months ago

@markddrake Due the catch-22 issue you explained above, we are not setting the process.env.DB2CODEPAGE=1208 in odbc.js file and suggesting users to set it in the application if required. If database is created using 1208 code page, then no issues, but if database code page is different, then setting 1208 explicitly in ibm_db will cause issue. Please share the test program once you get time to check it again. Thanks.