0

phpMyAdminで次のことを行うにはどうすればよいですか(UNIQUE(タイトル、説明)の実行方法のみに関心があります)。

CREATE TABLE `myData` (
    id serial primary key,
    title varchar(255) not null,
    description varchar(255) not null,
    UNIQUE (title, description)
);

ちなみに、SOについて別の質問を開かないように、長い文字列に使用できる他のタイプを知りたいのですが。225文字は私たちの目的には小さすぎるからです。MySQL 5.0.3の時点で、varcharは最大65,535文字を受け入れることができることを私は知っていますが。しかし、これらのフィールドをMEDIUMTEXTとして指定できますか(互換性のために、クライアントはそれらをそのようにしたいと考えています)?これを行うと、「BLOB/TEXT列...キーの長さのないキー指定で使用されます」というエラーが発生します。それならどうすればいいですか?説明が異なっていても同様のタイトルを保存できるように、これら2つのフィールドを一意にする必要がありますが、受信データのタイトルと説明に一致するタイトルと説明がある場合は、この受信データを保存しないようにします。 。

4

4 に答える 4

1

キーのデフォルトの最大長は、 1000bytes forMyISAMおよび3072bytes for ですInnoDB(キーの各列がバイトを超えてはならないという追加の要件があり767ます)。

テーブルがシングルバイトエンコーディングである場合、InnoDBまたはMyISAMそれを使用している場合、問題なく制約を作成できます。

そうでない場合は、プレフィックス付きインデックスを作成できますが、インデックスはプレフィックス内での一意性のみを維持することに注意してください。

ただし、タイトルと説明をハッシュ化し、そのハッシュを一意の列に保存する方がはるかに優れています。

于 2010-03-04T13:05:10.713 に答える
0
CREATE TABLE `myData` (
`id` INT( 12 ) NOT NULL ,
`title` TEXT NOT NULL ,
`description` TEXT NOT NULL ,
PRIMARY KEY ( `id` ) ,
UNIQUE (
`title` (255) ,
`description` (255)
)
);

MySQL は、タイトルと説明からの完全な情報を保存しますが、これらのフィールドの最初の 255 文字のみをインデックス化します。つまり、255 文字の同じタイトルを 2 つ入力してから、別のタイトルを入力すると、重複エラーが発生します。

于 2010-03-04T13:17:48.877 に答える
0

テーブルが既に作成されている場合は、PhpMyAdmin でテーブルの構造に移動し、左側のチェックボックスで 2 つの列 (タイトル、説明) を選択します。次に、テーブルの説明の下にあるコントロールの行にあるUアイコンをクリックします。これにより、選択した 2 つのフィールドに一意のインデックスが追加されます。

インデックスの長さと代替ハッシュの使用に関する Quassnoi のコメントは的を射ています。また、UTF-8 テキスト列はインデックスで 1 文字あたり 3 バイトを必要とするため、UTF-8 テキスト列のインデックス作成にはかなりのコストがかかることに注意してください。

于 2010-03-04T14:28:35.710 に答える
0

PhpMyAdmin を使用して UNIQUE を作成するには (これがあなたの質問であるといいのですが ;))、次の手順を実行します。

テーブルに移動して「構造」を選択し、2 行にわたってインデックスを追加し (左下)、2 つのフィールドと「indextyp: unique」を選択して完了です。

編集: スクリーンショットを追加しました。ドイツ語ですが、同じように見えるはずです。あなたの質問とあなたがしたすべてのコメントがまったく理解できなかったとしても、それがうまくいくことを本当に願っています。

http://dl.dropbox.com/u/3615626/stackoverflow/phpmyadmin-step1.png

http://dl.dropbox.com/u/3615626/stackoverflow/phpmyadmin-step2.png

「一意」は特別なタイプのインデックスにすぎないため、「インデックス」の下にファイルされます。

于 2010-03-04T13:07:06.467 に答える