MySQL は、これが有効な UTF8 テキストであるとは信じていないと思います。同じ列定義 (mysql クライアント接続も UTF8 でした) でテスト テーブルに挿入を試みましたが、挿入は行われましたが、MySQL CLI クライアントと JDBC で取得したデータは値を正しく取得しませんでした。UTF8 が正しく機能することを確認するために、「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 のバグだと思います。たぶん、そのような状況に関するバグレポートがすでにあります..