MySQL:#1293 - table 定义不正确
MySQL: #1293 - Incorrect table definition
使用 MySQL 5.6.17 在本地服务器中设计数据库和 Table 并导出到 *.sql 文件。
当尝试将 *.sql 文件导入 Live Server(MySQL 5.1.36) 时出现以下错误:
#1293 - Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause
Understood the issue through this link
有什么方法可以在不更新 MySQL 版本的情况下将本地服务器的 *.sql 文件导入到 Live Server?
TABLE:
CREATE TABLE 'currency' (
'id' int(11) NOT NULL AUTO_INCREMENT,
'currency_name' varchar(30) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT
NULL,
'country' varchar(20) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
'currency' varchar(5) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
'created_by' int(11) NOT NULL,
'created_on' timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
'status' int(1) NOT NULL DEFAULT '1',
'modified_by' int(11) DEFAULT NULL,
'modified_on' timestamp NOT NULL ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY ('id')) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8;
注意:- Windows 服务器 运行 WAMP(本地服务器)和 QNAP(实时服务器)。
没有直接的方法,因为对于 MySQL 服务器 5.6.5 之前的任何版本,这都不是有效的 table 定义。
您可以手动编辑转储文件或使用 sed
或 perl
之类的工具来修改有问题的行,或者您可以更改源服务器上的 table 定义...但是您的应用程序可能会期待这种行为,因此无法正常工作。
您还可以修改 table 定义,使其对 5.1 有效,只有一个自动时间戳,并使用触发器获得所需行为的其余部分。
当然,最好的课程是其中之一:
将 5.1 服务器更新到 5.5,然后再更新到 5.6,或者
在开发 5.1 服务器时,请始终在开发环境中使用 5.1,这样您就不会陷入这种依赖与旧部署不兼容的新功能的情况。 . 不过请记住,5.6 版中有一些非常重要的改进。
使用 MySQL 5.6.17 在本地服务器中设计数据库和 Table 并导出到 *.sql 文件。
当尝试将 *.sql 文件导入 Live Server(MySQL 5.1.36) 时出现以下错误:
#1293 - Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause
Understood the issue through this link
有什么方法可以在不更新 MySQL 版本的情况下将本地服务器的 *.sql 文件导入到 Live Server?
TABLE:
CREATE TABLE 'currency' (
'id' int(11) NOT NULL AUTO_INCREMENT,
'currency_name' varchar(30) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT
NULL,
'country' varchar(20) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
'currency' varchar(5) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
'created_by' int(11) NOT NULL,
'created_on' timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
'status' int(1) NOT NULL DEFAULT '1',
'modified_by' int(11) DEFAULT NULL,
'modified_on' timestamp NOT NULL ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY ('id')) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8;
注意:- Windows 服务器 运行 WAMP(本地服务器)和 QNAP(实时服务器)。
没有直接的方法,因为对于 MySQL 服务器 5.6.5 之前的任何版本,这都不是有效的 table 定义。
您可以手动编辑转储文件或使用 sed
或 perl
之类的工具来修改有问题的行,或者您可以更改源服务器上的 table 定义...但是您的应用程序可能会期待这种行为,因此无法正常工作。
您还可以修改 table 定义,使其对 5.1 有效,只有一个自动时间戳,并使用触发器获得所需行为的其余部分。
当然,最好的课程是其中之一:
将 5.1 服务器更新到 5.5,然后再更新到 5.6,或者
在开发 5.1 服务器时,请始终在开发环境中使用 5.1,这样您就不会陷入这种依赖与旧部署不兼容的新功能的情况。 . 不过请记住,5.6 版中有一些非常重要的改进。