desc tableA コマンドからの次の出力を含む tableA があります。
+---------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(50) | NO | | | |
| city | varchar(50) | YES | | NULL | |
| state | char(2) | YES | | NULL | |
| country | varchar(30) | YES | | NULL | |
| notes | longtext | YES | | NULL | |
| type | varchar(50) | NO | | NULL | |
+---------+-------------+------+-----+---------+----------------+
現在、NOT NULL 制約を持つ 3 つの列があります。
- ID
- 名前
- タイプ
列 ID と型については、デフォルトの制約を削除する必要があります。基本的には Default: None が欲しいです。回避策を使用したくありません。varchar のデフォルトを '' に設定します。
NULL、NONE、および '' の違いは、この議論からより明確になります。
コマンドを使用してみました:
alter table tableA alter column type drop default;
クエリは正常に実行されますが、影響を受ける行はありません。また、describe コマンドを実行しても、デフォルト値の変更は表示されません。
デフォルト値を '' に設定すると、別の問題が発生します。データベースでは、データベースに空の文字列を入力できます。私にとっては、列の値に NULL を挿入することと同等であり、それを許可したくありません。
空の文字列をデータベースのデータとして許可できないこの状況で、デフォルト値を処理する方法についてのガイダンスが必要です。受信データが空の文字列か NULL かを確認するために、コードに検証を入れることを計画していることに言及したいと思います。しかし、検証が機能しないなどの場合に備えて、DBがそのようなデータの追加を拒否できるようにしたいと考えています。
どんな助けでも本当に感謝しています。