web-dev-qa-db-ja.com

テキスト列を一意のキーにする

MySQL列をUNIQUE KEYとしてmediumtextサーバーにテーブルを作成したい

CREATE TABLE `parts` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `name` mediumtext NOT NULL,
      `display_status` int(11) NOT NULL,
       UNIQUE KEY `name` (`name`),
       PRIMARY KEY (`id`)
 ) ENGINE=MyISAM DEFAULT CHARSET=utf8;

しかし、これはエラーを作りました

    BLOB/TEXT column 'name' used in key specification without a key length

`name`のタイプをvarcharに変更すると、動作します!

テキスト列をUNIQUE KEYとして作成できるかどうかわかりますか

25
d-doctor

基本的に、Text列をUNIQUEキーとして使用することはできません。実際には、このような大きな列は一意ではなく、さらに重複する可能性があるためです。そのため、hashingメソッドに進み、その出力をUNIQUE制約として使用します。

これがあなたを助けることを願っています

29
Mari

Varcharの長さの255という制限は適用されなくなりました。 ドキュメント から:

VARCHAR列の値は可変長文字列です。長さは、MySQL 5.0.3より前の0〜255、および5.0.3以降のバージョンでは0〜65,535の値として指定できます。

一意のインデックスには既知の最大長(内部実装によるmysqlの要件)が必要であるため、最長予想値に適合するのに十分な大きさの値を持つvarcharを使用します。

...
`name` varchar(65535) NOT NULL, -- for example 
...
24
Bohemian