图像存入MySQL数据库longBLOB出错

在自己编写的一个程序中需要将照片存入MySQL数据库中,我用的字段类型为LongBlob,在将图片数据转换为byte[]类型后写入MySQL数据库时出错。但我用相同长度的空byte[]存入却没问题。部分代码如下:
===数据库说明===
1. 数据库字符集设置为 gbk。
2. 表结构如下:
CREATE TABLE `photo` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` VarChar(10) COMMENT '姓名',
`photoData` longblob COMMENT '照片',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk COMMENT='职工库';
3. 照片尺寸为宽84像素,高112像素,大小为不到3K。
4. MySQL 数据库版本号为: mysql-essential-5.1.52-win32,数据库连接用的是:mysql-connector-net-6.3.5

====部分代码====
byte[] myphoto = null;
MemoryStream ms = new MemoryStream();
pictureBox1.Image.Save(ms, ImageFormat.Jpeg);
myphoto = new Byte[ms.Length];
ms.Position = 0;
ms.Read(myphoto, 0, (Int32)ms.Length);

string sqlStr = "insert into photo (name,photo) values ('XXX',myphoto)";
MySQLCommand cmd = new MySqlCommand(sqlStr, conn);
conn.Open();
cmd.ExecuteNonQuery();//运行到此处出错
cmd.Dispose();
conn.Close();

出错信息为:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘System.Byte[])' at line 1

====修改后代码能运行====
byte[] myphoto = null;
MemoryStream ms = new MemoryStream();
pictureBox1.Image.Save(ms, ImageFormat.Jpeg);
myphoto = new Byte[ms.Length];
//ms.Position = 0;
//ms.Read(myphoto, 0, (Int32)ms.Length);

string sqlStr = "insert into photo (name,photo) values ('XXX',myphoto)";
MySQLCommand cmd = new MySqlCommand(sqlStr, conn);
conn.Open();
cmd.ExecuteNonQuery();
cmd.Dispose();
conn.Close();

也就是将数据类型为 byte[] 的 myphoto 在不填充图片数据时能向 MySQL 中写入相同长度的空字节数组时程序运行正常,只是放入MySQL数据库LongBlob字段的数据全部为 0000 0000.......。
我没试用其他数据填充在字节数组中是否能写入数据库中。

请高手指点迷津,谢谢!
确定数据已写入myphoto数组中。
最新回答
一花一树开

2025-06-27 07:23:06

问题解决了,是字符集的问题。我将数据库及用到的表、字段字符集全部设置为 utf8 后,向数据库中存入图像、word、excel 等非纯文本格式的文件全部通过,并且也没遇到汉字乱码的问题。
远方小镇

2025-06-27 09:54:11

应该是ms.Read(myphoto, 0, (Int32)ms.Length);
方法出了问题,也就是没有真正把数据存入myphoto byte数组