1。このMYSQL構文をWindowsで実行すると、正常に実行されました。
CREATE TABLE New
(
id bigint NOT NULL AUTO_INCREMENT,
timeUp datetime DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id)
)
しかし、Linuxでこのコードを実行しようとするとエラーが発生しました
#1067 - Invalid default value for 'time'
2。 Windowsでは、大文字と小文字は区別されません。新規と新規の両方は同じと見なされます。しかし、Linuxでは大文字と小文字が区別されます。
Linuxの構成
MySQL 5.5.33、phpMyAdmin 4.0.5およびPHP 5.2.17
Windowsの構成
MySql:5.6.11、phpMyAdmin 4.0.4.1 PHP:5.5.0
両方のシステムで共通にする方法はありますか。または、代替アプローチ。読んでくれてありがとう。
DEFAULT CURRENT_TIMESTAMP
のサポートがDATETIME
(データ型)がMySQL 5.6に追加されました。
5.5以前のバージョンでは、これはTIMESTAMP
(データ型)列にのみ適用されました。
5.5でBEFORE INSERT
トリガーを使用して、列にデフォルト値を割り当てることができます。
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
からの出力は、文字タイプ列の文字セットと照合順序を示します。これは、列ごとのレベルで指定されます。テーブルレベルで指定された「デフォルト」は、新しい列定義で文字セットが指定されていない場合、テーブルに追加された新しい列に適用されます。
[〜#〜] update [〜#〜]
Kaiiは、「大文字と小文字の区別」に関する私の答えは列に格納された値を扱い、クエリが"New"
の値を含む列から値を返すかどうかは"t.col = 'new'"
のような述語で返されると指摘しました。
identifiers(例:テーブル名)に関するKaiiの回答を参照してください。Windowsでは、Linuxとは異なる方法で(デフォルトで)処理されます。
_DEFAULT CURRENT_TIMESTAMP
_の質問はすでに回答されているため、WindowsとLinuxの間のテーブル名の大文字と小文字の区別の不一致にのみ応答します。
Windowsでは、ファイルシステムはデフォルトで大文字と小文字を区別しません。
ただし、Linuxおよびその他のオペレーティングシステムなどの* NIXでは、デフォルトで大文字と小文字が区別されます。
ここで振る舞いが一致しない理由は、各テーブルが個別のファイルとして作成され、ファイルシステムが大文字と小文字を区別するため、ファイルシステムにあります。
MySQLには、この動作をオーバーライドするパラメーターがあります。
たとえば、Unixでは、_
my_table
_および_MY_TABLE
_という2つの異なるテーブルを使用できますが、Windowsでは、これら2つの名前は同一と見なされます。データベース名またはテーブル名の大文字小文字に起因するデータ転送の問題を回避するには、2つのオプションがあります。
すべてのシステムで_
lower_case_table_names=1
_を使用します。これの主な欠点は、_SHOW TABLES
_または_SHOW DATABASES
_を使用すると、元の大文字小文字に名前が表示されないことです。Unixでは_
lower_case_table_names=0
_を、Windowsでは_lower_case_table_names=2
_を使用します。これにより、データベース名とテーブル名の大文字と小文字が保持されます。これの欠点は、Windowsでステートメントが常に大文字と小文字の正しいデータベース名とテーブル名を参照するようにする必要があることです。大文字と小文字が区別されるUnixにステートメントを転送する場合、大文字と小文字が正しくないと機能しません。
Exception: InnoDBテーブルを使用していて、これらのデータ転送の問題を回避しようとしている場合は、設定する必要がありますすべてのプラットフォームで_lower_case_table_names=1
_を使用して、名前を強制的に小文字に変換します。[...]
このような違いに起因する問題を回避するために、小文字の名前を使用してデータベースとテーブルを常に作成および参照するなど、一貫した規則を採用することが最善です。この規則は、最大限の移植性と使いやすさのためにお勧めします。
これは 識別子の大文字と小文字の区別に関するMySQLマニュアル からの抜粋です
デフォルトの時間をデータ型で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