Java JDBC与国际拼音字母表(IPA)的问题

Java JDBC与国际拼音字母表(IPA)的问题,java,jdbc,encoding,phonetics,Java,Jdbc,Encoding,Phonetics,我正在使用一个数据库,该数据库有一个表,其中一个字段是用IPA字符编写的,例如一个字段是:/Iː/-/ɪ/ 我正在做一个准备好的语句,结果集是空的,不应该是空的(我检查了查询),当我打印准备好的语句时,字符的编码有问题: com.mysql.cj.jdbc.ClientPreparedStatement: SELECT Id, sound, pair, IPA, writed_word, pair_name FROM minimal_pair WHERE dismised <> 1

我正在使用一个数据库,该数据库有一个表,其中一个字段是用IPA字符编写的,例如一个字段是:/Iː/-/ɪ/

我正在做一个准备好的语句,结果集是空的,不应该是空的(我检查了查询),当我打印准备好的语句时,字符的编码有问题:

com.mysql.cj.jdbc.ClientPreparedStatement: SELECT Id, sound, pair, IPA, writed_word, pair_name FROM minimal_pair WHERE dismised <> 1 AND pair_name = '/i?/ - /?/'
com.mysql.cj.jdbc.ClientPreparedStatement:从dismissed 1和pair_name='/i?/-/?'的最小_对中选择Id、sound、pair、IPA、writed_字、pair_name
pairːname值应为:/iː/-/ɪ/

查询数据库的方法代码为:

public static ArrayList<Word> returnRandomWordsFromPair(String pair_name) {

        ArrayList<Word> pairNameList = new ArrayList<Word>();

        // Connection variables
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;

        // Calling the connection
        conn = Dataconn.conn();

        String sql = "SELECT Id, sound, pair, IPA, writed_word, pair_name FROM minimal_pair WHERE dismised <> 1 AND pair_name = ?";
        System.out.println(sql);
        try {
            pstmt = conn.prepareStatement(sql);
            // The next line are the parameters
            pstmt.setString(1, pair_name);
            System.out.println(pstmt);
            rs = pstmt.executeQuery();
            while (rs.next()) {
                Word word = new Word();
                word.setId(rs.getInt("Id"));
                word.setSound(rs.getString("sound"));
                word.setPair(rs.getString("pair"));
                word.setIpa(rs.getString("IPA"));
                word.setWrited_word(rs.getString("writed_word"));
                word.setPair_name(rs.getString("pair_name"));
                
                pairNameList.add(word);
                System.out.println(word);
            }

            if (rs != null)
                System.out.println("result set is null");
                try {
                    rs.close();
                } catch (SQLException logIgnore) {
                }
            if (pstmt != null)
                System.out.println("prepared statement is null");
                try {
                    rs.close();
                } catch (SQLException logIgnore) {
                }
            if (conn != null)
                System.out.println("connection is null");
                try {
                    rs.close();
                } catch (SQLException logIgnore) {
                }

        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            if (rs != null)
                try {
                    rs.close();
                } catch (SQLException logIgnore) {
                }
            if (pstmt != null)
                try {
                    rs.close();
                } catch (SQLException logIgnore) {
                }
            if (conn != null)
                try {
                    rs.close();
                } catch (SQLException logIgnore) {
                }
        }

        Dataconn.closeConn(conn);

        return pairNameList;
    }
publicstaticarraylistreturnrandomwordsfrompair(字符串对\u名称){
ArrayList pairNameList=新的ArrayList();
//连接变量
连接conn=null;
PreparedStatement pstmt=null;
结果集rs=null;
//呼叫连接
conn=Dataconn.conn();
String sql=“选择Id、sound、pair、IPA、writed_word、pair_name,从dismised 1和pair_name=?”的最小_对中选择;
System.out.println(sql);
试一试{
pstmt=conn.prepareStatement(sql);
//下一行是参数
pstmt.setString(1,对名称);
系统输出打印项次(pstmt);
rs=pstmt.executeQuery();
while(rs.next()){
单词=新词();
word.setId(rs.getInt(“Id”);
word.setSound(rs.getString(“声音”));
word.setPair(rs.getString(“pair”);
word.setIpa(rs.getString(“IPA”);
setWrited_单词(rs.getString(“writed_单词”);
word.setPair_name(rs.getString(“pair_name”);
pairNameList.add(word);
System.out.println(word);
}
如果(rs!=null)
System.out.println(“结果集为空”);
试一试{
rs.close();
}捕获(SQLException登录){
}
如果(pstmt!=null)
System.out.println(“准备好的语句为空”);
试一试{
rs.close();
}捕获(SQLException登录){
}
如果(conn!=null)
System.out.println(“连接为空”);
试一试{
rs.close();
}捕获(SQLException登录){
}
}捕获(SQLE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}最后{
如果(rs!=null)
试一试{
rs.close();
}捕获(SQLException登录){
}
如果(pstmt!=null)
试一试{
rs.close();
}捕获(SQLException登录){
}
如果(conn!=null)
试一试{
rs.close();
}捕获(SQLException登录){
}
}
数据连接。闭合连接(连接);
返回配对者;
}
我从下面的代码中调用它:

public static void main(String[] args) {

        ArrayList<Word> wordList = new ArrayList<Word>();

        wordList = DatabaseMethods.returnRandomWordsFromPair("/iː/ - /ɪ/");

        String name = wordList.getClass().getSimpleName();
        System.out.println(name);

        System.out.println(wordList);
        
        for (Word smallWord : wordList)
          {               
               System.out.println(smallWord.toString());        
          }
    }
publicstaticvoidmain(字符串[]args){
ArrayList wordList=新建ArrayList();
wordList=DatabaseMethods.returnRandomWordsFromPair(“/iː/-/ɪ/”);
字符串名称=wordList.getClass().getSimpleName();
System.out.println(名称);
System.out.println(单词列表);
for(单词smallWord:wordList)
{               
System.out.println(smallWord.toString());
}
}
标准输出结果为:

SELECT Id, sound, pair, IPA, writed_word, pair_name FROM minimal_pair WHERE dismised <> 1 AND pair_name = ?
com.mysql.cj.jdbc.ClientPreparedStatement: SELECT Id, sound, pair, IPA, writed_word, pair_name FROM minimal_pair WHERE dismised <> 1 AND pair_name = '/i?/ - /?/'
result set is null
prepared statement is null
connection is null
Connection closed
ArrayList
[]
从dismissed 1和pair_name=的最小_对中选择Id、sound、pair、IPA、writed_词、pair_名称?
com.mysql.cj.jdbc.ClientPreparedStatement:从dismissed 1和pair_name='/i?/-/?/'的最小_对中选择Id、sound、pair、IPA、writed_字、pair_name
结果集为空
准备好的语句为空
连接为空
连接关闭
ArrayList
[]
我已检查函数中是否正确打印了字符串/Iː/-/ɪ/但在执行准备好的语句时,会显示“/I?/-/?/”

有人知道为什么会发生这种情况,我该如何解决

提前非常感谢

使用Marc的链接,我已经用以下方法解决了问题:

事实上,有很多方法会把事情搞砸 给人印象深刻的如果您使用的是MySQL,请尝试添加 characterEncoding=UTF-8参数到JDBC连接的末尾 网址:

jdbc:mysql://server/database?characterEncoding=UTF-八,

这可能有助于在中看到“问号”