我有一个100个表的mysql数据库。有些列允许空值,有些则不允许。 我在php mysqli中动态地将数据插入表中。我使用以下代码插入任何空值:
$value = ($value == "") ? null : $value;
但是,问题是我收到Column 'XXX' cannot be null
错误。如何确定列是否支持Null值?
请帮忙。
答案 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也是如此。它们也可能有不同的含义。