java - mysql jdbc应用超过用户名最大长度(16个字符)

标签 java mysql jdbc

我有一个主要用java编写的系统。本系统有一个简单的MySQL用户权限管理员。但现在我们开始与更多用户合作,用户名的长度现在超过 16 个字符。我修改了所有 mysql 系统表中的所有用户名长度属性。在 Webmin 和 PhPMyAdmin 中,修改密码和表 <=> 用户关系可以正常工作。但在此 java 程序中,所有与长用户名相关的操作都将停止,并抛出 SQLException,并显示消息: String ' ...long username...' 对于用户名来说太长(应不超过 16)。

看来问题出在 jdbc 上。如何在 SQL 操作中强制应用长用户名? (com.mysql.jdbc(5.1.24))

查询字符串:

st.execute("CREATE USER '"+user+"'@'localhost' IDENTIFIED BY 'nothing';");
st.execute("SET PASSWORD FOR '"+user+"'@'localhost' = PASSWORD('"+passwd+"');");

堆栈跟踪:

java.sql.SQLException: String '...long username...' is too long for user name (should be no longer than 16)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.ja$
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4120)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4052)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2503)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2664)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2809)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2758)
at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:894)
at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:732)

最佳答案

如果不重新编译 MySQL 源代码,则无法更改 MySQL 用户名长度。请参阅 5.1 documentation 中的此注释。这是also the case with MySQL 5.7 .

Warning

The limit on MySQL user name length is hard-coded in the MySQL servers and clients, and trying to circumvent it by modifying the definitions of the tables in the mysql database does not work.

关于java - mysql jdbc应用超过用户名最大长度(16个字符),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19008061/

相关文章:

mysql - 从 MySQL 查询结果创建按年份分组的 json 字符串

java - 字段列表中夹克中的未知列

Java:杀死执行数据库操作的线程

java - 通过 JNI 内部调用 JVM 函数

php - MySQL 选择 where timenow > 数据库时间

PHP foreach 循环记住最后一个循环变量

java - JavaFX 2 小程序能否请求焦点并因此关注浏览器/选项卡?

java - 如何以编程方式在 Android 的 RelativeLayout 中的按钮旁边显示 TextView ?

java - Java的UNIX套接字实现?

java - JDBC 中的 DB.Null 等效项