今天在使用mysql时,又遇到了ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes问题,特记录。
该问题是由键值字段长度过长导致。mysql支持数据库表单一键值的最大长度不能超过767字节,超出这个长度即报错。一般情况下,不会有键值字段的长度会超出该长度。但是需要注意的是,随着全球化进程的加快,数据库表采用UTF-8格式的趋势是越来越明显,这导致varchar类型字段的长度成倍增长,一不小心就容易出现以上问题。
假设存在以下表定义:
create table test ( name varchar(256) not null primary key, age int unsigned not null ) engine = InnoDB;
当使用UTF-8格式建立该表时,就会出现如标题所示问题。关键原因是UTF-8使用变长编码,最多可能使用4个字节表示表示1个符号。所以对于上述表中的name字段,其实际长度超出767字节,达到了768字节,问题出现。如果把长度改为191(191*4=764<767)则没有问题,或者不使用utf-8格式也没有问题。
当然,根据如下比例
latin1 = 1 byte = 1 character uft8 = 4 byte = 1 character gbk = 2 byte = 1 character
可以推算并难证gbk、latin1字符集的最大key长度。
相关推荐
今天在为数据库中的某两个字段设置unique索引的时候,出现了Specified key was too long; max key length is 1000 bytes错误
本文将详细提供mysql建库时提示Specified key was too long max key length is 1000 bytes的问题的解决方法,有需求的朋友可以参考
今天在执行laravel migrate时出现异常,找了好半天才找到问题所在,所以这篇文章主要给大家介绍了关于Laravel 5.4中migrate报错: Specified key was too long error的解决方法,需要的朋友可以参考下。
调整参数后引起,ORA-00838: Specified value of MEMORY_TARGET is too small, needs to be at least 3 2768M 的解决方案
nacos-server-1.1.4 windows下的运行程序 springcloud alibaba
13.1. 数据定义语句 13.1.1. ALTER DATABASE语法 13.1.2. ALTER TABLE语法 13.1.3. CREATE DATABASE语法 13.1.4. CREATE INDEX语法 13.1.5. CREATE TABLE语法 13.1.6. DROP DATABASE语法 ...
Illuminate\Database\QueryException : SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes (SQL: alter table `users` add unique `users_email_...
ALTER TABLE table1 ALTER COLUMN ... 您可能感兴趣的文章:sql server建库、建表、建约束技巧mysql建库时提示Specified key was too long max key length is 1000 bytes的问题的解决方法Mysql 建库建表技巧分享SQL S
loadlibrary failed with error 126:找不到指定模块
max key length is 767 bytes 解决方案1: 直接缩短到255长度 解决方案2: 修改数据库配置, set innodb_large_prefix=on 吐槽一下, 1.2.0版本比1.1.4版本多创建一个数据表, 为甚么前面的sql有引擎,有...
Error: got unexpected status: BAD_REQUEST -- error authorizing update: error validating ReadSet: readset expected key [Group] /Channel/Application at version 0, but got version 1 等问题的解决
修改源码后的jar包 解决:The signing key's size is 1024 bits which is not secure enough for the RS256 algorithm.
TC_QDisc 模拟网络丢包、延时、重复、损坏TC_QDisc 模拟网络丢包、延时、重复、损坏TC_QDisc 模拟网络丢包、延时、重复、损坏
IllegalStateException: The specified child already has a parent.我的博客中有文章讲解
本文介绍Oralce数据库中,...00972. 00000 – “identifier is too long” *Cause: An identifier with more than 30 characters was specified. *Action: Specify at most 30 characters. 从这个错误提示可以看出
解决Mysql Error-The user specified as a definer (‘mysql.infoschema’@’localhost’) does not exist
从零开始搭建一个基于Webpack的Vue开发环境