idea中mysql8执行sql建表语句报错

mysql8.0以上使用以下语句创建用户和设置用户权限:

create user 'test'@'%' identified by 'test'   //创建用户

grant all privileges on . to test@'%' with grant option;   //设置用户权限

报错信息

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'database' at line 1

错误原因:语法有问题。

报错信息

ERROR 2005 (HY000): Unknown MySQL server host 'engzi' (0)

错误原因:如语法少参数mysql -uchengzi -p

错误信息:

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

MySQL的InnoDB存储引擎的表存在一系列的限制条件,其中比较常见的一种是表的字段索引长度限制,该限制与参数innodb_large_prefix相关。

原因分析:

导致上面报错的原因是由于InnoDB表的索引长度限制,在MySQL5.6版本后引入了参数innodb_large_prefix可以解决这个问题。该参数控制是否允许单列的索引长度超过767字节,有ON和OFF两个取值:

  1. :Innodb表的行记录格式是Dynamic或Compressed的前提下,单列索引长度上限扩展到3072个字节。
  2. :Innodb表的单例索引长度最多为767个字节,索引长度超出后,主键索引会创建失败,辅助索引会被截断成为前缀索引。

mysql的的搜索引擎是innodb;

innodb_large_prefix
    ON :Innodb表的行记录格式(row format)是Dynamic或Compressed的前提下,单列索引长度上限扩展到3072个字节 (5.7默认)
    OFF:Innodb表的单例索引长度最多为767个字节,索引长度超出后,主键索引会创建失败,辅助索引会被截断成为前缀索引(5.6默认的)
    系统变量innodb_large_prefix开启了,则对于使用DYNAMIC或COMPRESSED行格式的InnoDB表,索引键前缀限制为3072字节。如果禁用innodb_large_prefix,不管是什么表,索引键前缀限制为767字节。

innodb_file_format Antelope(compact、redundant)、barracuda(compressed、dynamic)
     Antelope: 先前未命名的,原始的InnoDB文件格式。它支持两种行格式:COMPACT 和 REDUNDANT。MySQL5.6的默认文件格式。可以与早期的版本保持最大的兼容性。不支持 Barracuda 文件格式。
     Barracuda: 新的文件格式。它支持InnoDB的所有行格式,包括新的行格式:COMPRESSED 和 DYNAMIC。与这两个新的行格式相关的功能包括:InnoDB表的压缩,长列数据的页外存储和索引建前缀最大长度为3072字节。

        具体参考:解决MySQL报 index column size too large. the maximum column size is 767 bytes 问题_默默无闻的搬砖人的博客-优快云博客

查看MySql数据库当前的配置:

show variables like 'innodb_large_prefix'; 
show variables like 'innodb_file_format';

修改配置:

set global innodb_large_prefix=ON;//开启不限制索引长度 
set global innodb_file_format=BARRACUDA;//这个不知道

报错信息

Index column size too large. The maximum column size is 767 bytes.

如果表已存在,只需修改

ALTER TABLE `TableName ` row_format=dynamic;

建表未成功的解决办法:在建表sql表尾加入

ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COMMENT='字典数据' row_format=dynamic

后执行成功。

        如果是云服务器,需要登录到网页管理,然后手动设置参数

参考文章:

https://www.cnblogs.com/sunzebo/articles/9603223.html

如何解决SQLRDSMySQL创建索引时提示Specifiedkeywastoolong;maxkeylengthis767bytes_云数据库 RDS-阿里云帮助中心

MySQL 经典案例分析:Specified key was too long-腾讯云开发者社区-腾讯云

mysql Index column size too large错误解决方案_Pansanday的博客-优快云博客

mysql索引长度超过767bytes问题解决。Specified key was too long; max key length is 767 bytes_mysql 索引过大_一杯浊酒laugh风尘的博客-优快云博客

BUG:索引字段超长-Specified key was too long; max key length is 767 bytes_冰月落的博客-优快云博客

[Err] 1071 - Specified key was too long; max key length is 767 bytes,【各版本mysql均已解决】_[err] 1071 - specified key was too long; max key l_至尊宝♬的博客-优快云博客

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值