问题困扰了好几天
我将一个byte数组存入blob内,byte数组大小为2000个字节
我任意赋一些值,
byte[] sb = new byte[2000];
sb[0] = 1;
sb[1] = 103;
sb[3] = 206;
然后存入 string myInsertWords = "INSERT INTO tjwx$dcdl$curve VALUE (@OrderNo,@CurTime,@Direct,@QXInform,@QXValue)";
                MySqlCommand myCommand = new MySqlCommand();
                myCommand.Connection = mscon;
                myCommand.CommandText = myInsertWords;
                myCommand.Prepare();
                ......
                myCommand.Parameters.AddWithValue("@QXValue", sb);
                myCommand.ExecuteNonQuery();
然后取出
MySqlDataAdapter da = new MySqlDataAdapter(SELECTString.ToString(), myConnectionString);
            DataSet dss = new DataSet();
            try
            {
                int ret = da.Fill(dss, "曲线数据表");
                if (ret > 0)
                {
                    DataTable dt = dss.Tables["曲线数据表"];
                    if (dt != null)
                    {
                        List<CurveData> lcd = new List<CurveData>();
                        foreach (DataRow dr in dt.Rows)
                        {
                            CurveData cd = new CurveData();
                            cd.data = (byte[])dr["QXValue"];
                            .....
                         }
                      }
                      ......
发现,data字节数要大于2000,经研究,发现不知道是存入还是取出的时候,数据库将某一个值0作为“\0“插入了数据库,所以一个0变成了2个字节92,48,而且并不是所有0都会有这样的转换。
问题来了,我不明白mysql里的blob是如何操作的,为什么将数组存入后,会进行转换。我知道mysql的blob是二进制字符型的,或许和我的表字符集和链接字符集相关,不过我也都已经设置为=gbk。
mysql该如何存取byte数组?大家帮忙

解决方案 »

  1.   

    你用select hex(QXValue) from <表> 可以看到16进制的表示,是不是你想要的。
      

  2.   

    public void OnClick1()   08.     {   09.          SqlConnection con = new SqlConnection("Server=Darkover;uid=sa;pwd=Password1;database=northwind");   10.          SqlDataAdapter da = new SqlDataAdapter("Select * From MyImages", con);   11.          SqlCommandBuilder MyCB = new SqlCommandBuilder(da);   12.          DataSet ds = new DataSet("MyImages");   13.          da.MissingSchemaAction = MissingSchemaAction.AddWithKey;   14.          FileStream fs = new FileStream(@"C:\winnt\Gone Fishing.BMP", FileMode.OpenOrCreate, FileAccess.Read);   15.          byte[] MyData = new byte[fs.Length];   16.          fs.Read(MyData, 0, System.Convert.ToInt32(fs.Length));   17.          fs.Close();   18.          da.Fill(ds, "MyImages");   19.          DataRow myRow;   20.          myRow = ds.Tables["MyImages"].NewRow();   21.          myRow["Description"] = "This would be description text";   22.          myRow["imgField"] = MyData;   23.          ds.Tables["MyImages"].Rows.Add(myRow);   24.          da.Update(ds, "MyImages");   25.          con.Close();   26.     }   27.//7. 双击 Button2,然后将以
      

  3.   

    用这个方法看了下
    通过myCommand.Parameters.AddWithValue("@QXValue", sb);
    sb的值为00,00,00,00,0F,00,24,00,2D,00,BB,00,EF,00..
    mysql数据库里的值为 00,00,00,00,0F,00,24,00,2D,00,BB,5C,30,EF,5C,30,...
    0x5c,0x30查了下ascii表,即为'\''0'
    是我插入方法不对,还是字符集有问题?
      

  4.   

    我也遇到了这个问题。
    http://bugs.mysql.com/bug.php?id=26711
    是mysql的bug. 我也没有找到解决方案。
      

  5.   

    可以先看看这里的帮助:
    http://dev.mysql.com/doc/refman/5.0/en/connector-net-programming-blob.html