• 已删除用户
Administrator
发布于 2023-12-02 / 31 阅读 / 0 评论 / 0 点赞

halo博客部署时提示mysql连接异常

Caused by: io.r2dbc.spi.R2dbcBadGrammarException: Specified key was too long; max key length is 767 bytes
at io.asyncer.r2dbc.mysql.message.server.ErrorMessage.toException(ErrorMessage.java:128) ~[r2dbc-mysql-1.0.5.jar:1.0.5]
at io.asyncer.r2dbc.mysql.message.server.ErrorMessage.toException(ErrorMessage.java:73) ~[r2dbc-mysql-1.0.5.jar:1.0.5]
at io.asyncer.r2dbc.mysql.MySqlResult$MySqlMessage.exception(MySqlResult.java:178) ~[r2dbc-mysql-1.0.5.jar:1.0.5]
at io.asyncer.r2dbc.mysql.MySqlResult.lambda$getRowsUpdated$0(MySqlResult.java:71) ~[r2dbc-mysql-1.0.5.jar:1.0.5]
at reactor.core.publisher.FluxHandleFuseable$HandleFuseableSubscriber.onNext(FluxHandleFuseable.java:179) ~[reactor-core-3.6.0.jar:3.6.0]

解决方法:

根据提供的错误信息,看起来是由于键的长度超过了MySQL所支持的最大长度引发了异常。具体来说,错误消息中提到的异常是Specified key was too long; max key length is 767 bytes,意味着您尝试创建的键的长度超过了MySQL所允许的最大长度。

MySQL的默认字符集为UTF-8,其中每个字符占用3个字节的存储空间。因此,当使用UTF-8字符集时,MySQL的索引或键的长度限制为767个字节(即767/3=255个字符),超过这个限制会导致错误。

要解决这个问题,您可以尝试以下几种方法之一:

  1. 减少键的长度:检查您正在创建的索引或键的长度,并尝试减少其长度,以使其符合MySQL的限制。可以考虑缩短列的名称、减少索引的列数或者使用更短的数据类型。

  2. 更改字符集:如果您不需要使用特定的字符集,可以考虑将MySQL的字符集更改为latin1或utf8mb3等只占用1或3个字节的字符集。这样,您将有更大的键长度限制。

  3. 使用前缀索引:如果您确实需要创建一个超过键长度限制的索引,可以考虑使用前缀索引。前缀索引允许您只索引字符串的一部分,从而减少所需的存储空间。