MySQL #1293错误排查:Plesk服务器导入含双CURRENT_TIMESTAMP的TIMESTAMP列表失败,Cpanel可正常导入
解决MySQL #1293错误:多TIMESTAMP列使用CURRENT_TIMESTAMP的问题
问题根源
你碰到的这个问题本质是MySQL版本差异导致的特性限制:
- 在MySQL 5.6及更早的旧版本里,有个严格限制:单张表只能有一个TIMESTAMP列设置
DEFAULT CURRENT_TIMESTAMP或者ON UPDATE CURRENT_TIMESTAMP。 - Cpanel服务器上的MySQL版本应该是5.6+(已经取消了这个限制),而Plesk服务器上的MySQL版本低于5.6,所以执行原建表语句时直接触发了#1293错误。
可行解决方法
针对这个问题,有两种直接有效的修复方式:
方法1:调整TIMESTAMP列的默认规则(兼容低版本MySQL)
修改其中一个TIMESTAMP列的默认值设置,让它不使用CURRENT_TIMESTAMP,同时可以给updated_at加上ON UPDATE CURRENT_TIMESTAMP(更贴合业务逻辑:数据更新时自动刷新时间)。示例语句如下:
CREATE TABLE `addons` ( `id` int(11) NOT NULL, `name` varchar(255) COLLATE utf32_unicode_ci DEFAULT NULL, `unique_identifier` varchar(255) COLLATE utf32_unicode_ci DEFAULT NULL, `version` varchar(255) COLLATE utf32_unicode_ci DEFAULT NULL, `activated` int(11) NOT NULL DEFAULT '1', `image` varchar(1000) COLLATE utf32_unicode_ci DEFAULT NULL, `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf32 COLLATE=utf32_unicode_ci;
如果业务允许,也可以将updated_at的默认值设为NULL,语句如下:
CREATE TABLE `addons` ( `id` int(11) NOT NULL, `name` varchar(255) COLLATE utf32_unicode_ci DEFAULT NULL, `unique_identifier` varchar(255) COLLATE utf32_unicode_ci DEFAULT NULL, `version` varchar(255) COLLATE utf32_unicode_ci DEFAULT NULL, `activated` int(11) NOT NULL DEFAULT '1', `image` varchar(1000) COLLATE utf32_unicode_ci DEFAULT NULL, `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, `updated_at` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf32 COLLATE=utf32_unicode_ci;
方法2:升级Plesk服务器的MySQL版本
如果你有服务器操作权限,可以把Plesk上的MySQL版本升级到5.6或更高版本。升级后,MySQL就支持多张TIMESTAMP列使用CURRENT_TIMESTAMP作为默认值,原建表语句就能直接执行了。
注意:升级前一定要备份数据库,避免数据丢失。
额外建议
优先推荐方法1,因为它能兼容所有MySQL版本,彻底避免不同服务器环境的版本差异问题。
内容的提问来源于stack exchange,提问作者Shubham Nikam
相关产品推荐
相关产品推荐

