Ошибка 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

Это их способ сделать их общими для обеих систем. Или любой альтернативный подход. Спасибо за чтение.

Ответы

Ответ 1

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

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

удаp >

UPDATE

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

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

Ответ 2

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