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