GNU/Linux >> Belajar Linux >  >> Linux

Kesalahan datetime mysql DEFAULT CURRENT_TIMESTAMP

jika Anda ingin waktu default harus diubah menjadi timestamp dalam tipe data Anda,

datetime akan menampilkan input pengguna dari tabel...

http://dev.mysql.com/doc/refman/5.0/en/timestamp-initialization.html

http://dev.mysql.com/doc/refman/5.6/en/timestamp-initialization.html


Sebagai DEFAULT CURRENT_TIMESTAMP pertanyaan sudah dijawab, saya hanya akan menanggapi ketidaksesuaian sensitivitas huruf besar-kecil pada nama tabel antara windows dan linux.

Di Windows, sistem file secara default tidak peka huruf besar-kecil.
Namun di Linux dan *NIX lainnya seperti Sistem Operasi, mereka peka terhadap huruf besar-kecil secara default.

Alasan mengapa Anda mendapatkan ketidakcocokan dalam perilaku di sini adalah sistem file, karena setiap tabel dibuat sebagai file terpisah dan sistem file menangani sensitivitas huruf besar-kecil untuk Anda.

MySQL memiliki parameter untuk mengesampingkan perilaku ini:

Misalnya, di Unix, Anda dapat memiliki dua tabel berbeda bernama my_table dan MY_TABLE , tetapi pada Windows kedua nama ini dianggap identik. Untuk menghindari masalah transfer data yang timbul dari huruf huruf nama database atau tabel, Anda memiliki dua opsi:

  • Gunakan lower_case_table_names=1 pada semua sistem. Kerugian utama dengan ini adalah ketika Anda menggunakan SHOW TABLES atau SHOW DATABASES , Anda tidak melihat nama dalam huruf aslinya.

  • Gunakan lower_case_table_names=0 di Unix dan lower_case_table_names=2 di Windows. Ini mempertahankan huruf nama database dan tabel. Kerugiannya adalah Anda harus memastikan bahwa pernyataan Anda selalu merujuk ke nama database dan tabel Anda dengan huruf huruf yang benar di Windows. Jika Anda mentransfer pernyataan Anda ke Unix, di mana huruf itu penting, pernyataan itu tidak berfungsi jika huruf itu salah.

    Pengecualian: Jika Anda menggunakan tabel InnoDB dan mencoba menghindari masalah transfer data ini, Anda harus menyetel lower_case_table_names=1 pada semua platform untuk memaksa nama dikonversi menjadi huruf kecil.

[...]
Untuk menghindari masalah yang disebabkan oleh perbedaan tersebut,yang terbaik adalah mengadopsi konvensi yang konsisten, seperti selalu membuat dan merujuk ke database dan tabel menggunakan nama huruf kecil . Konvensi ini direkomendasikan untuk portabilitas maksimum dan kemudahan penggunaan.

Ini adalah kutipan dari manual MySQL tentang sensitivitas huruf pengidentifikasi


DEFAULT CURRENT_TIMESTAMP dukungan untuk DATETIME (tipe data) telah ditambahkan di MySQL 5.6.

Di versi 5.5 dan sebelumnya, ini hanya berlaku untuk TIMESTAMP kolom (tipe data).

Dimungkinkan untuk menggunakan BEFORE INSERT trigger di 5.5 untuk menetapkan nilai default ke kolom.

 DELIMITER $$

 CREATE TRIGGER ...
 BEFORE INSERT ON mytable
 FOR EACH ROW
 BEGIN
    IF NEW.mycol IS NULL THEN
       SET NEW.mycol = NOW();
    END IF;
 END$$

Sensitivitas huruf besar (kueri terhadap nilai yang disimpan dalam kolom) disebabkan oleh collation digunakan untuk kolom. Kumpulan yang diakhiri dengan _ci tidak peka huruf besar-kecil. Misalnya latin1_swedish_ci tidak peka huruf besar/kecil, tetapi latin1_general_cs peka huruf besar/kecil.

Keluaran dari SHOW CREATE TABLE foo akan menampilkan kumpulan karakter dan susunan untuk kolom tipe karakter. Ini ditentukan pada tingkat per kolom. "Default" yang ditentukan di tingkat tabel berlaku untuk kolom baru yang ditambahkan ke tabel saat definisi kolom baru tidak menentukan rangkaian karakter.

PEMBARUAN

Kaii menunjukkan bahwa jawaban saya tentang "sensitivitas huruf" berkaitan dengan nilai yang disimpan dalam kolom, dan apakah kueri akan mengembalikan nilai dari kolom yang berisi nilai "New" akan dikembalikan dengan predikat seperti "t.col = 'new'" .

Lihat jawaban Kaii tentang pengidentifikasi (mis. nama tabel) ditangani secara berbeda (secara default) di Windows daripada di Linux.


Linux
  1. Apakah Server Mysql Diinstal Secara Default?

  2. Tabel Kesalahan MySQL 'mysql.servers' tidak ada

  3. Pulihkan database mysql - mysql/mysqldump memberikan tabel <database>.<tablename> tidak ada (1146)

  1. MySQL – Mengonversi ke Data Per Tabel untuk InnoDB

  2. Menyelesaikan kesalahan Mysql:Terlalu banyak file yang terbuka

  3. Nama tabel sensitif huruf MySQL di Linux

  1. Kesalahan menggunakan GRANT dengan IDENTIFIED dengan kata sandi di MySQL

  2. Jatuhkan tabel di MySQL

  3. Terlalu banyak kesalahan koneksi di MySQL