0

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

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

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

请帮忙。

4

5 回答 5

1

您可以通过 database 获取有关数据库结构所需的所有信息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

于 2013-01-21T13:44:04.517 回答
0

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

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

于 2013-01-21T16:07:37.323 回答
0

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

或者

SHOW COLUMNS FOR `table_name`;

查看名为的字段Null

于 2013-01-21T13:37:38.830 回答
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
于 2013-01-21T13:41:26.643 回答
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

如果您有权访问 table 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 列,以防以后有人找到此答案)

于 2013-01-21T13:43:00.750 回答