Java JDBC连接到MySQL,由于项目编码UTF-16而失败

Java JDBC连接到MySQL,由于项目编码UTF-16而失败,java,mysql,jdbc,Java,Mysql,Jdbc,我试图创建一个后台服务,所以我创建了一个普通的java项目。以下是我尝试连接到数据库的代码: Class.forName("com.mysql.jdbc.Driver"); Connection con = DriverManager.getConnection( "jdbc:mysql://127.0.0.1:3306/test_db", "root", "root"); Statement stmt = con.createStatem

我试图创建一个后台服务,所以我创建了一个普通的java项目。以下是我尝试连接到数据库的代码:

    Class.forName("com.mysql.jdbc.Driver");
    Connection con = DriverManager.getConnection(
                "jdbc:mysql://127.0.0.1:3306/test_db", "root", "root");
    Statement stmt = con.createStatement();
但每次我运行此代码时,它都失败了:

java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:127)
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:95)
    at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
    at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:862)
    at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:444)
    at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:230)
    at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:226)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
========================================================================== 答:好的,这个问题已经解决了。因为所有这些人都来把这个标记为重复的,这阻止了我回答自己的问题。如果有人像我一样犯了这个愚蠢的错误,我会把答案放在这里:

  • 默认情况下,我的项目编码设置为UTF-16。我忘了像往常一样把它改成UTF-8

  • 当我将密码存储在我的项目中的某个地方(java文件、属性文件)时,这个密码也存储在UTF-16中,因此它实际上与我在工具上看到的不同

  • 当应用程序读取密码并将其发送到mysql时,由于密码不正确,authen失败


=>更新项目和文件,将编码设置为UTF-8以解决我的问题。

你尝试并搜索了吗?@ScaryWombat:正如我在帖子中提到的,如果我在其他项目(maven)中运行相同的代码,它会工作。只有普通java不工作。这与许可无关。几个月前,当我在另一个项目中工作时,我已经为这个数据库用户授予了权限,而那个项目仍然运行良好。在将此标记为重复之前,请阅读文章。@karmakaze不确定您的命令是否正确,但它失败为“错误1049(42000):未知数据库“3306”。我更改了端口号和数据库名称的位置,它工作了,登录成功,运行了一个select查询,它为我返回了结果。我建议你回到
com.mysql.jdbc.Driver
,即
mysql-connector-java-5.1.8-bin.jar
@ScaryWombat:我已经用6.0.5和8.0.11进行了测试。更改为5.1.8,无任何更改。仍然在处理我的另一个maven项目,但在我的纯java项目上失败了
java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3536)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3468)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:917)
    at com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:3974)
    at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1282)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2142)
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:773)
    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:46)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:352)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:282)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
+---------+-----------+
| user    | host      |
+---------+-----------+
| newuser | localhost |
| root    | localhost |
+---------+-----------+
2 rows in set (0.00 sec)