【问题标题】:Find out if the column supports "Null" values in mysqli找出列是否支持 mysqli 中的“Null”值
【发布时间】:2013-01-04 13:35:26
【问题描述】:

我有一个包含 100 个表的 mysql 数据库。有些列允许空值,有些则不允许。 我在 php mysqli 中动态地将数据插入到表中。我正在使用以下代码插入任何空值:

$value = ($value == "") ? null : $value;

但是,问题是我收到Column 'XXX' cannot be null 错误。如何确定列是否支持 Null 值?

请帮忙。

【问题讨论】:

  • 您想要一个一次性的解决方案,以便您知道哪些列允许为空,还是在每次 INSERT 之前可以使用的代码?
  • 最好是我可以在每次插入之前使用的代码。问题是,我正在将数据导入数据库,并且正在编写 php 脚本来自动化该过程。

标签: php mysql insert mysqli


【解决方案1】:

在您的数据库中,为不为空的字段设置默认值“”(空字符串)。因此,如果您插入 NULL 值,MySQL 会将其替换为默认的 ""。

SHOW COLUMNS FOR `table_name`;

查看名为Null的字段

【讨论】:

    【解决方案2】:

    您可以从information_schema 数据库(IS_NULLABLE 字段)获取此信息-

    SELECT
      TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, IS_NULLABLE
    FROM
      information_schema.COLUMNS
    WHERE
      TABLE_SCHEMA = 'db_name' AND TABLE_NAME = 'table_name'; -- specify your filter
    

    【讨论】:

      【解决方案3】:

      您可以运行以下查询:

      SHOW COLUMNS FROM `table_name_here`
      

      这将为您提供类似于以下输出的内容:

      Field  Type              Null  Key  Default  Extra
      id     int(10) unsigned  NO    PRI  NULL     auto_increment
      name   varchar(200)      YES        NULL
      

      如果您有权访问表information_schema,您可以这样做:

      SELECT IS_NULLABLE
      FROM   COLUMNS
      WHERE  TABLE_NAME   = "table name"
      AND    TABLE_SCHEMA = "db_name"
      AND    COLUMN_NAME  = "column name"
      LIMIT  1
      

      (我已编辑以下查询以从 Doug 接受的答案中添加 TABLE_SCHEMA 列,以防以后有人找到此答案)

      【讨论】:

        【解决方案4】:

        你可以通过数据库information_schema获取你需要的所有关于数据库结构的信息,比如这个(你想要的专栏IS_NULLABLE):

        SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_DEFAULT
        FROM INFORMATION_SCHEMA.COLUMNS
        WHERE table_name = 'tbl_name'
          AND table_schema = 'db_name'
          AND column_name = 'col_name'
        

        参考: http://dev.mysql.com/doc/refman/5.0/en/columns-table.html

        【讨论】:

        • 谢谢伙计。到目前为止,这似乎工作正常。干杯
        【解决方案5】:

        我根本不会盲目地将空字符串转换为 mysql NULL。
        这实际上是 2 个不同的值,每个都有不同的特征 - 因此,交换它们可能会导致不可预知的结果。

        将 PHP 的 NOLL 转换为 Mysql 的 NULL 也是如此。它们也可能有不同的含义。

        【讨论】:

          猜你喜欢
          • 2020-04-01
          • 1970-01-01
          • 1970-01-01
          • 2018-03-15
          • 2023-03-21
          • 2017-07-28
          • 2012-01-04
          • 2014-08-24
          • 2023-03-06
          相关资源
          最近更新 更多