使用 callablestatement 或 jdbctemplate 执行 mysql 插入的字符编码

char encoding doing mysql insert with callablestatement or jdbctemplate

我在执行插入 mysql table 时遇到字符编码问题。我关注的 table 字段具有以下属性:

整理:utf8_general_ci varchar(255)

中外字符出现问题。我尝试使用可调用语句来调用存储过程,但它不起作用,因为条目如下所示:

 ?????

调试发现callablestatement charencoding属性有这个值;

Cp1252

我还没有找到改变它的方法。我尝试将插入的值设置为 NVARCHAR,但这也不起作用。尝试使用 JDBCTemplate 执行插入的建议也没有奏效:

Object[] params = new Object[] { Num, Name, Link,type,siteid,GreetingController.StreamID };
        int[] types = new int[] { Types.NVARCHAR, Types.NVARCHAR, Types.NVARCHAR,Types.INTEGER,Types.NVARCHAR, Types.NVARCHAR };

        recordsAffected= jdbcTemplateObject.update( sql, params, types);

和可调用语句代码:

Connection conn = DriverManager.getConnection(connectionUrl,info); 
        CallableStatement cstmnt = conn.prepareCall("{ call   putNewPage(?,?,?,?,?,?) }");

        cstmnt.setString(1, Num);
        cstmnt.setString(2, Name);
        cstmnt.setString(3, Link);
        cstmnt.setInt(4, type);
        cstmnt.setString(5, siteid);
        cstmnt.setString(6, GreetingController.StreamID);

这令人沮丧。我知道 .NET 在使用 SQL 插入时默认将其设置为 UTF-8 编码。任何帮助表示赞赏,

尝试像这样在连接字符串中包含编码 jdbc:mysql://localhost/some_db?useUnicode=yes&characterEncoding=UTF-8