From ee050d66b0f00f7e03365835f160d4a3f133bda1 Mon Sep 17 00:00:00 2001 From: Chienlin Date: Thu, 30 Oct 2025 13:09:49 +0800 Subject: [PATCH] fix(jdbc): Use NVARCHAR for Spring Batch SQL Server metadata (#5064) Spring Batch SQL Server metadata tables default to VARCHAR, but the Microsoft JDBC driver sends strings as NVARCHAR. This mismatch causes implicit conversions, slows queries, and increases deadlock risk. Update schema-sqlserver.sql to use NVARCHAR for all string columns, aligning with the driver and improving performance. Signed-off-by: Chienlin --- .../batch/core/schema-sqlserver.sql | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/spring-batch-core/src/main/resources/org/springframework/batch/core/schema-sqlserver.sql b/spring-batch-core/src/main/resources/org/springframework/batch/core/schema-sqlserver.sql index cbb5958e1f..6b99ba8d80 100644 --- a/spring-batch-core/src/main/resources/org/springframework/batch/core/schema-sqlserver.sql +++ b/spring-batch-core/src/main/resources/org/springframework/batch/core/schema-sqlserver.sql @@ -3,8 +3,8 @@ CREATE TABLE BATCH_JOB_INSTANCE ( JOB_INSTANCE_ID BIGINT NOT NULL PRIMARY KEY, VERSION BIGINT NULL, - JOB_NAME VARCHAR(100) NOT NULL, - JOB_KEY VARCHAR(32) NOT NULL, + JOB_NAME NVARCHAR(100) NOT NULL, + JOB_KEY NVARCHAR(32) NOT NULL, constraint JOB_INST_UN unique (JOB_NAME, JOB_KEY) ) ; @@ -15,9 +15,9 @@ CREATE TABLE BATCH_JOB_EXECUTION ( CREATE_TIME DATETIME NOT NULL, START_TIME DATETIME DEFAULT NULL, END_TIME DATETIME DEFAULT NULL, - STATUS VARCHAR(10) NULL, - EXIT_CODE VARCHAR(2500) NULL, - EXIT_MESSAGE VARCHAR(2500) NULL, + STATUS NVARCHAR(10) NULL, + EXIT_CODE NVARCHAR(2500) NULL, + EXIT_MESSAGE NVARCHAR(2500) NULL, LAST_UPDATED DATETIME NULL, constraint JOB_INST_EXEC_FK foreign key (JOB_INSTANCE_ID) references BATCH_JOB_INSTANCE(JOB_INSTANCE_ID) @@ -25,9 +25,9 @@ CREATE TABLE BATCH_JOB_EXECUTION ( CREATE TABLE BATCH_JOB_EXECUTION_PARAMS ( JOB_EXECUTION_ID BIGINT NOT NULL, - PARAMETER_NAME VARCHAR(100) NOT NULL, - PARAMETER_TYPE VARCHAR(100) NOT NULL, - PARAMETER_VALUE VARCHAR(2500), + PARAMETER_NAME NVARCHAR(100) NOT NULL, + PARAMETER_TYPE NVARCHAR(100) NOT NULL, + PARAMETER_VALUE NVARCHAR(2500), IDENTIFYING CHAR(1) NOT NULL, constraint JOB_EXEC_PARAMS_FK foreign key (JOB_EXECUTION_ID) references BATCH_JOB_EXECUTION(JOB_EXECUTION_ID) @@ -36,12 +36,12 @@ CREATE TABLE BATCH_JOB_EXECUTION_PARAMS ( CREATE TABLE BATCH_STEP_EXECUTION ( STEP_EXECUTION_ID BIGINT NOT NULL PRIMARY KEY, VERSION BIGINT NOT NULL, - STEP_NAME VARCHAR(100) NOT NULL, + STEP_NAME NVARCHAR(100) NOT NULL, JOB_EXECUTION_ID BIGINT NOT NULL, CREATE_TIME DATETIME NOT NULL, START_TIME DATETIME DEFAULT NULL, END_TIME DATETIME DEFAULT NULL, - STATUS VARCHAR(10) NULL, + STATUS NVARCHAR(10) NULL, COMMIT_COUNT BIGINT NULL, READ_COUNT BIGINT NULL, FILTER_COUNT BIGINT NULL, @@ -50,8 +50,8 @@ CREATE TABLE BATCH_STEP_EXECUTION ( WRITE_SKIP_COUNT BIGINT NULL, PROCESS_SKIP_COUNT BIGINT NULL, ROLLBACK_COUNT BIGINT NULL, - EXIT_CODE VARCHAR(2500) NULL, - EXIT_MESSAGE VARCHAR(2500) NULL, + EXIT_CODE NVARCHAR(2500) NULL, + EXIT_MESSAGE NVARCHAR(2500) NULL, LAST_UPDATED DATETIME NULL, constraint JOB_EXEC_STEP_FK foreign key (JOB_EXECUTION_ID) references BATCH_JOB_EXECUTION(JOB_EXECUTION_ID) @@ -59,16 +59,16 @@ CREATE TABLE BATCH_STEP_EXECUTION ( CREATE TABLE BATCH_STEP_EXECUTION_CONTEXT ( STEP_EXECUTION_ID BIGINT NOT NULL PRIMARY KEY, - SHORT_CONTEXT VARCHAR(2500) NOT NULL, - SERIALIZED_CONTEXT VARCHAR(MAX) NULL, + SHORT_CONTEXT NVARCHAR(2500) NOT NULL, + SERIALIZED_CONTEXT NVARCHAR(MAX) NULL, constraint STEP_EXEC_CTX_FK foreign key (STEP_EXECUTION_ID) references BATCH_STEP_EXECUTION(STEP_EXECUTION_ID) ) ; CREATE TABLE BATCH_JOB_EXECUTION_CONTEXT ( JOB_EXECUTION_ID BIGINT NOT NULL PRIMARY KEY, - SHORT_CONTEXT VARCHAR(2500) NOT NULL, - SERIALIZED_CONTEXT VARCHAR(MAX) NULL, + SHORT_CONTEXT NVARCHAR(2500) NOT NULL, + SERIALIZED_CONTEXT NVARCHAR(MAX) NULL, constraint JOB_EXEC_CTX_FK foreign key (JOB_EXECUTION_ID) references BATCH_JOB_EXECUTION(JOB_EXECUTION_ID) ) ;