我有一个包含 100 个表的 mysql 数据库。有些列允许空值,有些则不允许。我在 php mysqli 中动态地将数据插入到表中。我正在使用以下代码插入任何空值:
$value = ($value == "") ? null : $value;
但是,这个问题是我得到了Column 'XXX' cannot be null
错误。如何确定该列是否支持 Null 值?
请帮忙。
您可以通过 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
我根本不会盲目地将空字符串转换为 mysql NULL。
这实际上是 2 个不同的值,每个都有其不同的特征 - 因此,交换它们可能会导致不可预测的结果。
将 PHP 的 NOLL 转换为 Mysql 的 NULL 也是如此。它们也可能有不同的含义。
在您的数据库中,为不为空的字段设置默认值“”(空字符串)。因此,如果您插入 NULL 值,MySQL 会将其替换为默认的“”。
或者
SHOW COLUMNS FOR `table_name`;
查看名为的字段Null
您可以从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
您可以运行以下查询:
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 列,以防以后有人找到此答案)