【问题标题】:Set default value to all columns in a database为数据库中的所有列设置默认值
【发布时间】:2017-01-23 01:44:49
【问题描述】:

我正在使用 PHP + MySQL 应用程序。该应用程序对我来说运行良好。但是当我将它托管在另一台服务器上时,我得到了一个 MySQL 错误:

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

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

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

任何帮助将不胜感激

【问题讨论】:

  • 有人否决了这个问题。不知道为什么?
  • 我减轻了这一点,你的问题还不错;)要在不改变模式的情况下在数据库端修复它,你必须改变你的列给它们一个默认值。 How do I alter a mysql table column defaults? 可能会有所帮助。
  • hmm..okay.. 是否可以在单个查询中查询整个数据库?
  • 否,但可以使用大量字符串替换或列编辑模式(使用 UltraEdit 或 Notepad++)操纵 DDL SQL 脚本添加一些 NOT NULL DEFAULT ''。这是我经常用来解决此类问题的策略。

标签: mysql sql


【解决方案1】:

对于遇到此问题的其他人,需要一些编码才能自动执行,但以下是您将如何执行此操作:

首先运行以下查询:

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

【讨论】:

    【解决方案2】:

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

    获取所有列名将其放入数组... 现在将值推送到列数组中以进行插入——对于所有我们没有值的数组,使用零值。 例如: 在一张表中,我们有 COLUMN 姓名 LASTNAME COMPNAME 电话 电子邮件地址 ALTERPERSON ALTERPHONE ALTEREMAIL 现在迁移后我们看到了错误

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

    如果我们运行 INSERT QUERY LIKE

    mysqli_query($con,'插入表 (NAME,LASTNAME,COMPNAME,PHONO,EMAIL,ADDRESS) 值 (姓名、姓氏、公司名、电话号码、电子邮件、地址)')

    现在它会报错...

    所以,只需扭转局面 从 DB.TABLE 中获取所有列值 把它放在一个数组中,或者使用while循环或for循环一个一个地做......

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

    为什么是零——

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

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

    运行 PHP 代码 获取所有表名 然后对于每个表名 获取所有列名

    并在循环下运行此命令

    更改表 DB.TABLEname 更改 columnNAME_A columnNAME_A VARCHAR(100) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL 默认为空;

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

    完成了

    【讨论】:

      猜你喜欢
      • 2016-12-28
      • 2011-05-29
      • 2010-11-15
      • 2019-08-17
      • 1970-01-01
      • 2017-08-06
      • 2021-07-08
      • 2020-09-01
      • 2015-02-20
      相关资源
      最近更新 更多