问题困扰了好几天
我将一个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数组?大家帮忙
我将一个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数组?大家帮忙
通过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'
是我插入方法不对,还是字符集有问题?
http://bugs.mysql.com/bug.php?id=26711
是mysql的bug. 我也没有找到解决方案。
http://dev.mysql.com/doc/refman/5.0/en/connector-net-programming-blob.html