MySQL 从 Amazon MySQL RDS 本地导入转储时出现语法错误?
MySQL Syntax error when locally importing dump from Amazon MySQL RDS?
当我从 Amazon RDS 创建数据库转储然后尝试将其导入本地时,结果是 ERROR 1064 (42000) at line 54
。
第54行有如下语句:
CREATE TABLE account_emailconfirmation (
转储使用的命令是:
mysqldump -u user -h host.rds.amazonaws.com -p --default-character-set=utf8 --result-file=sync.sql database_name
用于导入的命令是:
mysql --user=root -p mpl -vv < sync.sql
这是输出(详细程度增加)。
--------------
CREATE TABLE `account_emailconfirmation` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`created` datetime(6) NOT NULL,
`sent` datetime(6) DEFAULT NULL,
`key` varchar(64) NOT NULL,
`email_address_id` int(11) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `key` (`key`),
KEY `acc_email_address_id_5bcf9f503c32d4d8_fk_account_emailaddress_id` (`email_address_id`),
CONSTRAINT `acc_email_address_id_5bcf9f503c32d4d8_fk_account_emailaddress_id` FOREIGN KEY (`email_address_id`) REFERENCES `account_emailaddress` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
--------------
ERROR 1064 (42000) at line 54: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(6) NOT NULL,
`sent` datetime(6) DEFAULT NULL,
`key` varchar(64) NOT NULL,
' at line 3
Bye
'key' 是 MySQL 中的保留字,不应用作列名。 Amazon RDS 上的不同版本可能允许它,但最好的办法是将列名称更改为不同的名称。
问题出在 datetime(6) 上。 MySql 在 v5.6.4 中引入了小数秒的存储。在日期时间中指示小数秒的语法 - 这是 (6) - 以前的 mysql 版本无法识别。
数据是从 mysql v5.6.4 或更高版本导出的,并试图导入到更早的版本中。由于错误消息以(6)开头,我认为这是问题所在。
当我从 Amazon RDS 创建数据库转储然后尝试将其导入本地时,结果是 ERROR 1064 (42000) at line 54
。
第54行有如下语句:
CREATE TABLE account_emailconfirmation (
转储使用的命令是:
mysqldump -u user -h host.rds.amazonaws.com -p --default-character-set=utf8 --result-file=sync.sql database_name
用于导入的命令是:
mysql --user=root -p mpl -vv < sync.sql
这是输出(详细程度增加)。
--------------
CREATE TABLE `account_emailconfirmation` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`created` datetime(6) NOT NULL,
`sent` datetime(6) DEFAULT NULL,
`key` varchar(64) NOT NULL,
`email_address_id` int(11) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `key` (`key`),
KEY `acc_email_address_id_5bcf9f503c32d4d8_fk_account_emailaddress_id` (`email_address_id`),
CONSTRAINT `acc_email_address_id_5bcf9f503c32d4d8_fk_account_emailaddress_id` FOREIGN KEY (`email_address_id`) REFERENCES `account_emailaddress` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
--------------
ERROR 1064 (42000) at line 54: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(6) NOT NULL,
`sent` datetime(6) DEFAULT NULL,
`key` varchar(64) NOT NULL,
' at line 3
Bye
'key' 是 MySQL 中的保留字,不应用作列名。 Amazon RDS 上的不同版本可能允许它,但最好的办法是将列名称更改为不同的名称。
问题出在 datetime(6) 上。 MySql 在 v5.6.4 中引入了小数秒的存储。在日期时间中指示小数秒的语法 - 这是 (6) - 以前的 mysql 版本无法识别。
数据是从 mysql v5.6.4 或更高版本导出的,并试图导入到更早的版本中。由于错误消息以(6)开头,我认为这是问题所在。