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个字符),超过这个限制会导致错误。
要解决这个问题,您可以尝试以下几种方法之一:
减少键的长度:检查您正在创建的索引或键的长度,并尝试减少其长度,以使其符合MySQL的限制。可以考虑缩短列的名称、减少索引的列数或者使用更短的数据类型。
更改字符集:如果您不需要使用特定的字符集,可以考虑将MySQL的字符集更改为latin1或utf8mb3等只占用1或3个字节的字符集。这样,您将有更大的键长度限制。
使用前缀索引:如果您确实需要创建一个超过键长度限制的索引,可以考虑使用前缀索引。前缀索引允许您只索引字符串的一部分,从而减少所需的存储空间。