Rumah >pangkalan data >tutorial mysql >Contoh perkongsian masalah yang disebabkan oleh cap waktu MySQL 8.0
Artikel ini membawakan kepada anda beberapa masalah berkaitan yang mungkin timbul mengenai nilai lalai medan dalam mysql saya harap ia akan membantu anda.
Hari ini, perniagaan melaporkan masalah Medan modify_time tidak dibenarkan menjadi batal dan medan maklum balas perniagaan ditetapkan kepada nilai lalai adalah seperti berikut:
Daripada mesej ralat, mungkin medan modify_time tidak mempunyai set nilai lalai atau nilai lalai ditetapkan dengan salah
Seterusnya, semak struktur jadual:
CREATE TABLE `jj_xxxx` ( .... `create_time` timestamp NOT NULL DEFAULT '1999-12-31 23:00:00' , `update_user` int DEFAULT NULL, `modify_time` timestamp NOT NULL DEFAULT '1999-12-31 23:00:00', .... PRIMARY KEY (`goods_id`) ) ENGINE=InnoDB AUTO_INCREMENT=4893 DEFAULT CHARSET=utf8 COMMENT='xxxxx'
Daripada struktur jadual, nampaknya tiada masalah dengan set nilai lalai Semak tetapan parameter sql_mode, dan nampaknya tiada masalah ditemui ;
Meja dalam talian maklum balas kakitangan perniagaan Ini juga berlaku, tetapi ia adalah perkara biasa dalam talian, dan kini kami perlu memindahkan perniagaan ini ke persekitaran lain daripada perniagaan kepada pangkalan data
Tiba-tiba, perbezaan dalam versi pangkalan data telah diambil kira migrasi baharu Persekitaran ialah MySQL versi 8.0, manakala persekitaran dalam talian adalah versi 5.7 Nilai lalai yang ditetapkan oleh parameter explicit_defaults_for_timestamp adalah berbeza dalam dua versi. ;
Sebab:
explicit_defaults_for_timestamp pembolehubah sistem menentukan pelayan MySQL Pengendalian nilai lalai dan NULL yang berbeza dalam lajur cap waktu.
Pembolehubah ini diperkenalkan daripada MySQL versi 5.6.6 Ia dibahagikan kepada peringkat global dan tahap sesi dan boleh dikemas kini secara dinamik.
Dalam 8.0, nilai lalai telah ditukar kepada pada
explicit_defaults_for_timestamp=OFF, yang bermaksud menggunakan lalai Format lalai cap waktu apakah format lalai jenis cap masa?
1 Tidak seperti jenis medan yang lain, medan ini secara lalai menjadi nol Dan nol lalai tidak dibenarkan untuk ditetapkan
2 tidak wajib Jika nilai lalai atau atribut pada kemas kini digunakan, ia akan ditetapkan kepada DEFAULT CURRENT_TIMESTAMP dan ON UPDATE CURRENT_TIMESTAMP secara lalai.
3. Untuk medan cap waktu dalam lajur bukan pertama, jika anda tidak memaksa nilai lalai, LALAI '0000-00-00 00:00:00'
4 nilai null ke dalam lajur ini , akan ditukar secara automatik kepada nilai lalai;
explicit_defaults_for_timestamp=ON, kemudian matikan ciri lalai cap masa:
1 null tidak dinyatakan secara eksplisit, lalainya adalah nol; tidak menyatakan nilai medan Di bawah sql_mode yang ketat, ralat akan dilaporkan. Masukkan '0000-00-00 00:00:00' di bawah sql_mode yang tidak ketat; null lalai CURRENT_TIMESTAMP ,Apakah kesan perniagaan yang akan dibawa apabila explicit_defaults_for_timestamp berubah daripada 0 kepada 1?
Penukaran sedemikian, jika medan cap masa mempunyai nilai lalai, akan menyebabkan penyataan sisipan asal dengan nilai medan cap masa menjadi batal, menjejaskan perniagaan
2 lalai null kepada cap masa lalai CURRENT_TIMESTAMP, apakah kesan perniagaan yang akan dibawanya?
Melakukan penukaran medan sedemikian akan menukar semua nilai nol asal medan kepada CURRENT_TIMESTAMP Jika terdapat banyak data sejarah, penukaran tersebut akan sangat memerlukan sumber. Pada masa yang sama, ia juga perlu untuk mempertimbangkan kesan perubahan nilai ke atas perniagaan. Pembelajaran yang disyorkan:
tutorial video mysqlAtas ialah kandungan terperinci Contoh perkongsian masalah yang disebabkan oleh cap waktu MySQL 8.0. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!