国际音标(IPA)的Java JDBC问题[重复]

Posted

技术标签:

【中文标题】国际音标(IPA)的Java JDBC问题[重复]【英文标题】:Java JDBC problem with International Phonetic Alphabet (IPA) [duplicate] 【发布时间】:2020-12-28 01:18:10 【问题描述】:

我正在使用一个数据库,该数据库有一个表,其中一个字段用 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?/ - /?/'

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;
    

我从这段代码中调用它:

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());        
          
    

标准输出结果为:

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
[]

我已经检查了函数中的字符串 /iː/ - /ɪ/ 是否正确打印,但是在执行准备好的语句时会显示 '/i?/ - /?/'

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

非常感谢您!

【问题讨论】:

这可能有助于***.com/questions/3828818/… 见***.com/questions/38363566/…中的“问号” 【参考方案1】:

使用 Marc 的 Java PreparedStatement UTF-8 character problem 链接我已经解决了这个问题:

这件事搞砸的方式实际上是相当多的 感人的。如果您使用的是 MySQL,请尝试添加 characterEncoding=UTF-8 参数到 JDBC 连接结束 网址:

jdbc:mysql://server/database?characterEncoding=UTF-8

【讨论】:

以上是关于国际音标(IPA)的Java JDBC问题[重复]的主要内容,如果未能解决你的问题,请参考以下文章

带有 Visual Studio (Cordova) 的 IPA 语言

英语音标真的分得清楚?KK IPA DJ

英语音标真的分得清楚?KK IPA DJ

jdbc 类型 4 -java.lang.ClassNotFoundException:com.mysql.jdbc.Driver [重复]

生成用于测试的 ipa 文件时出错 [重复]

sql只选择重复的行