Minecraft 1.12.2服务器运行CoreProtect使用MySQL的报错解决小记

在用CoreProtect插件的时候,总会有一些报错弹出来,问了一些人,叫我8要使用MySQL了,不过我还是找到了方案,先感谢一下MCBBS回答贴的支持

运行环境

服务器版本:1.12.2
CoreProtect版本:2.14.2(MCBBS内找的汉化版)
服务端:CatServer-08cb86c-async
MySQL版本:5.7.26

情况复现

用CoreProtect,开启MySQL,填写好必填项目后,启动后会时不时弹出如下错误

com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'user' at row 1
   at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3971)
   at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3909)
   at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2527)
   at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2680)
   at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2484)
   at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1858)
   at com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2079)
   at com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2013)
   at com.mysql.jdbc.PreparedStatement.executeLargeUpdate(PreparedStatement.java:5104)
   at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1998)
   at net.coreprotect.database.Database.insertUser(Database.java:354)
   at net.coreprotect.database.Database.loadUserID(Database.java:403)
   at net.coreprotect.consumer.Process.processConsumer(Process.java:45)
   at net.coreprotect.consumer.Consumer.run(Consumer.java:105)
   at java.lang.Thread.run(Unknown Source)

稍作分析

从上面的说明可以看出如下结论

Data too long for column 'user' at row 1
第1行的“user”列的数据太长

也就是说,user数据太长了,MySQL可能是不能支持的,因此我们应加大user的数据长度

解决方法

使用一些数据库工具,更改"co_user"表里的字段"user"类型,从varchar改为char,并且长度调到128,简单粗暴

这样操作好后,重新加载CoreProtect即可解决报错问题

关于问题的一些话

后来我搜索了一下,有三个人在插件贴下反馈了这个问题,且服务器版本均为1.12.2,这可能是这个版本下CoreProtect的问题,后来作者回复说在2.15.0版本后解决,但我查看了下,2.15.0版本已经是1.13的CoreProtect了,我尝试装在我的服务端上会提示版本不对,无法加载,于是才有的这篇文章


参考地址:
CoreProtect-1.12.2使用MySQL报错问题
https://www.mcbbs.net/thread-991797-1-1.html

发表评论