MySQL tidak mengizinkan kita untuk membuat default value pada field yang bertipe data TEXT. Hal ini sering menimbulkan error message "Field '' doesn't have a default value". Ini terjadi karena field yang bertipe data TEXT tidak diset pada statement SQL yang dijalankan, sedangkan field tersebut tidak mempunyai default value.
Awalnya kejadian ini sempat membingungkan, karena MySQL di Ubuntu saya mengizinkan field tersebut tidak diisi dan tidak memberikan error message apapun. Tetapi jika menggunakan MySQL di windows, selalu menolak dan memberikan error message di atas. Perbedaan ini disebabkan oleh value dari parameter sql-mode yang berbeda.
Apa itu sql-mode
MySQL dapat berjalan pada beberapa mode dan dapat diimplementasikan pada client yang berbeda. Mode - mode ini digunakan untuk mendukung dan melakukan validasi terhadap SQL statement. Berikut daftar mode yang bisa digunakan untuk pada sql-mode
Di Ubuntu, parameter sql-node tidak di set secara default, sedangkan di untuk Windows default value dari sql-node adalah "STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION". Dan penyebab MySQL memberikan pesan tersebut adalah STRICT_TRANS_TABLES.
STRICT_TRANS_TABLES
Penggunaan STRICT_TRANS_TABLES membuat MySQL mengubah value yang tidak valid menjadi value yang valid dan memasukkan value yang sudah disesuaikan untuk suatu field. Jika value dari field tersebut tidak diset pada statement SQL (seperti yang diceritakan di atas), maka MySQL akan mengisi field tersebut dengan menggunakan default value dari field tersebut. Dan pada kasus lain MySQL akan memberikan warning bukan error message dan terus melanjutkan proses dari SQL statement tersebut. Karena field tersebut tidak diisi, dan MySQL juga tidak menemukan default value dari field tersebut karena kita tidak bisa mendefenisikan default value tipe data TEXT, maka MySQL memberikan error message.
Untuk melihat value dari sql-mode bisa dengan cara:
SELECT @@GLOBAL.sql_mode;atau
SELECT @@SESSION.sql_mode;Untuk mengubah value dari sql-node pada saat MySQL sedang berjalan dapat dilakukan dengan cara
SET SESSION sql_mode = 'modes';
atau
SET GLOBAL sql_mode = 'modes';
Dan untuk melakukan perubahan secara permanen, dilakukan dengan menambahkan/mengubah
sql-node = "mode"
pada file konfigurasi (my.ini untuk Windows dan my.cnf untuk Unix) ataupun menambahkan opsi --sql-mode="mode" pada saat menjalankan daemon mysql.
Wassalam
Comments
Kirim Komentar