7/24 Türkçe destek:[email protected]Sistem durumuDestek talebi

MySQL #1067 Invalid Default Value ve Strict Mode Hataları

Okuma süresi: 2 dk

Kısa yanıt: Bu hatalar, eski bir uygulamanın veya yedeğin, katı SQL modunda (STRICT_TRANS_TABLES, NO_ZERO_DATE) çalışan güncel MySQL/MariaDB sunucularında kabul edilmeyen değerler kullanmasından kaynaklanır. Kalıcı çözüm, tablo tanımlarında ‘0000-00-00’ gibi geçersiz varsayılan değerleri düzeltmek ve uygulamayı güncellemektir.

Bu rehber kimin için: Eski uygulama taşıyan geliştiriciler · Gereken süre: 20 dakika · Seviye: İleri

Güncel veritabanı sunucuları, veri bütünlüğünü korumak için katı SQL modunu varsayılan olarak etkin tutar. Eski uygulamalar ise boş dize yerine sayı, ‘0000-00-00 00:00:00’ gibi geçersiz tarih veya tam belirtilmemiş GROUP BY sorguları kullanabilir. Bu uygulamalar eski sunucuda sorunsuz çalışırken yeni sunucuda hata verir.

Hataya göre çözüm

  1. #1067 Invalid default value: SQL dosyasında DEFAULT '0000-00-00 00:00:00' ifadelerini DEFAULT NULL veya DEFAULT CURRENT_TIMESTAMP ile değiştirin.
  2. #1366 Incorrect integer value: Uygulama sayısal sütuna boş dize gönderiyor; kodda değeri NULL veya 0 olarak gönderin.
  3. ONLY_FULL_GROUP_BY: SELECT listesindeki toplanmayan sütunları GROUP BY’a ekleyin (bu mod MySQL 5.7 ve sonrasında varsayılan olarak açıktır, MariaDB’de değildir). Yalnız MySQL’de geçerli bir seçenek olarak ANY_VALUE() kullanın.
  4. Oturum bazlı geçici çözüm: Uygulama bağlantısından sonra SET SESSION sql_mode = ‘NO_ENGINE_SUBSTITUTION’; çalıştırmak yalnızca o bağlantı için modu gevşetir.
  5. İçe aktarma için: SQL dosyasının başına SET SESSION sql_mode = ''; satırı ekleyerek eski verileri içe aktarın, ardından tablo tanımlarını düzeltin.
  6. Uygulamayı güncelleyin: Kalıcı çözüm için uygulamanın güncel sürümüne geçin.

Sunucu genelinde kapatılabilir mi?

Paylaşımlı sunucularda sql_mode sunucu genelinde değiştirilemez; oturum bazlı ayar kullanılmalıdır. VPS’te my.cnf dosyasında sql_mode değerini değiştirebilirsiniz; ancak katı modu tamamen kapatmak sessiz veri kayıplarına neden olabileceğinden önerilmez.

Hâlâ çözülmediyse

İçe aktarma sırasında başka hatalar da alıyorsanız büyük SQL dosyası içe aktarma rehberindeki karakter seti ve collation çözümlerine bakın. Eski uygulamalar için özelleştirilmiş veritabanı ayarları gerekiyorsa VPS sunucu paketlerimiz esneklik sağlar.

Sık sorulan sorular

Hangi sürüm kullanılıyor?

SELECT VERSION(); sorgusu sunucu sürümünü gösterir.

WordPress bu hatayı verir mi?

Güncel WordPress katı modla uyumludur; hata genellikle eski eklentilerden gelir.

Bu hataları MariaDB’de de alır mıyım?

Kısmen. MariaDB’nin varsayılan SQL modunda STRICT_TRANS_TABLES vardır, NO_ZERO_DATE ve ONLY_FULL_GROUP_BY ise yoktur. Bu yüzden #1366 gibi katı mod hataları MariaDB’de de görülür; sıfır tarih ve GROUP BY hataları ise çoğunlukla MySQL 5.7 ve sonraki sürümlerde çıkar. Sunucunuzdaki modu SELECT @@sql_mode; sorgusuyla görebilirsiniz.

İlgili rehberler