1 当我在Windows上运行这个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 在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
他们有什么方法可以让它们在两个系统中都很常见。或任何替代方法。谢谢你的阅读。
答案 0 :(得分:32)
在MySQL 5.6中添加了 DEFAULT CURRENT_TIMESTAMP
对 DATETIME
(数据类型)的支持。
在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
的输出将显示字符类型列的字符集和排序规则。这是按列级别指定的。当新列定义未指定字符集时,表级指定的“default”适用于添加到表中的新列。
<强>更新强>
Kaii指出,我关于“区分大小写”的答案处理存储在列中的值,以及查询是否将从包含值"New"
的列返回值将返回类似{{1}的谓词}}
请参阅Kaii关于标识符(例如表名)在Windows上以不同方式(默认情况下)处理的答案。
答案 1 :(得分:3)
由于DEFAULT CURRENT_TIMESTAMP
问题已经得到解答,我只会回应窗口和linux之间的表名中的区分大小写不匹配。
在Windows上,文件系统默认情况下不区分大小写 但是在Linux和其他类似操作系统的NIX上,默认情况下它们区分大小写。
您在这里遇到行为不匹配的原因是文件系统,因为每个表都是作为单独的文件创建的,文件系统会为您处理区分大小写。
MySQL有一个参数来覆盖这种行为:
的摘录例如,在Unix上,您可以有两个名为
my_table
的不同表 和MY_TABLE
,但在Windows上这两个名称被认为是相同的。 避免数据库或信件箱引起的数据传输问题 表名,你有两个选择:
在所有系统上使用
lower_case_table_names=1
。这样做的主要缺点是,当您使用SHOW TABLES
或SHOW DATABASES
时,您可以这样做 没有看到原始信件中的名字。在Unix上使用
lower_case_table_names=0
,在Windows上使用lower_case_table_names=2
。这样可以保留数据库和表名的字母大小写。 这样做的缺点是你必须确保你的陈述 总是用正确的方式引用你的数据库和表名 Windows上的字母。如果您将语句转移到Unix,那么 lettercase很重要,如果是lettercase,它们不起作用 不正确。
例外: 如果您正在使用InnoDB表,而您正试图避免这些数据传输问题,则应设置{{1}在所有平台上强制名称转换为小写。[...]
为避免这种差异造成的问题, 最好采用一致的约定,例如始终创建 并使用小写名称引用数据库和表。这个 建议采用惯例,以实现最大的便携性和易用性。
答案 2 :(得分:1)
如果您希望默认时间必须更改为数据类型中的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 强>