31

次のような列をMySQL持つサーバーでテーブルを作成したいmediumtextUNIQUE KEY

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

4

3 に答える 3

35

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

于 2012-12-25T19:36:21.023 に答える
27

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

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

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

...
`name` varchar(65535) NOT NULL, -- for example 
...
于 2012-12-25T19:34:28.240 に答える
0

私はこれが非常に古いことを知っていますが、他の誰かが望む場合は、varcharまたはテキスト列を一意にすることができます。テーブルの作成後にそれを行う必要があります。

 DROP TABLE IF EXISTS meeting;
CREATE TABLE meeting (
    meeting_id int(11) UNSIGNED UNIQUE NOT NULL PRIMARY KEY AUTO_INCREMENT,
    meeting_name varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL
);
CREATE UNIQUE INDEX meeting ON meeting(meeting_name);
于 2021-09-21T19:27:28.047 に答える