MySQL: migrace nulových datumů

18. 3. 2022

Při migraci dat ze starších verzí MySQL serveru na verzi 5.7 a novější se možná setkáte s chybou nepovolené hodnoty “0000-00-00” v datovém typu date. Problém vzniká rozdílnou konfigurací striktního režimu a režimu NO_ZERO_DATE.

Řešení 1

Změnit konfiguraci MySQL serveru aby umožnil zápis “0000-00-00” viz. officiální dokumetace https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sqlmode_no_zero_date

Řešení 2

Migrovat datum “0000-00-00” na hodnotu null. Tento způsob řešení ne-vyžaduje změny konfigurace serveru, obcházení striktního módu a zároveň použití hodnoty null může dávat v kódu větší smysl. Je ale nezbytné nastavit ve schématu že sloupec s datem může být nulový.

INSERT INTO `table1`
   (`id`, `date`)
SELECT
   `id`, IF(CAST(`old_date` AS CHAR(10)) = '0000-00-00', null, `old_date`)
FROM `table2`

V SQL dotazu provádíme insert do nové tabulky ze staré kdy při výběru kontrolujeme “nulový” datum a případně ho nahradíme za hodnotu null. Funkce CAST slouží k převodu datového typu sloupce na znaky, aby nedošlo při čtení hodnot k chybě neplatné hodnoty  “0000-00-00” v původním sloupci.

Nejnovější příspěvky