FİELD DOESN’T HAVE A DEFAULT VALUE HATASI VE ÇÖZÜMÜ

By | 9 Aralık 2019

Mysql 5.6 sürümü ile default yapılandırmasına giren sql_mode ayarı bu hatanın zeminini hazırlayan bir olaya dönüştü. Bu hatanın sisteminizde oluşma nedeni değer göndermediğiniz sütunların eğer boş (null) yada default değeri tanımlanmadan oluşturulmasından kaynaklanıyor. Mysql 5.6 sürümüde daha yeni yeni yaygınlaşan bir sürüm olduğu içinde eski bir çok scriptte bu hatayla karşılaşmak mümkün. Aslına bakarsanız eşeklik tamamen mysql de bu ayarı 5.5 sürümüne kadar standart dışı tutup 5.6 ile dayatmak daha önce hazırlanmış bütün işlemlerde düzenleme gerektiriyor. Şimdi çözüm yollarına beraber göz atalım…

Paylaşımlı Hosting kullanan kullanıcılar , SSH yetkisi olmayan kişiler için veritabanınızda ki tüm tablo ve sütunları düzeltmek.

Bu yöntem scriptinizin büyük bölümünde yapısal olarak değişiklik yapılması gerekmiyorsa , script yapılandırmanız boş içerik göndermeye uygun olarak kodlanmamışsa işinize gelecek ve biraz zahmetli bir işlemdir. Öncelikle hata aldığınız sütunun default değerini belirlemeniz yada o sütunu null olarak belirlemeniz gerekiyor.

En kolay yöntem ile phpmyadmin üzerinden hata aldığınız sütunu düzenleyerek Boş olarak işaretlemenizdir. Bu durumun şerhini koşalım ki daha sonar problem yaşamayın. Eğer scriptinizde bu kısım boş işaretlenmesi sonrası yapısal bir hata oluşabileceğini göz önüne alınız. En sağlıklı bilgi yine script sağlayıcınız tarafından verilecektir.

SSH bağlantı izniniz varsa , Host firmanız yazılımcılar tarafından TOST firması olarak tanımlanmıyor ve hata gidermeyi erdem olarak gören bir firma ise ;

Bu durumda işlemleriniz daha kolay ve zahmetsizce en sağlıklı şekilde çözülebilir. Yazının başında belirttiğim gibi bu sorunun asıl nedeni sunucu yapılandırmanızın hatalı olmasından kaynaklanıyor. Bir değer boşsa mysql DİE döndürmek yerine işleme devam etmeli bunu daha iyi anlatmak için şöyle düşünebilirsiniz. İçeriklerinizde etiket gönderiyorsunuz , her içeriğinize etiket göndermeden kayıt yaptığınızda oluyor. Sunucu yapılandırmanız bu şekilde bir hataya sahipse etiketi göndermediğiniz diğer tüm işlemlerinizi iptal edip etiketler dolu gelmek zorunda şeklinde bi hata veriyor. Bunu hemen hemen bütün stunlarınızda yaşadığınızı düşünün.. Yani özet bu.

Neyse daha fazla kafanızı şişirmeden ssh erişimiz varsa nasıl çözeceğinizden başlayalım.

Öncelikle ssh üzerindne oturumunuzu açıp üst dizine cd .. komutu ile çıkın.

my.cnf dosyanızı düzenlemeniz gerekiyor. Muhtemelen etc klasörü içerisinde my.cnf dosyasına ulaşabilirsiniz. ama tam olarak nerde olduğunu bilmiyorsanız locate my.cnf komutu ile bütün mycnf dosyalarını arayıp bulabilirsiniz.

ETC dizininde olduğunu varsayarak anlatmaya devam edelim. cd etc komutu ile etc klasörüne girin , nano my.cnf komutu ile nano editör yardımı ile dosyayı açın.

şu şekilde sql_mode=”” olarak sql mode yapılandırmasını boşaltın ve CTRL X ile dosyayı kaydedin.

daha sonrasında artık hangi paneli kullanıyorsanız cpanel , directadmin vb farklılık gösterebiliyor.

service mysql restart

komutu ile mysql servisini yeniden başlatın. tamamdır. SSH ile işlemler bu kadar, yaptığınız işlemin doğru olup olmadığını kontrol etmek için ;

mysql -e ‘select @@GLOBAL.sql_mode;’

kodu ile çıktı alın. Çıktınızın ;

şeklinde içeriği boş olması lazım. Herşey bu kadar. Şimdi gelelim olası problemlere. Sunucunuzda birden fazla etc dosyası varsa hangi dosyanın geçerli yapılandırma dosyası olduğunu bilmiyorsanız sunucu yönetiminiz ile iletişime geçmeye çalışın. Bu gün karşılaştığım problem directadmin içerisinde 5-6 adet my.cnf dosyasının bulunmasından etc içerisinde yaptığımız değişikliği görmemesinden kaynaklanıyordu. Diğer dosyalarda değişiklik yaparak mysql i resetleyip kontrollerinizi yapabilir hangi dosyanın doğru dosya olduğunu bularak düzenleme yapabilirsiniz.

MY.cnf dosyası ile sorunu çözemedim ne yapacağım ? Diyorsanız 1 yöntemimiz daha var. Mysql root ile bağlanarak bu ayarı yine boşaltabiliriz!

Mysql üzerinden işlem yaparsanız %99 ihtimalle sorunu çözersiniz çünkü mysql tüm kontrol panellerinde standarttır ve aynı komutlar çalışır. EE neden ilk bunu anlatmadın derseniz, mysql üzerinden yaptığınız yapılandırma değişiklikleri mysql server resetlendiğinde my.cnf dosyası üzerinden okunup sıfırlanır yani my.cnf dosyasını düzeltemediğiniz için her restart attığınızda bu işlemi tekrar yapmanız gerekiyor. Neyse karar sizin ben anlatayımda 

öncelikle mysql –u root –p komutu ile mysql sunucunuza root girişi başlatmaya çalışın. Hemen bu kod sonrasında sizden mysql root şifrenizi isteyecek. mysql root şifrenizi girip enter tuşuna bastığınızda

böyle bir mysql komut penceresi ile karşılacaksınız.

SET @@global.sql_mode= ”;

sorgusu ile sql_mode değerini sıfırlayabilirsiniz. Bu işlem sonrası MYSQL’i RESTART ETMEYİN! tekrar kontrol etmek için öncelikle mysql den çıkmamız gerekiyor. CTRL C yaparak mysql i kapatın roota döndükten sonra

mysql -e ‘select @@GLOBAL.sql_mode;’

komutu ile sorgu yapın muhtemelen artık sql_mode yapılandırmasını boş göreceksiniz.

Yapılması Gereken İşlem Bukadar.