Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Mengapa kolom teks tidak dapat memiliki nilai default di MySQL?

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'");


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mengapa peningkatan otomatis MySQL meningkat pada sisipan yang gagal?

  2. Bagaimana Fungsi SUBSTR() Bekerja di MySQL

  3. Contoh CURRENT_TIME – MySQL

  4. Bagaimana cara mengimpor file CSV ke tabel MySQL?

  5. Bagaimana cara mencari garis miring (\) di MySQL? dan mengapa melarikan diri (\) tidak diperlukan untuk di mana (=) tetapi untuk Suka diperlukan?