一尘不染

在Hebrew characters插入MySQL表时获取问号

jsp

我正在使用Netbeans使用Java,JSP构建Web应用程序,该应用程序处理带有希伯来语字段的数据库。

DDL如下:

String cityTable = "CREATE TABLE IF NOT EXISTS hebrew_test.table ("
                            +"id int(11) NOT NULL AUTO_INCREMENT,"
                            +"en varchar(30) NOT NULL,"
                            +"he varchar(30) COLLATE utf8_bin NOT NULL,"
                            +"PRIMARY KEY (id)"
                            +") ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=1;";
String insert = "INSERT INTO hebrew_test.table (en, he) VALUES ('A','a')";
String insert2 = "INSERT INTO hebrew_test.table (en, he) VALUES ('B','ב')";
String insert3 = "INSERT INTO hebrew_test.table (en, he) VALUES ('C','אבג')";


executeSQLCommand(cityTable);
executeSQLCommand(insert);
executeSQLCommand(insert2);
executeSQLCommand(insert3);

我得到的输出表格:

1   A   a
2   B   ?
3   C   ???

代替:

1   A   a
2   B   ב
3   C   אבג

您还定义了要在UTF8_bin上面的代码中看到的表。


阅读 192

收藏
2020-06-08

共1个答案

一尘不染

您需要告诉JDBC驱动程序在将代表SQL查询的字符解码为字节时使用UTF-8编码。您可以通过向JDBC连接URL
添加参数useUnicode=yescharacterEncoding=UTF-8查询参数来实现。

jdbc:mysql://localhost:3306/db_name?useUnicode=yes&characterEncoding=UTF-8

否则,它将使用操作系统平台的默认字符集。MySQL
JDBC驱动程序本身很清楚客户端(运行JDBC代码的地方)和服务器端(数据库表的地方)使用的编码。DB表使用的字符集未涵盖的任何字符都将被问号替换。

2020-06-08