我最近接手了一个十年前创建的旧项目。它使用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 5.1。 除其他外,我需要将默认字符集从latin1更改为utf8。 例如,我有这样的表: 我设置了自己的Mac来进行此工作。不用考虑太多,我运行了“ brew install mysql”,它安装了MySQL 5.7。所以我有一些版本冲突。 我下载了此数据库的副本并将其导入。 如果我尝试运行这样的查询: 我收到此错误: 我以为可以
我引用了许多题目,题目和我的题目相同,但它们的方法和问题不同,所以这个题目不是重复的。 我有一个表,其中是类型,并且具有默认值。 通过网站插入工作正常,但当我尝试通过插入任何值时,我得到以下错误。 版本为。还有一件事,最近我们的服务器已经从升级到。 下面是查询 在升级之后,我们就开始面临这个问题
我想在MySQL中允许零日期。我已将更改为。 我已经在中更改了它。 然而,当我尝试插入数据时,我得到了错误, 数据截断:不正确的datetime值:“0000-00-00 00:00:00” MySQL版本为5.7.18。 这方面的任何想法都将大有帮助。
问题内容: 我需要在数据库上更改一些值。 我忘记为表格设置可空值,并且默认情况下将其设置为0000-00-00 00:00:00。 现在,我需要将该值转换为。 字段类型为“日期时间”。 我该怎么做? 我尝试使用典型的方法,但是它不起作用。 问题答案: 您首先需要将该列设置为可空: 然后更新值:
我正在做一个需要从数据库中提取数据的项目,我使用SpringMVC从数据库中构建模型来选择数据。 以下是我的JSP页面的问题: 如您所见,我尝试使用
我有一个包含日期的数据库表 有没有什么方法可以在不改变表结构的情况下获得?
问题内容: 我是PHP的新手,目前仍在学习。我认为我的注册表存在问题。,,所有插入到MySQL成功。而且不要。 我以为我用错了,但这与我的需要相呼应。但是,当我尝试将两个时间戳字段都插入MySql时,我看到的是这些字段,而不是它在sql查询之前回显的内容。我在这里做错了什么?任何帮助深表感谢。 这就是给我看的东西。 问题答案: 这种情况经常发生。 您将mysql时间戳与UNIX时间戳(实际上是DA
本文向大家介绍MySQL 8.0.13设置日期为0000-00-00 00:00:00时出现的问题解决,包括了MySQL 8.0.13设置日期为0000-00-00 00:00:00时出现的问题解决的使用技巧和注意事项,需要的朋友参考一下 刚开始学习数据库操作,今天存数据时发现,保存的时候报错(Error 1292: Incorrect datetime value: '0000-00-00' f