我在PHP + MySQL应用程序中工作。该应用程序对我来说工作正常。但是当我在另一台服务器上托管它时,我收到了一个MySQL错误:
错误代码:1364。字段“字段”没有默认值
我知道这是MySQL版本的问题,我们应该为所有列设置默认值。但目前我有100多张桌子。所以我需要为所有没有默认值的表中的所有列设置默认值NULL
。
我无法使用strict mode
选项,因为服务器是共享服务器。是否可以在一个步骤中设置而不是为每个表设置?如果不可能,请告诉我最简单的设置方法。
非常感谢任何帮助
答案 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它将解决所有问题。
因为它适用于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且不是主键且未设置默认值的列的默认值。