2014-06-13 32 views
10

Ben bir alanla MySql tablo olarak tanımlanan sahip ardından 'yarattı' gibi bir şey gösterecektir 'timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, bir makinede boş olabilir, başka değil? benim yerel makinede</p> <pre><code>`created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP </code></pre> <p>, ben çalıştırabilirsiniz:

INSERT INTO mytbl (id, user_id, created) VALUES(88882341234, 765, null); 
SELECT id, user_id, created FROM mytbl WHERE id = '88882341234'; 

Ve 2014-06- 13 21:16:42 '. (Ben mysqldump aracılığıyla sağlamış, (yerel ve evreleme boyunca) tablolardan

Column 'created' cannot be null. 

şemalar aynıdır: Aynı sorguları çalıştırırsanız

Ama basamak sunucusunda

, bu hatayı alıyorum Bu testi çalıştırmadan önce tabloyu kopyalamak için).

Her iki makinede de MySql 5.6.17 çalıştırıyorum. Ayrıca her ikisinin de aynı sql_mode'a sahip olmasını sağladım.

Sorun ne olabilir?

P.S. Ben null null olmayan bir alanın değerini ayarlama olurdu neden bilmiyorum insanlar için MySql Docs ki:

In addition, you can initialize or update any TIMESTAMP column to the current date and time by assigning it a NULL value, unless it has been defined with the NULL attribute to permit NULL values.

+0

sorun sorgu sadece yanlış ve MySQL (yerel makinenizde elini tutarak da olabilir Farklı SQL modu nedeniyle şüpheleniyorum). Eğer "yaratıldı" null olamazsa, o zaman neden yeryüzünde null olarak ayarlamaya çalışıyorsunuz? – Jon

+0

Bu, null olmayan bir zaman damgası alanının değerini null olarak ayarlamanın, değeri şu anki saat olarak otomatik olarak ayarlamasının bir yolu olduğunu düşünüyor: http://dev.mysql.com/doc/refman/5.5/en/ timestamp-initialization.html Bu sorguyu orijinal olarak kim yazdıysa (bana değil) muhtemelen bunu niyet ediyordu. "Farklı SQL modu" ile ne demek istiyorsun? Bunu nasıl kontrol edebilir ve düzenleyebilirim? – Ryan

+0

Bahse girerim http://dev.mysql.com/doc/refman/5.6/en/sql-mode.html. Ben araştıracağım. – Ryan

cevap

26

ile değiştirebilirsiniz. MySQL değişkeni/parametresi explicit_defaults_for_timestamp yerel makinemde KAPALI, ancak uzak makinemde AÇIK.

Ben Sonra "uygulama" olarak değiştirildi "Parametre" "grubu-yeniden başlatma bekleyen" ne zaman seyretmek benim AWS RDS örnekleri sayfasına gitti benim AWS RDS Parametre Grupları sayfasını ziyaret ederek 1 0. ila explicit_defaults_for_timestamp değiştirdi. Sonra belirli örneği yeniden başlattım.

Bu bağlantılar bana yardımcı:

+0

Teşekkürler, mysql 5.6 ile benim ubuntu sunucusunda benim için çalışıyor. – VictorV

+1

Güncellemeyi gönderdiğiniz için teşekkür ederiz. Muhtemelen problemi bulmak için bizi çağımıza çekerdi! – Andris

+0

Geleneksel mySQL sunucusundan Amazon RDS'ye geçirildiğinde çalıştım. –

0

temel sorun INSERT sadece yanlış olmasıdır: o bir NULL eklemeye çalışıyor NULL olmayan bir sütun.

sadece sorguyu düzeltmek olduğunu yapması gerekenler:

INSERT INTO mytbl (id, user_id) VALUES(88882341234, 765); 

bu sadece basamak sunucusunda hataya neden oluyor nedense, sunucunun strict SQL mode çalışır ve bu nedenle hemen eklemek çalıştığınızda iptal olmasıdır created'a yanlış bir değer.

Kolayca SELECT @@SESSION.sql_mode ile yürürlükte SQL modunu kontrol ve (kendi sunucusunda hatayı yeniden böylece belki) Ben sorunun ne olduğunu buldum

SET SESSION sql_mode = 'STRICT_ALL_TABLES' 
+0

Maalesef, benim 2 sunucumda zaten sql_mode var, bu yüzden sorun değil. Ve ben yıllarca çalıştığı için (ve hala yerel makinem üzerinde çalışıyor) ve bu hafta sadece Anlık Sunucu'mda çalışmayı durdurduğum için sorguyu düzenlemek istemiyorum (ve ne olduğunu anlayamadım). benim Aşama sunucumla değiştirildi). Denediğin için teşekkürler. – Ryan

+0

@Ryan: Şimdi işe yaramazsa yıllarca işe yaradığı ve bunun yanlış olduğunu biliyorsunuzdur? Kırılan ihtiyaçların giderilmesine karar vermek için ne gerekir? Bu senin kodun, emin olmak için seçim ama ben sadece bu akıl yürütme çizgisini yapamam. – Jon

+2

Yerel makinemde veya üretimimde * kırılmadığı gerçeği, henüz problemi anlamadığım ve sorunun Aşamaya özel olduğu anlamına geliyor. Asla kodu değiştirmek istemiyorum (özellikle üretimde bizim için para kazanıyorsa). Son birkaç gün içinde neyin değiştiğini anlamak istiyorum. – Ryan

İlgili konular