Windows MySQL v5 menimbulkan kesalahan tetapi Linux dan versi lain hanya memunculkan peringatan. Ini perlu diperbaiki. WTF?
Lihat juga upaya untuk memperbaikinya sebagai bug #19498 di Bugtracker MySQL:
Bryce Nesbitt pada 4 April 2008 16:36:
Pada MS Windows, aturan "no DEFAULT" adalah kesalahan, sedangkan pada platform lain sering kali berupa peringatan. Meskipun bukan bug, mungkin saja terjebak oleh hal ini jika Anda menulis kode pada platform yang lunak, dan kemudian menjalankannya pada platform yang ketat:
Secara pribadi, saya melihat ini sebagai bug. Menelusuri "kolom BLOB/TEXT tidak dapat memiliki nilai default" menghasilkan sekitar 2.940 hasil di Google. Kebanyakan dari mereka adalah laporan ketidakcocokan ketika mencoba menginstal skrip DB yang bekerja pada satu sistem tetapi tidak pada yang lain.
Saya mengalami masalah yang sama sekarang di aplikasi web yang saya modifikasi untuk salah satu klien saya, awalnya digunakan di Linux MySQL v5.0.83-log. Saya menjalankan Windows MySQL v5.1.41. Bahkan mencoba menggunakan phpMyAdmin versi terbaru untuk mengekstrak database, itu tidak melaporkan default untuk kolom teks yang dimaksud. Namun, ketika saya mencoba menjalankan penyisipan di Windows (yang berfungsi dengan baik pada penyebaran Linux) saya menerima kesalahan tidak ada default pada kolom ABC. Saya mencoba membuat ulang tabel secara lokal dengan default yang jelas (berdasarkan pilihan nilai unik untuk kolom itu) dan akhirnya menerima kolom BLOB/TEXT yang sangat berguna tidak dapat memiliki nilai default .
Sekali lagi, tidak mempertahankan kompatibilitas dasar di seluruh platform tidak dapat diterima dan merupakan bug.
Cara menonaktifkan mode ketat di MySQL 5 (Windows):
-
Edit /my.ini dan cari baris
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
-
Ganti dengan
sql_mode='MYSQL40'
-
Mulai ulang layanan MySQL (dengan asumsi bahwa itu adalah mysql5)
net stop mysql5 net start mysql5
Jika Anda memiliki akses root/admin, Anda mungkin dapat menjalankan
mysql_query("SET @@global.sql_mode='MYSQL40'");