MySQL乱码通常是由于字符集设置不一致导致的。字符集决定了如何存储和显示字符。常见的字符集包括UTF-8、GBK等。
在Java应用中连接MySQL数据库并进行数据插入时,如果字符集设置不一致,可能会导致插入的数据出现乱码。
原因:Java应用与MySQL服务器之间的字符集不一致。
解决方法:
String url = "jdbc:mysql://localhost:3306/mydatabase?useUnicode=true&characterEncoding=UTF-8";
application.properties
或application.yml
中设置:spring.datasource.url=jdbc:mysql://localhost:3306/mydatabase?useUnicode=true&characterEncoding=UTF-8
原因:MySQL服务器内部的字符集设置不正确。
解决方法:
my.cnf
或my.ini
,添加或修改以下配置:[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
原因:数据库或表的字符集设置不正确。
解决方法:
ALTER DATABASE mydatabase CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE mytable CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
以下是一个完整的Java示例,展示如何正确连接MySQL并插入数据:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class MySQLExample {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/mydatabase?useUnicode=true&characterEncoding=UTF-8";
String user = "username";
String password = "password";
try (Connection conn = DriverManager.getConnection(url, user, password)) {
String sql = "INSERT INTO mytable (name, age) VALUES (?, ?)";
try (PreparedStatement pstmt = conn.prepareStatement(sql)) {
pstmt.setString(1, "张三");
pstmt.setInt(2, 25);
pstmt.executeUpdate();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
通过以上方法,可以有效解决MySQL在Java应用中插入数据时出现的乱码问题。
领取专属 10元无门槛券
手把手带您无忧上云