繁体   English   中英

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

[英]Set default value to all columns in a database

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

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

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

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

任何帮助将不胜感激

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

获取所有列名称将其放入数组中...现在按列数组中的值进行插入 - 对于我们没有值的所有数组,使用ZERO值。 例如:在一个表中,我们有列名称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,EMAIL,ADDRESS)')

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

因此,只需将表格中的所有列值从DB.TABLE中获取,将其放入数组中,或者使用while循环或for循环逐个进行....

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

为什么零 -

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

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

运行一个PHP代码获取所有TABLE NAME然后为每个TABLE NAME获取所有COLUMN NAME

并在循环中的函数中运行此命令

ALTER TABLE DB.TABLEnAME CHANGE columnNAME_A columnNAME_A VARCHAR(100)CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT 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且不是主键且没有设置默认值的列。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM