sql_mode ialah pembolehubah yang mudah diabaikan Nilai lalainya adalah batal Di bawah tetapan ini, beberapa operasi yang menyalahi undang-undang boleh dibenarkan, seperti membenarkan pemasukan beberapa data haram. Nilai ini mesti ditetapkan kepada mod ketat dalam persekitaran pengeluaran, jadi pangkalan data dalam pembangunan dan persekitaran ujian juga mesti ditetapkan, supaya masalah boleh ditemui semasa fasa pembangunan dan ujian.
1, laksanakan SQL untuk melihat
select @@session.sql_mode;
Peringkat global: Lihat
select @@global.sql_mode;
2, ubah suai
set @@session.sql_mode='xx_mode' set session sql_mode='xx_mode'
Peringkat global: ubah suai
set global sql_mode='xx_mode'; set @@global.sql_mode='xx_mode';
Sesi boleh ditinggalkan, sesi lalai hanya sah untuk sesi semasa
Pengubahsuaian global memerlukan kebenaran lanjutan, ia hanya akan berkuat kuasa untuk sambungan seterusnya, tidak menjejaskan sesi semasa, dan MySQL dimulakan semula Ia akan menjadi tidak sah kemudian kerana MySQL akan membaca semula nilai yang sepadan dalam fail konfigurasi apabila ia dimulakan semula Jika ia perlu kekal, anda perlu mengubah suai nilai dalam fail konfigurasi.
vi /etc/my.cnf
[mysqld] sql-mode = "xx_mode"
Simpan dan keluar, mulakan semula pelayan, dan ia akan berkuat kuasa secara kekal
NO_AUTO_VALUE_ON_ZERO
Nilai ini mempengaruhi sisipan lajur yang berkembang secara automatik. Di bawah tetapan lalai, memasukkan 0 atau NULL mewakili penjanaan nilai peningkatan automatik seterusnya. Pilihan ini berguna jika pengguna ingin memasukkan nilai 0 dan lajur meningkat secara automatik.
STRICT_TRANS_TABLES
Dalam mod ini, jika nilai tidak boleh dimasukkan ke dalam jadual transaksi, operasi semasa akan terganggu dan tiada sekatan ke atas bukan transaksi jadual
TIADA_ZERO_IN_DATE
Dalam mod ketat, tarikh atau bulan tidak dibenarkan selagi bulan atau hari tarikh mengandungi nilai 0, ralat akan dilaporkan, tetapi '0000-00-00 'Kecuali
NO_ZERO_DATE
menetapkan nilai ini, pangkalan data mysql tidak membenarkan pemasukan tarikh sifar, dan memasukkan tarikh sifar akan menimbulkan ralat dan bukannya amaran. Mana-mana tahun, bulan dan hari yang bukan 0 memenuhi keperluan Hanya '0000-00-00' akan melaporkan ralat
ERROR_FOR_pISION_BY_ZERO
Semasa Proses INSERT atau UPDATE, jika Membahagikan data dengan sifar menghasilkan ralat dan bukannya amaran. Jika mod tidak diberikan, MySQL mengembalikan NULL apabila data dibahagikan dengan sifar
kemas kini set jadual num = 5 / 0; ralat akan dilaporkan selepas menetapkan mod berjaya dan nilai num akan menjadi batal
NO_AUTO_CREATE_USERTolak GRAN daripada mencipta pengguna dengan kata laluan kosong
NO_ENGINE_SUBSTITUTION> Enjin storan jika diperlukan dilumpuhkan atau tidak disusun, ralat akan dilemparkan. Apabila nilai ini tidak ditetapkan, enjin storan lalai digunakan dan pengecualian dilemparkan
PIPES_AS_CONCATAnggap "||" sebagai operator penggabungan rentetan operator OR, ini sama dengan pangkalan data Oracle, dan serupa dengan fungsi penyambungan rentetan Concat
ANSI_QUOTESSelepas mendayakan ANSI_QUOTES, anda tidak boleh menggunakan Sebut Harga berganda menandakan untuk memetik rentetan kerana ia ditafsirkan sebagai pengecam
Cadangan berkaitan: "
tutorial mysql"
Atas ialah kandungan terperinci Ajar anda helah untuk membetulkan tetapan sql_mode dalam mysql. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!