How to handled DateTime Fields in MySQL when updating from MySQL 5 to MySQL 8 - hmislk/hmis GitHub Wiki
-- ============================================ -- FIX FOR APPROVEAT COLUMN IN roseth.BILL -- MySQL 5 to MySQL 8 Upgrade Fix -- ============================================
-- Step 1: Create backup column ALTER TABLE roseth.BILL ADD COLUMN APPROVEAT_BACKUP TIMESTAMP NULL;
-- Step 2: Copy existing data to backup UPDATE roseth.BILL SET APPROVEAT_BACKUP = APPROVEAT;
-- Step 3: Drop the problematic column ALTER TABLE roseth.BILL DROP COLUMN APPROVEAT;
-- Step 4: Recreate column allowing NULL values ALTER TABLE roseth.BILL ADD COLUMN APPROVEAT DATETIME NULL;
-- Step 5: Restore data from backup UPDATE roseth.BILL SET APPROVEAT = APPROVEAT_BACKUP;
-- Step 6: Verify data restored correctly SELECT COUNT(*) AS total, SUM(CASE WHEN APPROVEAT IS NOT NULL THEN 1 ELSE 0 END) AS with_data FROM roseth.BILL;
-- Step 7: Drop backup column (only after verification) ALTER TABLE roseth.BILL DROP COLUMN APPROVEAT_BACKUP;
Explanation:
- MySQL 8 enforces strict mode by default - when your JPA/application passes NULL explicitly, it won't fall back to the default value
- The fix changes APPROVEAT from NOT NULL with default to NULL allowed
- This way, when your application doesn't set a value, it can accept NULL without error