Ошибка Mysql datetime DEFAULT CURRENT_TIMESTAMP

1. Когда я запускал этот синтаксис MYSQL в окнах, он работал правильно.

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. В окнах корпус не чувствителен, например. Новые и новые оба считаются одинаковыми. Но на 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 (datatype).

Можно использовать триггер 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 заканчивающиеся на _ci , нечувствительны к регистру. Например, latin1_swedish_ci нечувствителен к регистру, но latin1_general_cs чувствителен к регистру.

Вывод команды SHOW CREATE TABLE foo отображает набор символов и сортировку для столбцов типа символов. Это указывается на уровне столбца. «Значение по умолчанию», указанное на уровне таблицы, применяется к новым столбцам, добавленным в таблицу, когда новое определение столбца не указывает набор символов.

ОБНОВИТЬ

Кайи отметил, что мой ответ «чувствительность к регистру» относится к значениям, хранящимся в столбцах, и будет ли запрос возвращать значение из столбца, содержащего значение "New" будет возвращен с предикатом типа "t.col = 'new'" .

См. Ответ Kaii относительно идентификаторов (например, имен таблиц), которые обрабатываются по-разному (по умолчанию) в Windows, чем в Linux.

Поскольку на вопрос DEFAULT CURRENT_TIMESTAMP уже дан ответ, я отвечу только на несоответствие чувствительности к регистру в именах таблиц между окнами и linux.

В Windows файловые системы по умолчанию не учитывают регистр.
Но в Linux и других * NIX, таких как операционные системы, они чувствительны к регистру по умолчанию.

Причина, по которой вы получаете несоответствие в поведении здесь, – это файловая система, так как каждая таблица создается как отдельный файл, а файловая система обрабатывает чувствительность к регистру.

У MySQL есть параметр, чтобы переопределить это поведение:

Например, в Unix вы можете иметь две разные таблицы с именем my_table и MY_TABLE , но в Windows эти два имени считаются идентичными. Чтобы избежать проблем передачи данных, возникающих из буквенного обозначения имен базы данных или таблиц, у вас есть два варианта:

  • Используйте 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 по чувствительности к регистру идентификаторов

если вы хотите, чтобы время по умолчанию менялось на 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