6

MySQLの厳密モードが有効になっているサイトで作業しています。ある人がログテーブルに記録された長いユーザーエージェント文字列を持っていましたが、残念ながらユーザーエージェント文字列が列の制限を超えたため、警告が発生しました。データはまったく挿入されませんでした。

このような問題を回避するには、MySQLの厳密モードを無効にする必要がありますか、それとも自分で何かを考え出す必要がありますか(PHPを使用しています)?

4

4 に答える 4

9

データベースに挿入する前にデータを検証します。文字列が大きすぎてテーブルに収まらない場合は、列が狭すぎるか、データが無効です。保存する前に切り捨てるか、何らかのエラー報告を行うか、またはその両方を行うかを決定する必要があります。

DBMS の安全機能を無効にしないでください。これは完全に間違った行為です。

于 2011-04-03T08:28:48.743 に答える
3

データを静かに切り捨てますか (データが破損する可能性があります)、それとも問題があることを少なくとも知りたいですか?

厳密モードを有効のままにし、PHP でデータの境界をチェックすることをお勧めします。PHP アプリケーションは、長すぎる文字列の処理方法を認識しているか、少なくとも認識している必要があります。厳密モードをオフにして、その決定を MySQL に任せると、MySQL は暗黙のうちに文字列を切り捨て、データベースがゴミだらけになってしまいます。

コードの変更と修正は簡単ですが、破損したデータの修正は不可能なことがよくあります。

厳密モードを無効にすると、次のような奇妙な問題が発生します。

VARCHAR(4) 4 文字よりも多くの文字を格納する

于 2011-04-03T08:30:08.667 に答える
1

厳密モードを無効にして試してみて、どのように機能するかを確認してください。無効にして問題が発生したことはありませんが、注意してください。

ただし、長いユーザー エージェントが厳密モードの唯一の問題であり、それらを視覚的に読み取らない場合は、UA をハッシュするか、フィールド長を増やすことをお勧めします。

于 2011-04-03T08:29:37.653 に答える