При выполнении запроса на пакетное обновление с использованием библиотеки jdbi с запросом, аналогичным приведенному ниже
@SqlBatch("INSERT INTO <table> (<columns>) VALUES (<columnsBind>)" + " ON DUPLICATE KEY UPDATE <updateString>;")
Я получаю ошибку java.sql.BatchUpdateException: Data truncation: Data too long for column bit_column
для столбца типа бит (1).
Я пытаюсь вставить в него значение NULL.
Я подтвердил, что столбец обнуляем.
При отладке я вижу, что привязка для именованного значения имеет тип ObjectArgument
, а не NullArgument
, хотя не проблема для других записей, которые могут нормально обрабатывать нуль.
Я пытался заменить ObjectArgument
на NullArgument
, но это приводит к java.io.NotSerializableException
Это кто-то сталкивался раньше?
РЕДАКТИРОВАНИЕ: С отредактированной версией сгенерированного объекта ClientPreparedStatement я переименовал столбцы и заменил столбцы с фактическими значениями на другие того же типа. Все нули одинаковы, без кавычек.
INSERT INTO table (not_bit_column_null,bit_column,not_bit_column_null,varchar_column,varchar_column,not_bit_column_null,varchar_column,not_bit_column_null,not_bit_column_null,not_bit_column_null,varchar_column,varchar_column,varchar_column,not_bit_column_null,not_bit_column_null,varchar_column,not_bit_column_null,id,not_bit_column_null) VALUES (null,null,null,'text','text',null,'text',null,null,null,null,'text','text',null,null,'text',null,'22',null) ON DUPLICATE KEY UPDATE not_bit_column_null = null,
bit_column = null,
not_bit_column_null = null,
varchar_column = 'text',
varchar_column = 'text',
not_bit_column_null = null,
varchar_column = 'text',
not_bit_column_null = null,
not_bit_column_null = null,
not_bit_column_null = null,
not_bit_column_null = null,
varchar_column = 'text',
varchar_column = 'text',
not_bit_column_null = null,
not_bit_column_null = null,
varchar_column = 'text',
not_bit_column_null = null,
id = '22',
not_bit_column_null = null;