2016-07-11 9 views
0

私のMysql 5.7.13データベースのテーブルのvarchar(500)カラムにユニークなインデックスを維持する必要があります。Mysql 5.7.13 innodb unique column varchar(500)

文字セットはUTF8に設定されているので、私が知る限り、innodbエンジンを使用しているので、文字の制限は255です。 私はまた、innodb_large_prefixというオプションが存在することを知っています。これは、ディメンションを3072バイトまで拡張する必要があります。この機能をサポートするようにdbを構成しようとしましたが、機能しません。私は同じ最後の文字が異なる2つの同じ500文字の長い行を挿入しようとしましたが、ユニークなチェックが最初の255文字で実行されるため、一意の制約エラーが発生します。

何か不足していますか?私はこのオプションの目的を誤解しましたか?

P.S innodb_file_format = Barracudaは、mysqlのマニュアルで指摘されています。

ありがとうございました。 Simone

+0

テーブルの行形式は何ですか?それはドキュメントではダイナミックまたは圧縮された行形式のためだと言います。そうかもしれません。 – rlanvin

+0

@rlanvin最初に行のフォーマットを 'ダイナミック'に変更し、次に 'COMPACT'に変更しましたが、結果は同じです。一意制約は最初の255文字で計算されます。 –

答えて

0

私は私の問題を解決しました。

innodbエンジンが正しく設定されていることが判明しました。 問題は、innodb_large_prefixオプションを有効にする前にテーブルを作成し、varchar(500)の一意のインデックスを設定していることです。

varchar(500)フィールドでインデックスを削除して再作成すると、一意制約が期待どおりに機能し始めます。