1

次の MyISAM テーブルがあります

mysql> show create table product_desc\G
*************************** 1. row ***************************
       Table: product_desc
Create Table: CREATE TABLE `product_desc` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `product_id` int(10) unsigned DEFAULT '0',
  `title` varchar(100) DEFAULT NULL,
  `description` varchar(5000) DEFAULT NULL,
  PRIMARY KEY (`id`),
  FULLTEXT KEY `title` (`title`,`description`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

ただし、次のコマンドでテーブルを変更(インデックスを追加)したい場合、エラーが発生しました。

mysql> ALTER TABLE product_desc ADD INDEX `description` (`description`);
ERROR 1071 (42000): Specified key was too long; max key length is 1000 bytes

奇妙なことに、これは Mac OSX でのみ発生し、私の ubuntu サーバーでは発生しません。したがって、サーバーの結果テーブルを確認すると、次のようになります。

mysql> show indexes from product_desc;
+------------------------+------------+-------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table        | Non_unique | Key_name    | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+------------------------+------------+-------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| product_desc |          0 | PRIMARY     |            1 | id          | A         |           5 |     NULL | NULL   |      | BTREE      |         |               |
| product_desc |          1 | description |            1 | description | A         |           5 |      333 | NULL   | YES  | BTREE      |         |               |
| product_desc |          1 | title       |            1 | title       | NULL      |           1 |     NULL | NULL   | YES  | FULLTEXT   |         |               |
| product_desc |          1 | title       |            2 | description | NULL      |           1 |     NULL | NULL   | YES  | FULLTEXT   |         |               |
+------------------------+------------+-------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
6 rows in set (0.00 sec)

興味深いのは、descriptionインデックスが自動的に 333 プレフィックス長を取得することです。同じ結果を得るために MacOS my.cnf に設定する必要がある構成変数はありますか?

4

1 に答える 1

0

列のサイズが大きすぎてインデックスを作成できません。

プレフィックスの長さは最大 1000 バイト (InnoDB テーブルの場合は 767 バイト) です。

これはMySqlの制限であり、OS固有ではありません(ただし、ストレージエンジン固有です)

MacOS でテーブルの詳細を表示できますか。

MySQL リファレンス

于 2013-10-02T22:24:11.793 に答える