表单输入中文无法输入显示错误+可以输入后显示乱码

2025/4/17 11:00
问题1
用jsp建一个分享代码的网站,当输入内容为中文时,显示“输入错误”,其他的倒是可以正常输入到数据库
Servlet的代码上传方法:

点击查看代码
public static boolean uploadCode(String author, String title, String code) {
    try (Connection conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD)) {
        String sql = "INSERT INTO code_shares (author, title, code) VALUES (?, ?, ?)";
        try (PreparedStatement pstmt = conn.prepareStatement(sql)) {
            pstmt.setString(1, author);
            pstmt.setString(2, title);
            pstmt.setString(3, code);
            int rows = pstmt.executeUpdate();
            return rows > 0;
        }
    } catch (Exception e) {
        e.printStackTrace();
        return false;
    }
}

哪里有问题?
页面没有中文乱码,所以应该不是页面设置的问题...从这个方法里看出,java代码没什么出错的空间,问题可能出在mysql
难道数据库属性不支持中文?


使用第一行命令查看数据库各个属性类型
第二行,当将value改成中文时报错,说明问题就在这里了
修改数据库字符编码、修改表的字符编码

发现可以成功插入了

问题2:
通过mysql可以正常对表进行操作,但通过表单输入数据操作数据库,又出现了乱码:

mysql数据库和表格的字符编码我都已经设置为utf-8,猜测可能是java与数据库连接过程中出现了某些问题
可能1:表单提交过程
增加后面的accept-charset属性

结果:没变化 可能2:Servlet请求获取参数过程中 在获取参数前,增添 request.setCharacterEncoding("UTF-8"); 欧耶,成功了 ![](https://img2024.cnblogs.com/blog/3559450/202504/3559450-20250418003202697-1410800079.png)

总结:
Jsp通过表单提交数据,servlet通过request获取参数,servlet连接数据库对其进行操作,在这些过程中都需要保持字符编码的正确性,出bug也是在这些传输过程中去找
附:mysql修改字符编码:
MySQL Text字段,轻松应对中文与符号存储挑战 - 云原生实践

posted on 2025-04-18 00:35  VoidHan21  阅读(11)  评论(0)    收藏  举报