Jika Anda mencoba membuat kolom TEXT di atas meja, dan memberinya nilai default di MySQL, Anda mendapatkan kesalahan (setidaknya untuk Windows). Saya tidak dapat melihat alasan mengapa kolom teks tidak memiliki nilai default. Tidak ada penjelasan yang diberikan oleh dokumentasi MySQL. Tampaknya tidak masuk akal bagi saya (dan agak membuat frustrasi, karena saya ingin nilai default!). Adakah yang tahu mengapa ini tidak diizinkan?
mysql
default-value
Russ
sumber
sumber
TEXT
- kolom-kolom itu tidak dapat memiliki nilai default.VARCHAR
bisa.Jawaban:
Windows MySQL v5 membuat kesalahan tetapi Linux dan versi lain hanya memunculkan peringatan. Ini perlu diperbaiki. WTF?
Lihat juga upaya untuk memperbaikinya sebagai bug # 19498 di Bugtracker MySQL:
Secara pribadi, saya melihat ini sebagai bug. Mencari "BLOB / TEXT kolom tidak dapat memiliki nilai default" mengembalikan sekitar 2.940 hasil di Google. Kebanyakan dari mereka adalah laporan yang tidak kompatibel ketika mencoba menginstal skrip DB yang bekerja pada satu sistem tetapi tidak pada yang lain.
Saya mengalami masalah yang sama sekarang di webapp saya memodifikasi untuk salah satu klien saya, awalnya digunakan di Linux MySQL v5.0.83-log. Saya menjalankan Windows MySQL v5.1.41. Bahkan mencoba menggunakan versi terbaru dari phpMyAdmin untuk mengekstrak database, itu tidak melaporkan default untuk kolom teks yang dimaksud. Namun, ketika saya mencoba menjalankan insert pada Windows (yang berfungsi dengan baik pada penyebaran Linux) saya menerima kesalahan yang tidak ada default pada kolom ABC. Saya mencoba membuat ulang tabel secara lokal dengan default yang jelas (berdasarkan pada pemilihan 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 lintas platform tidak dapat diterima dan merupakan bug.
Cara menonaktifkan mode ketat di MySQL 5 (Windows):
Edit /my.ini dan cari baris
Ganti dengan
Mulai ulang layanan MySQL (dengan asumsi itu adalah mysql5)
Jika Anda memiliki akses root / admin, Anda mungkin dapat menjalankannya
sumber
Tanpa pengetahuan mendalam tentang mesin mySQL, saya akan mengatakan ini terdengar seperti strategi penghematan memori. Saya menganggap alasannya ada di belakang paragraf ini dari dokumen :
Sepertinya pra-mengisi jenis kolom ini akan menyebabkan penggunaan memori dan hukuman performa.
sumber
Anda bisa mendapatkan efek yang sama dengan nilai default dengan menggunakan pemicu
sumber
Sebagai pertanyaan utama:
masih belum dijawab, saya melakukan pencarian cepat dan menemukan tambahan yang relatif baru dari pengembang MySQL di MySQL Bugs :
Ini bukan jawaban yang pasti, tetapi setidaknya titik awal untuk pertanyaan mengapa .
Sementara itu, saya hanya akan kode di sekitarnya dan membuat kolom nullable atau secara eksplisit menetapkan nilai (default
''
) untuk masing-masinginsert
dari kode aplikasi ...sumber
"Dukungan untuk DEFAULT dalam kolom TEKS / BLOB" adalah permintaan fitur di Bugtracker MySQL (Bug # 21532) .
Saya tahu saya bukan satu-satunya yang ingin memasukkan nilai default di kolom TEXT. Saya pikir fitur ini harus didukung di versi MySQL yang lebih baru.
Ini tidak dapat diperbaiki di versi 5.0 dari MySQL, karena tampaknya itu akan menyebabkan ketidakcocokan dan dataloss jika ada yang mencoba untuk mentransfer database bolak-balik antara (saat ini) database yang tidak mendukung fitur itu dan setiap database yang mendukung fitur itu.
sumber
Saya biasanya menjalankan situs di Linux, tetapi saya juga mengembangkan pada mesin Windows lokal. Saya sering mengalami masalah ini dan baru saja memperbaiki tabel ketika saya menemui masalah. Saya menginstal aplikasi kemarin untuk membantu seseorang dan tentu saja mengalami masalah lagi. Jadi, saya memutuskan sudah waktunya untuk mencari tahu apa yang sedang terjadi - dan menemukan utas ini. Saya benar-benar tidak menyukai gagasan mengubah sql_mode server ke mode sebelumnya (secara default), jadi saya datang dengan solusi (menurut saya) yang sederhana.
Solusi ini tentu saja mengharuskan pengembang untuk membungkus skrip pembuatan tabel mereka untuk mengkompensasi masalah MySQL yang berjalan pada Windows. Anda akan melihat konsep serupa di file dump. Satu peringatan BESAR adalah bahwa ini dapat / akan menyebabkan masalah jika partisi digunakan.
Itu saja.
sumber
Untuk Ubuntu 16.04:
Cara menonaktifkan mode ketat di MySQL 5.7:
Edit file /etc/mysql/mysql.conf.d/mysqld.cnf
Jika baris di bawah ini ada di mysql.cnf
Lalu Ganti dengan
Jika tidak
Cukup tambahkan baris di bawah ini di mysqld.cnf
Ini menyelesaikan masalah.
sumber