我猜 MySQL 不相信这是有效的 UTF8 文本。我尝试在具有相同列定义的测试表上插入(mysql 客户端连接也是 UTF8),虽然它进行了插入,但我使用 MySQL CLI 客户端和 JDBC 检索的数据没有正确检索值。为了确保 UTF8 能正常工作,我为 obama 插入了一个“ö”而不是“o”:
johan@maiden:~$ mysql -vvv test < insert.sql
--------------
insert into utf8_test values(_utf8 "walmart öbama ")
--------------
Query OK, 1 row affected, 1 warning (0.12 sec)
johan@maiden:~$ file insert.sql
insert.sql: UTF-8 Unicode text
用于测试的小型 Java 应用程序:
package test.sql;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class Test
{
public static void main(String[] args)
{
System.out.println("test string=" + "walmart öbama ");
String url = "jdbc:mysql://hostname/test?useUnicode=true&characterEncoding=UTF-8";
try
{
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection c = DriverManager.getConnection(url, "username", "password");
PreparedStatement p = c.prepareStatement("select * from utf8_test");
p.execute();
ResultSet rs = p.getResultSet();
while (!rs.isLast())
{
rs.next();
String retrieved = rs.getString(1);
System.out.println("retrieved=\"" + retrieved + "\"");
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
输出:
johan@appel:~/workspaces/java/javatest/bin$ java test.sql.Test
test string=walmart öbama
retrieved="walmart öbama "
此外,我已经尝试使用 JDBC 连接进行相同的插入,它抛出了与您得到的相同的异常。我相信这是一个 MySQL 错误。也许已经有关于这种情况的错误报告..