我在使用java从数据库检索blob时遇到了问题,我得到的结果是一个正方形

我在使用java从数据库检索blob时遇到了问题,我得到的结果是一个正方形,java,mysql,blob,resultset,Java,Mysql,Blob,Resultset,这是我使用的代码: package blobdatabase; import java.nio.charset.Charset; import java.sql.*; /** * * @author Edson Lagamayo */ public class Main { public static void main(String[] args) { String returnValue = ""; t

这是我使用的代码:

package blobdatabase;  

import java.nio.charset.Charset; 
import java.sql.*;  

/**  
 *  
 * @author Edson Lagamayo  
 */  
public class Main {  

    public static void main(String[] args) {  
        String returnValue = "";  
        try {  

              Connection con = null;  

            System.out.println("character set : " + Charset.defaultCharset());  

            Class.forName("com.mysql.jdbc.Driver").newInstance();  

            con = DriverManager.getConnection("jdbc:mysql://192.168.90.52/productiondb?useUnicode=true&characterEncoding=utf-8", "root", "root");  

            Statement st;  
            st = con.createStatement();  

            ResultSet resultSet = st.executeQuery("SELECT   imgfilename,field7,field8,field9,field10,field11,field12,field13,field14,field15,field16,field17,field18,field19,field20,field21,field22,field23,remarks1,remarks2,remarks3,remarks4,remarks5,remarks6,remarks7,remarks8,remarks9,remarks10,remarks11,remarks12   FROM (SELECT MAX(stampid) stampid,orderid,projid,jobid,taskcode FROM tstasks t WHERE t.jobid=187 AND taskcode=1 GROUP BY t.orderid)t LEFT JOIN orderdetail od ON od.seqid=t.stampid AND od.orderid=t.orderid RIGHT JOIN imageinfo ii ON ii.orderid=od.orderid AND ii.projid=t.projid WHERE t.jobid=187;");  
            while (resultSet.next()) {  
                Blob blob = resultSet.getBlob("remarks7");  
                returnValue = blob != null ? new String(blob.getBytes(1, (int) blob.length())) : "";  
                System.out.println("returnValue : " + returnValue);  
            }  

          } catch (Exception ex) {  
            ex.printStackTrace();
        }  
    }  
}  
我得到的结果是:

returnValue : ��4546345435435sdfaf4324324  
returnValue : �  
returnValue : sdafghbgjbgjnbhgnjbggbvrfsdfsdcvewr54trtgdfg���fdsjdgfdgdgfdfgdgsdafghbgjbgjnbhgnjbggbvrfsdfsdcvewr54trtgdfg���f  
�� 有时是一个平方,其值为 有人能帮我吗?请帮我解决我的问题
:)

…只告诉驾驶员盲目地假设它是UTF-8。它不设置连接的字符编码。您应该在mysql配置中将默认字符集设置为UTF-8,或者在连接后立即运行以下查询:

SET names utf8

如果我们知道你的问题,我们可以这样做。例如,您希望输出是什么样子的?为什么要用
startpos=1
调用
blob.getBytes(1,(int)blob.length())
??请尝试0,看看这是否解决了您的问题。通常,如果要存储/检索字符数据,人们会使用CLOB,而不是BLOB。此外:是什么?字符只是表示用于打印文本的字体不支持字符的二进制值。如果在具有的位置具有unicode字符?您可能希望将文本写入一个文件,您可以使用支持要查看的字符(用于测试)的编辑器打开该文件。@ZeissS:不完全是:
将指示输出控制台无法表示的字符、空方块(或包含一些十六进制数字的方块)通常表示当前字体不支持的字形和
表示
字节
值在用于解码它们的编码中无效。“带TILDE的小写字母N”这是我想要输出的字母。我已经为我的程序粘贴了全部代码,但我不知道该怎么做..:当我想从数据库中获取值时,我只得到结果??或者像上面的输出一样的正方形^:)@Tsuna Sawada在运行
SET names utf8
之后会发生这种情况吗?您在
System.out
中使用的是什么类型的控制台?(如果是终端窗口,则终端本身可能不支持UTF-8)。@v控制台能够打印该字母。。。因为我尝试了System.out.println(“ñ”);并且它在控制台中打印出ñ。而且我也不知道如何在java中执行“SET names utf8”。。在连接之前我如何执行它?@Tsuna Sawada我没有在写“之后”之前执行它。这是一个SQL查询。您可以使用
executeQuery()
或以多种其他方式运行它。@vbence。。我搜索了一些代码,然后我找到了这个,但我不知道这是什么意思。。Blob Blob=resultSet.getBlob(“remark1”);字符串文本=blob!=无效的新字符串(blob.getBytes(1,(int)blob.length(),“UTF-8”):“”;System.out.println(“text1:+text”);但我还是得到了错误的数据。。
SET names utf8