mysql - 为数据库中的所有列设置默认值

标签 mysql sql

我在 PHP + MySQL 应用程序中工作。该应用程序对我来说工作正常。但是当我将其托管在另一台服务器上时,出现了 MySQL 错误:

Error Code: 1364. Field 'field' doesn't have a default value

我知道这是 MySQL 版本的问题,我们应该为所有列设置默认值。但目前我有 100 多张 table 。因此,我需要将默认值设置为 NULL 所有表中还没有默认值的所有列。

我不能使用严格模式选项,因为服务器是共享的。是否可以一步设置而不是为每个表设置?如果不可能,请告诉我最简单的设置方法。

任何帮助将不胜感激

最佳答案

对于遇到此问题的任何其他人,需要编写一些代码才能自动执行,但您可以按照以下方式执行此操作:

首先运行以下查询:

SELECT table_schema,table_name,column_name,data_type FROM information_schema.columns WHERE IS_NULLABLE='NO' AND column_default is null AND column_key=''

接下来,对于从上述查询返回的每一行,执行以下操作:

If data_type contains 'int' set default to 0
else if data_type='datetime' set default to '0000-00-00 00:00:00'
else if data_type='date' set default to '0000-00-00'
else if data_type='time' set default to '00:00:00'
else set default to ''

创建并运行以下查询,将所有 [[...]] 变量替换为它们的正确值:

ALTER TABLE `[[table_schema]]`.`[[table_name]]` ALTER COLUMN `[[column_name]]` SET DEFAULT '[[default]]'

这应该替换所有数据库、所有表、所有设置为 NOT NULL 且不是主键且未设置默认值的列的默认值。

关于mysql - 为数据库中的所有列设置默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39504212/

相关文章:

php - 将电子邮件重定向到网址

MYSQL 查询不允许时间戳列具有同一日期的两个值

mysql - Shapado:在 MySQL 还是 PostgreSQL 上运行?

sql - INNER JOIN 用作 CROSS JOIN

java - 在实体类中定义一个不是列的变量

mysql - 创建插入函数

php - 无法从客户端网站连接到远程mysql服务器

MySQL/玛丽亚数据库 : Can't create a procedure using the case statement

mysql - sql AND OR LIKE 运算符显示值

php - 在 sphinx 中添加 where 条件以及如何删除 sphinx 中的 setlimit