找出该列是否支持mysqli中的“Null”值

时间:2013-01-21 13:23:18

标签: php mysql insert mysqli

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

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

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

请帮忙。

5 个答案:

答案 0 :(得分:1)

您可以通过数据库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

答案 1 :(得分:0)

在数据库中为IS NOT NOT NULL的字段设置DEFAULT值“”(空字符串)。因此,如果您插入NULL值,MySQL将使用默认值“”替换它。

OR

SHOW COLUMNS FOR `table_name`;

查看名为Null

的字段

答案 2 :(得分:0)

您可以从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 :(得分:0)

您可以运行以下查询:

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 :(得分:0)

我根本不会盲目地将空字符串翻译成mysql NULL 这实际上是两个不同的值,每个都有它的独特功能 - 因此,交换它们可能会导致不可预测的结果。

将PHP的NOLL交易到Mysql'NULL也是如此。它们也可能有不同的含义。