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

时间:2016-09-15 06:15:56

标签: mysql sql

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

  

错误代码:1364。字段“字段”没有默认值

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

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

非常感谢任何帮助

2 个答案:

答案 0 :(得分:0)

我发现的另一个解决方案是: -

获取所有列名称将其放入数组中... 现在推送列数组中的值进行插入 - 对于所有那些我们没有值的数组,使用ZERO值。 例如: 在表中我们有COLUMN NAME LASTNAME COMPNAME PHONO EMAIL ADDRESS ALTERPERSON ALTERPHONE ALTEREMAIL 现在迁移后我们看到了

  

错误代码:1364。字段'字段'没有默认值

如果我们运行INSERT QUERY LIKE

  

mysqli_query($ con,'插入表格   (NAME,LASTNAME,COMPNAME,PHONO,EMAIL,ADDRESS)值   (NAME,LASTNAME,COMPNAME,PHONO,电子邮件,地址)&#39)

现在它会给出错误......

所以转过桌子吧 从DB.TABLE获取所有列值 把它放在一个数组中,或者像使用while循环或循环一样逐个进行....

检查每列的插入值 put条件如果insert值等于ZERO或NULL,则插入ZERO它将解决所有问题。

为什么ZERO -

因为它适用于VARCHAR,TEXT,INT,BIGINT以及许多数据类型,除了时间或日期函数和DATE / TIME数据类型默认获得ZERO值...

===============================另一种选择......

运行PHP代码 获取所有TABLE NAME 然后为每个TABLE NAME 得到所有列名称

并在循环

下的函数中运行此命令
  

ALTER TABLE DB.TABLEnAME CHANGE columnNAME_A columnNAME_A   VARCHAR(100)CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL   DEFAULT NULL;

=======================

其完成

答案 1 :(得分:0)

对于其他有此问题的人,将需要一些编码才能自动执行,但是下面是您的处理方式:

首先运行以下查询:

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且不是主键且未设置默认值的列的默认值。