質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

4回答

1426閲覧

webアプリでフォームからの空文字のdb登録について

tt02

総合スコア36

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2020/12/03 02:47

以下の状況で、空文字はDBにどのように登録されていますか。
また、その理由があれば、お知らせいただければ大変参考になります。

phpのWebアプリです。
MySQL利用です。

フォームに入力した値を、DBに登録するシステムがあります。
フォーム内のあるtextareaは、自由入力です。
(入力値のtrim処理:全角スペースを半角変換したあと、trimします。)

ここでふと疑問に思った点ですが、
入力値の処理の結果、それが空文字となった場合、dbには、
①空文字を登録する。
②nullを登録する。

この、ユーザーの入力値が空文字となった場合のdb登録に関して、詳しい方がいらっしゃいましたら
その理由も含めてお知らせいただければ幸いです。
※nullの方が
1:今後、そのテーブルが他のテーブルとリレーションする時、sqlが書きやすく見やすい。
2:コンソールからデータ抽出するときにnullを使う方が一般的。
あるいは、
空文字の方が、こんな時にはメリットがある。

など、それぞれのメリットがわかると確かります。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

自己解決

https://teratail.com/questions/157051

tacsheaven さんの回答が非常に参考になりました。

----以下、引用
【RDB はその概念設計の時点から、NULL を特別な値として扱うことを前提として構築されています。
※true/false の二値論理ではなく true/false/null の三値論理であることとか

ですからデータの構成上 NULL はあってはならないなら排除するのはいいのですが、逆に構成上 NULL があってよいならば、それは正しく NULL を扱うべきだと思います。】
----以上引用終わり

あってはならないないなら、排除。
あって良いなら、正しく使う。
非常にわかりやすい。

従って次にようにしました。
●設計前:
慎重に検討する。

●設計終了後のnot null のfield:
運用上決めた値を入れる。

●設計終了後のnull許容のfield:
null値を使うの一択。 

また、null値を使うメリットにも気がつきました。
・欠けている値を表すことこそがnullの目的。
・欠けている値をnullで表すと言えば、共通認識で開発できる。
・sqlでis null などの演算子が一発で使える。(null もしくは空文字 という煩わしい条件を作らなくてもすむ。)
・phpAdminなど、データベース接続クライアントをつかってデータを見たとき、空文字だと,trimされているのか、疑ってかかる必要がある。(他人の開発を引き継いだとき)あるいは疑われる(他人に開発を引き継いだとき)

今回は設計変更がまだ用意なので、nullを使うこととしました。

投稿2020/12/03 12:29

編集2020/12/03 14:18
tt02

総合スコア36

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

自由入力の欄だけしかない(あとはユーザーIDくらい)データが送られてきた場合は
誤入力の可能性が高いので登録しないという選択肢もあります。
送信側のバリデーションである程度まではじけます

投稿2020/12/03 03:43

yambejp

総合スコア114583

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tt02

2020/12/03 12:27

ご回答、ありがとうございました!
guest

0

nullか空白の違いですが、自分の場合はそのデータを処理したかどうかで使い分けますね。

あるテーブル内の値を代入する必要があるとき、後でその値を入れるとします。そのとき、まずは登録時にはnullを用い、後で値を代入する場合、値の代入が空白でいい場合は空白にします。

つまり
●処理は不要。あるいは後で処理する必要があるが、今は不要。 → null
●処理した結果、入れる値がない → 空白

このように使い分けています。今回の場合は処理が必須ですが、未処理と処理後の空白を使い分ける必要がありそうなので、textareaでの処理後は空白の方がいいかもしれないですね。

ちなみに、int型は空白を使えないのでnullを使います。

投稿2020/12/03 03:01

FKM

総合スコア3608

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tt02

2020/12/03 12:28

ご回答、ありがとうございました!
guest

0

ケースバイケース。プロジェクトにもよります。
なので下記回答もあくまで「そういうやり方もある」程度の認識でお願いします。

基本はユーザー入力をそのまま受け付けます。空できたなら空。
nullとなるケースはセレクトボックスなどの選択肢のものではないでしょうか。
DB設計時に決まってるはずのことですね。

投稿2020/12/03 02:55

m.ts10806

総合スコア80765

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tt02

2020/12/03 12:28

ご回答、ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問