0

私は数百のテーブルのmysqlデータベースを持っています。null値を許可する列もあれば、許可しない列もあります。phpmysqliでデータをテーブルに動的に挿入しています。次のコードを使用して、null値を挿入しています。

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

しかし、これに伴う問題は、Column 'XXX' cannot be nullエラーが発生することです。列がNull値をサポートしているかどうかを確認するにはどうすればよいですか?

助けてください。

4

5 に答える 5

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

于 2013-01-21T13:44:04.517 に答える
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

テーブル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 に答える
0

データベースで、IS NOTNULLのフィールドにデフォルト値""(空の文字列)を設定します。したがって、NULL値を挿入すると、MySQLはそれをデフォルトの""に置き換えます。

また

SHOW COLUMNS FOR `table_name`;

名前の付いたフィールドを見てくださいNull

于 2013-01-21T13:37:38.830 に答える
0

空の文字列を盲目的にmysqlNULLに変換することはまったくありません。
これは実際には2つの異なる値であり、それぞれに異なる機能があります。したがって、それらを交換すると、予期しない結果が生じる可能性があります。

同じことが、PHPのNOLLをMysqlのNULLに交換する場合にも当てはまります。それらも異なる意味を持つかもしれません。

于 2013-01-21T16:07:37.323 に答える