Saya memiliki tabel database yang berisi tanggal
(`date` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00').
Saya menggunakan MySQL. Dari program terkadang data dilewatkan tanpa tanggal ke database. Jadi, nilai tanggal ditetapkan secara otomatis 0000-00-00 00:00:00
ketika data tabel dipanggil dengan kolom tanggal yang memberikan kesalahan
...'0000-00-00 00:00:00' can not be represented as java.sql.Timestamp.......
Saya mencoba meneruskan nilai nol ke tanggal saat memasukkan data, tetapi data tersebut ditetapkan ke waktu sekarang.
Apakah ada cara saya bisa mendapatkan ResultSet
tanpa mengubah struktur tabel?
Apakah "tanggal" '0000-00-00 "adalah" tanggal "yang valid tidak relevan dengan pertanyaan." Ubah saja database "jarang merupakan solusi yang layak.
Fakta:
Jadi, jika saya "hanya mengubah database", ribuan baris kode PHP akan rusak.
Pemrogram Java harus menerima tanggal nol MySQL dan mereka harus mengembalikan tanggal nol ke dalam basis data, ketika bahasa lain bergantung pada "fitur" ini.
Seorang programmer yang terhubung ke MySQL perlu menangani null dan 0000-00-00 serta tanggal yang valid. Mengubah 0000-00-00 menjadi nol bukanlah opsi yang dapat dilakukan, karena Anda tidak dapat lagi menentukan apakah tanggal tersebut diharapkan menjadi 0000-00-00 untuk penulisan kembali ke database.
Untuk 0000-00-00, saya sarankan memeriksa nilai tanggal sebagai string, kemudian mengubahnya ke ("y", 1), atau ("yyyy-MM-dd", 0001-01-01), atau menjadi tidak valid Tanggal MySQL (kurang dari tahun 1000, iirc). MySQL memiliki "fitur" lain: tanggal rendah secara otomatis dikonversi ke 0000-00-00.
Saya menyadari saran saya adalah kludge. Namun begitu juga dengan penanganan tanggal MySQL. Dan dua kludges tidak memperbaikinya. Faktanya adalah, banyak programmer harus menangani nol-tanggal MySQL selamanya .
sumber
Tambahkan pernyataan berikut ke protokol JDBC-mysql:
sebagai contoh:
sumber
Alih-alih menggunakan tanggal palsu seperti
0000-00-00 00:00:00
atau0001-01-01 00:00:00
(yang terakhir harus diterima karena merupakan tanggal yang valid), ubah skema basis data Anda, untuk memungkinkanNULL
nilai.sumber
Sebagai perubahan haluan luar biasa, ketika Anda tidak dapat melakukan perubahan pada kolom tanggal Anda atau untuk memperbarui nilai-nilai, atau ketika modifikasi ini terjadi, Anda dapat melakukan pilih menggunakan case / kapan.
sumber
Saya bergulat dengan masalah ini dan mengimplementasikan solusi penggabungan URL yang disumbangkan oleh @Kushan dalam jawaban yang diterima di atas. Ini bekerja dalam instance MySql lokal saya. Tetapi ketika saya menempatkan aplikasi Play / Scala saya ke Heroku, itu tidak lagi berfungsi. Heroku juga menggabungkan beberapa argumen ke URL DB yang mereka sediakan kepada pengguna, dan solusi ini, karena penggunaan gabungan Heroku dari "?" sebelum set argumen mereka sendiri, tidak akan bekerja. Namun saya menemukan solusi berbeda yang tampaknya berfungsi sama baiknya.
Saya memasukkan ini ke dalam deskripsi tabel saya dan memecahkan masalah '0000-00-00 00:00:00' tidak dapat direpresentasikan sebagai java.sql.Timestamp
sumber
Anda dapat mencoba seperti ini
sumber
Tidak ada tahun 0000 dan tidak ada bulan 00 atau hari 00. Saya sarankan Anda mencoba
Sementara satu tahun 0 telah didefinisikan dalam beberapa standar, itu lebih cenderung membingungkan daripada IMHO yang berguna.
sumber
hanya melemparkan bidang sebagai char
Misalnya: cast (updatedate) sebagai char as updatedate
sumber
Saya tahu ini akan menjadi jawaban yang terlambat, namun inilah jawaban yang paling benar.
Di database MySQL, ubah
timestamp
nilai default Anda menjadiCURRENT_TIMESTAMP
. Jika Anda memiliki catatan lama dengan nilai palsu, Anda harus memperbaikinya secara manual.sumber
Anda dapat menghapus properti "bukan null" dari kolom Anda di tabel mysql jika tidak perlu. ketika Anda menghapus properti "bukan nol" tidak perlu untuk konversi "0000-00-00 00:00:00" dan masalah hilang.
Setidaknya bekerja untuk saya.
sumber
Saya percaya ini adalah bantuan penuh untuk yang mendapatkan di bawah ini Pengecualian untuk memompa data melalui Logstash Error: logstash.inputs.jdbc - Pengecualian saat menjalankan permintaan JDBC {: exception => #}
Jawaban: jdbc: mysql: // localhost: 3306 / database_name? ZeroDateTimeBehavior = convertToNull "
atau jika Anda bekerja dengan mysql
sumber