`
从此醉
  • 浏览: 1112172 次
  • 性别: Icon_minigender_1
  • 来自: US
社区版块
存档分类
最新评论

MySQL:Specified key was too long; max key length is 767 bytes

 
阅读更多

下面的SQL语句

CREATE TABLE subscription (
subscriptionid varchar(767) NOT NULL PRIMARY KEY,
params blob,
dest varchar(1023),
sched blob,
trigg varchar(1023),
initialrecordingtime timestamp,
exportifempty boolean,
queryname varchar(1023),
lastexecuted timestamp
);


即便是改为

CREATE TABLE subscription (
subscriptionid varchar(767) NOT NULL PRIMARY KEY,
params blob,
dest varchar(767),
sched blob,
trigg varchar(767),
initialrecordingtime timestamp,
exportifempty boolean,
queryname varchar(767),
lastexecuted timestamp
);

依然是这个错误!!

将mysql数据库脚本中的unique index字段从原来的varchar(256)改成varchar(1024),再次执行报错:

ERROR 1071 (42000) at line 482 in file: 'db/sm1.sql': Specified key was too long; max key length is 767 bytes

以前写过一篇文章,也是关于这个问题的

MySQL报错:Specified key was too long

www.acmerblog.com

在该文中,我经过试验,发现如果将varchar类型的unique index/key设置成最大383,就不会出现问题了。

其实这个问题还有一个解,那就是指定索引的长度:

对于CHAR和VARCHAR列,只用一列的一部分就可创建索引。创建索引时,使用col_name(length)语法,对前缀编制索引。前缀包括每列值的前length个字符。BLOB和TEXT列也可以编制索引,但是必须给出前缀长度。

那么在不改变字段长度的情况下,通过指定索引长度为一个较小的值,就可以避免出现这个问题了。

 UNIQUE INDEX (content(32)),

又如,

此处展示的语句用于创建一个索引,索引使用列名称的前10个字符。

CREATE INDEX part_of_name ON customer (name(10));
因为多数名称的前10个字符通常不同,所以此索引不会比使用列的全名创建的索引速度慢很多。


分享到:
评论

相关推荐

    MySQL错误“Specified key was too long; max key length is 1000 bytes”的解决办法

    max key length is 1000 bytes”。这个错误意味着你试图创建的索引键(key)超过了MySQL允许的最大长度。MySQL对每个表的每个索引都有一个最大长度限制,通常是1000字节。这个限制包括了所有被索引字段的长度。 在...

    mysql建库时提示Specified key was too long max key length is 1000 bytes的问题的解决方法

    ### MySQL建库时提示“Specified key was too long; max key length is 1000 bytes”的问题解析及解决方法 #### 问题背景 在使用MySQL进行数据库表结构设计时,可能会遇到“Specified key was too long; max key ...

    用sql命令修改数据表中的一个字段为非空(not null)的语句

    ALTER TABLE table1 ALTER COLUMN ... 您可能感兴趣的文章:sql server建库、建表、建约束技巧mysql建库时提示Specified key was too long max key length is 1000 bytes的问题的解决方法Mysql 建库建表技巧分享SQL S

    nacos-server-1.2.0.zip

    max key length is 767 bytes 解决方案1: 直接缩短到255长度 解决方案2: 修改数据库配置, set innodb_large_prefix=on 吐槽一下, 1.2.0版本比1.1.4版本多创建一个数据表, 为甚么前面的sql有引擎,有...

    Bugfree3.0.4安装部署说明书

    - 如果在安装过程中遇到“Specified key was too long: max key length is 767 bytes”的错误,需要修改`\Apache2.2\htdocs\bugfree\install\schema.php`文件中的相关字段长度。 通过以上步骤,你应该能够成功地在...

    Joomla网站中数据导入导出问题

    - **错误原因**:在导入前,可能会遇到“Specified key was too long; max key length is 1000 bytes”的错误。这是由于MySQL的限制导致的。 - **解决方法**: 1. 打开导出的SQL文件,查找并定位到以下两行: ``` ...

    laravel执行php artisan migrate报错的解决方法

    max key length is 767 bytes ``` 这个错误通常发生在创建或修改具有较大数据长度的索引时,尤其是在使用了InnoDB引擎的情况下。InnoDB存储引擎对索引的长度有限制,最大值为767字节。这个限制取决于MySQL的配置,...

    在EF中使用MySQL的方法及常见问题

    由于MySQL对字符串类型的默认映射可能导致键长度超出限制,所以在定义`UserName`和`PassWord`时,需要使用`StringLength`和`MaxLength`数据注解来限制其长度,避免出现“Specified key was too long; max key length...

    解决在laravel中auth建立时候遇到的问题

    max key length is 767 bytes。这个错误通常发生在为字段创建索引时,特别是当MySQL版本低于5.7.7或MariaDB版本低于10.2.2时。因为Laravel默认使用utf8mb4编码,它支持的表情字符会消耗更多的字节,从而可能超过...

    php.ini-development

    On production servers, 4096 bytes is a good setting for performance ; reasons. ; Note: Output buffering can also be controlled via Output Buffering Control ; functions. ; Possible Values: ; On = ...

Global site tag (gtag.js) - Google Analytics