- ベストアンサー
長い文章のデータベース格納について
phpで会員制サイトの制作を勉強しています。 データベースへはPDOで接続しています。 MySQLデータベースを使用しています。 会員制サイトによくある、 各ユーザーの自己紹介文を保存したいのです。 500文字程度の文章になると思うのですが、 そういった長い文字列データはデータベースに保存してよいのでしょうか? 長い文字列はあまりデータベースには保存すべきでないでしょうか? また、データベースに保存すべきでない場合は どのように長い文字列を保存したら良いでしょうか? ご回答、よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>htmlspecialcharsでサニタイジングすれば良いのでしょうか? そうですね 場合によってはhtmlspecialchars()に加えて trim()してあげたり、nl2br()で改行を<br>に変えてあげてもよいかと。
その他の回答 (3)
- yambejp
- ベストアンサー率51% (3827/7415)
テキストというのは非常に軽い情報です。 かなり文量があっても数キロバイトレベルなのでDBに挿入しても負荷は あまり高くなくおおむね問題ありません とくにユーザーIDと紐づくのでDBに挿入すればデータ管理は楽にできます これが例えば画像とかになると、メガ単位になるので、DBに投入しても オーバーヘッドが大きくてあまりお勧めできないです ちなみにDBの機能として「検索」や「集計」がありますが 数キロバイトの文字から特定の文字を含むレコードを抽出するのは 実はDBは得意ではありません。 機能的には「特定のカラム LIKE '%キーワード%'」などで 抽出できますが、特にTEXT型などにしてしまうと高速化につながる インデックスが効かないケースが多いです。 つまりDBで管理しているからと言ってかならずしも効率的な検索ができる というわけではないということを留意する必要があります。 その場合、特殊な処理をかけて全文検索という技法を使う場合もあります
補足
ご回答ありがとうございます! なるほどです。 自己紹介文なのでDBに格納し、抽出するとしても、 検索条件はユーザーIDにし、 自己紹介文内の単語等であいまい検索をする予定はとりあえずないので、 今回の場合だと、自己紹介文を格納するカラムはTEXT型でも良いのではないかなぁ?とも思います。 また、自己紹介文をデータベースに格納する際はPDOのプレースホルダーを使用するので良いとして、抽出するときは一般的にデータを抽出する際に使用するhtmlspecialcharsでサニタイジングすれば良いのでしょうか? ご返信頂けると有難いです。
- t_ohta
- ベストアンサー率38% (5241/13712)
DBに保存でいいと思いますよ。
- sanzero
- ベストアンサー率56% (58/102)
保存していいですよ。 text型で保存すればいいと思います。
お礼
ご回答ありがとうございます! text型で保存します。
お礼
お返事頂きありがとうございます! なるほど、trim()とnl2br()ですか・・・ 自己紹介文の表示となると確かに知識が必要ですね! 諸々、非常に詳しくご回答頂き、ありがとうございました!