【问题标题】:SQL creating a Database throws 'MySQLSyntaxErrorException: Specified key was too long; max key length is 767 bytes'SQL 创建数据库抛出 'MySQLSyntaxErrorException: Specified key was too long;最大密钥长度为 767 字节
【发布时间】:2020-11-11 17:42:39
【问题描述】:

当我尝试使用以下语句创建数据库时

            c.prepareStatement("CREATE TABLE IF NOT EXISTS `verify` (" +
                    "`id` INT NOT NULL AUTO_INCREMENT UNIQUE," +
                    "`uuid` VARCHAR(255) NOT NULL UNIQUE," +
                    "`ts` INT NOT NULL UNIQUE," +
                    "PRIMARY KEY (`id`)" +
                    ");").execute();

我得到这个错误: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Specified key was too long; max key length is 767 bytes

【问题讨论】:

标签: java mysql sql


【解决方案1】:

您希望 uuidUNIQUE 但对于字符串列:

可以创建仅使用列前导部分的索引 值,使用 col_name(length) 语法指定索引前缀 长度

前缀支持和前缀长度(如果支持)是存储 引擎依赖。例如,前缀最长可达 767 个字节 对于使用 REDUNDANT 或 COMPACT 行格式的 InnoDB 表。这 对于使用 DYNAMIC 或 COMPRESSED 行格式。对于 MyISAM 表,前缀长度 限制为 1000 字节。

因此,您可以创建没有此索引的表,然后设置索引以获取列的子集:

ALTER TABLE `verify` ADD UNIQUE ( uuid(191) );

作为767 / 4 ~= 191

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-19
    • 2018-12-12
    • 2018-06-06
    • 1970-01-01
    • 2016-04-15
    • 2012-05-31
    • 2019-02-21
    • 2015-06-22
    相关资源
    最近更新 更多