MySQL不正确的日期时间值:“ 0000-00-00 00:00:00”

我最近接手了一个十年前创建的旧项目。它使用MySQL 5.1。

除其他外,我需要将默认字符集从latin1更改为utf8。

例如,我有这样的表:

  CREATE TABLE `users` (

`id` int(10) unsigned NOT NULL AUTO_INCREMENT,

`first_name` varchar(45) CHARACTER SET latin1 COLLATE latin1_general_ci DEFAULT NULL,

`last_name` varchar(45) CHARACTER SET latin1 COLLATE latin1_general_ci DEFAULT NULL,

`username` varchar(127) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL,

`email` varchar(127) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL,

`pass` varchar(20) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL,

`active` char(1) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL DEFAULT 'Y',

`created` datetime NOT NULL,

`last_login` datetime DEFAULT NULL,

`author` varchar(1) CHARACTER SET latin1 COLLATE latin1_general_ci DEFAULT 'N',

`locked_at` datetime DEFAULT NULL,

`created_at` datetime DEFAULT NULL,

`updated_at` datetime DEFAULT NULL,

`ripple_token` varchar(36) CHARACTER SET latin1 COLLATE latin1_general_ci DEFAULT NULL,

`ripple_token_expires` datetime DEFAULT '2014-10-31 08:03:55',

`authentication_token` varchar(255) CHARACTER SET latin1 COLLATE latin1_general_ci DEFAULT NULL,

PRIMARY KEY (`id`),

UNIQUE KEY `index_users_on_reset_password_token` (`reset_password_token`),

UNIQUE KEY `index_users_on_confirmation_token` (`confirmation_token`),

UNIQUE KEY `index_users_on_unlock_token` (`unlock_token`),

KEY `users_active` (`active`),

KEY `users_username` (`username`),

KEY `index_users_on_email` (`email`)

) ENGINE=InnoDB AUTO_INCREMENT=1677 DEFAULT CHARSET=utf8 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC

我设置了自己的Mac来进行此工作。不用考虑太多,我运行了“ brew install mysql”,它安装了MySQL 5.7。所以我有一些版本冲突。

我下载了此数据库的副本并将其导入。

如果我尝试运行这样的查询:

  ALTER TABLE users MODIFY first_name varchar(45) CHARACTER SET utf8 COLLATE utf8_general_ci    NOT NULL

我收到此错误:

  ERROR 1292 (22007): Incorrect datetime value: '0000-00-00 00:00:00' for column 'created' at row 1

我以为可以用以下方法解决此问题:

  ALTER TABLE users MODIFY created datetime  NULL DEFAULT '1970-01-01 00:00:00';

Query OK, 0 rows affected (0.06 sec)

Records: 0 Duplicates: 0 Warnings: 0

但我得到:

  ALTER TABLE users MODIFY first_name varchar(45) CHARACTER SET utf8 COLLATE utf8_general_ci    NOT NULL ;

ERROR 1292 (22007): Incorrect datetime value: '0000-00-00 00:00:00' for column 'created' at row 1

我必须更新每个值吗?

回答:

我建议表是否为空或不是很大的情况是将create语句导出为.sql文件,并根据需要重写它们。如果您有任何现有数据(即导出插入语句),也请执行相同的操作(我建议将其作为create语句在单独的文件中执行)。最后,删除表并首先执行create语句,然后插入。

您可以使用该mysqldump命令(包含在MySQL安装中),也可以安装MySQL

Workbench,这是一个免费的图形工具,它以非常可定制的方式包含此选项,而无需查找特定的命令选项。

以上是 MySQL不正确的日期时间值:“ 0000-00-00 00:00:00” 的全部内容, 来源链接: utcz.com/qa/422311.html

回到顶部