2

同じユーザーが1日に2回以上同じ質問をすることができないように、メンバー、日付、質問ごとにMySQLに制約を追加しようとしています。

alter table questions add UNIQUE INDEX three_UNIQUE ( member_id , question , date );

しかし、質問フィールドは長いテキストであるため、次のエラーが発生します。

ERROR 1071 (42000): Specified key was too long; max key length is 1000 bytes

これを回避する方法はありますか?

ありがとう!!

4

3 に答える 3

3

質問をハッシュして、ハッシュ値をフィールドとして保存できます。ハッシュ値ははるかに小さくなるので、それに制約を追加することができます。おそらく、2つの固有の質問が同じ値にハッシュされることはありません。

注:質問にわずかな違いしかない場合と同じ問題が発生します。

于 2012-04-14T04:05:03.290 に答える
2

通常、ユーザーが入力した長いテキストフィールドに一意のキー制約を指定することはあまり意味がありません。ユーザーは、スペースを追加するか、その他の小さな変更を加えるだけで、同じ質問を複数回行うことができます。

偶発的な再投稿を防ぐことが目的の場合は、GUIDまたは同様の一意の識別子を持つ非表示フィールドを使用してください。

于 2012-04-14T04:04:53.623 に答える
1

ハッシュ(md5など)の新しい列を追加します。質問があったら、ハッシュ列にもデータを入力します。次に、質問フィールドの代わりにそれをインデックスで使用します。

于 2012-04-14T04:06:29.623 に答える