2016-09-15 51 views
1

我正在使用PHP + MySQL应用程序。该应用程序为我工作得很好。但是,当我主持它的另一台服务器,我有一个MySQL错误:将缺省值设置为数据库中的所有列

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

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

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

任何帮助,将不胜感激

+0

有人低估了这个问题。不知道为什么? –

+0

我减轻了这一点,你的问题并没有那么糟糕;)要修改它在数据库端而不改变模式,你必须改变你的列以给它们一个默认值。 [我如何修改mysql表列的默认值?](http:// stackoverflow。com/questions/1770203/how-do-i-alter-a-mysql-table-column-defaults)可能会有所帮助。 –

+0

hmm..okay ..是否有可能在整个数据库的单个查询中? –

回答

0

,我发现另一种解决方案是这样的: -

获取所有列的名称把它在阵列... 现在将值列阵列插入 - 与所有这些数组的ZERO值都没有值。 例如: 在一个表中,我们有COLUMN 名姓氏COMPNAME PHONO电子邮件地址ALTERPERSON ALTERPHONE ALTEREMAIL 现在迁移后,我们看到了eeror

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

如果我们运行一个INSERT查询LIKE

mysqli_query($con,'insert into table (NAME,LASTNAME,COMPNAME,PHONO,EMAIL,ADDRESS) values (NAME,LASTNAME,COMPNAME,PHONO,EMAIL,ADDRESS)')

现在它会给出错误...

所以只需打开表 从DB获取所有列值。TABLE 把它放在一个数组中,或使用while循环或for循环一个接一个地执行...

检查每列的插入值 如果插入值等于零或NULL,则插入零,然后插入零解决所有问题。

为什么ZERO -

,因为它会为VARCHAR,TEXT,INT,BIGINT和除了时间或日期功能和日期/时间数据类型许多数据类型的工作在默认情况下得到了零个值...

===============================另一个选项...

运行一个PHP代码 get all TABLE名称 然后对于每个TABLE名称 获取所有COLUMN名称

和在功能上运行此命令下循环

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

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

并对其做

相关问题