GNU/Linux >> Linux の 問題 >  >> Linux

Mysql日時DEFAULT CURRENT_TIMESTAMPエラー

デフォルトの時間を timestamp に変更する必要がある場合 あなたのデータ型で、

datetime テーブルのユーザー入力を表示しようとしています...

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

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


DEFAULT CURRENT_TIMESTAMP のように 質問には既に回答があります。Windows と Linux の間のテーブル名の大文字と小文字の区別の不一致にのみ回答します。

Windows では、ファイル システムはデフォルトで大文字と小文字を区別しません。
ただし、Linux やその他の *NIX のようなオペレーティング システムでは、デフォルトで大文字と小文字が区別されます。

ここで動作が一致しない理由は、ファイル システムにあります。各テーブルは個別のファイルとして作成され、ファイル システムは大文字と小文字の区別を処理します。

MySQL には、この動作をオーバーライドするパラメーターがあります:

<ブロック引用>

たとえば、Unix では、my_table という名前の 2 つの異なるテーブルを持つことができます。 と MY_TABLE ですが、Windows ではこれら 2 つの名前は同一と見なされます。データベースまたはテーブル名の大文字と小文字が原因で発生するデータ転送の問題を回避するには、次の 2 つのオプションがあります。

  • lower_case_table_names=1 を使用 すべてのシステムで。これの主な欠点は、 SHOW TABLES を使用する場合です または SHOW DATABASES 、元のレターケースでは名前が表示されません。

  • lower_case_table_names=0 を使用 Unix および lower_case_table_names=2 の場合 Windows で。これにより、データベース名とテーブル名の大文字と小文字が保持されます。これの欠点は、ステートメントが常にデータベースとテーブル名を Windows で正しい文字で参照するようにしなければならないことです。大文字と小文字が重要な Unix にステートメントを転送する場合、大文字と小文字が正しくないと機能しません。

    例外: InnoDB テーブルを使用していて、これらのデータ転送の問題を回避しようとしている場合は、lower_case_table_names=1 を設定する必要があります すべてのプラットフォームで、名前を小文字に変換することを強制します。

[...]
このような違いによる問題を回避するには、常に小文字の名前を使用してデータベースとテーブルを作成および参照するなど、一貫した規則を採用することをお勧めします .この規則は、移植性と使いやすさを最大限に高めるために推奨されます。

これは、識別子の大文字と小文字の区別に関する MySQL マニュアルからの抜粋です


DEFAULT CURRENT_TIMESTAMP DATETIME のサポート (データ型) は MySQL 5.6 で追加されました。

5.5 以前のバージョンでは、これは TIMESTAMP にのみ適用されました。 (データ型) 列。

BEFORE INSERT を使用することが可能です 5.5 でトリガーして、列にデフォルト値を割り当てます。

 DELIMITER $$

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

(列に格納された値に対するクエリの) 大文字と小文字の区別は、collation によるものです コラムに使用。 _ci で終わる照合順序 大文字と小文字を区別しません。例:latin1_swedish_ci 大文字と小文字は区別されませんが、latin1_general_cs 大文字と小文字が区別されます。

SHOW CREATE TABLE foo からの出力 文字タイプ列の文字セットと照合順序が表示されます。これは、列ごとのレベルで指定されます。テーブル レベルで指定された「デフォルト」は、新しい列の定義で文字セットが指定されていない場合に、テーブルに追加された新しい列に適用されます。

更新

Kaii は、「大文字と小文字の区別」に関する私の回答は、列に格納された値を扱い、クエリが "New" の値を含む列から値を返すかどうかを指摘しました。 "t.col = 'new'" のような述語で返されます .

識別子に関するカイイの回答を参照してください (テーブル名など) は、Windows と Linux では (デフォルトで) 異なる方法で処理されます。


Linux
  1. MySQLでパスワードによってIDENTIFIEDでGRANTを使用中にエラーが発生しました

  2. MySQL エラー テーブル 'mysql.servers' が存在しません

  3. MySQL - エラー 1045 - アクセスが拒否されました

  1. MySQL –InnoDBのテーブルごとのデータへの変換

  2. Mysqlエラーの解決:開いているファイルが多すぎます

  3. mysql データベースの回復 - mysql/mysqldump がテーブル <database>.<tablename> を指定します (1146)

  1. Mysqlサーバーはデフォルトでインストールされていますか?

  2. MySQLでテーブルを削除する

  3. MySQLの接続エラーが多すぎます