MySQL中的MediumBlob字段里插入的图片,会比图片的实际大小多几个字节。再读取出来时就会出错。
问题:为什么插入的图片会多几个字节?
问题:为什么插入的图片会多几个字节?
解决方案 »
- JDBC连接MySQL报错Communications link failure due to underlying exception
- MYsql 作HA 求解啊!~~~~~~~~
- jdbc+mysql3.23中文乱码问题
- 这个sql怎么写呀 谢谢
- 启动的时候显示Timeout error occurred trying to start MySQL Daemon.
- 万分火急,请大家帮帮忙
- 如何在mysql中得到某一表a的当前序列号
- 帮忙看看下面的SQL语句怎么转换成连接查询,谢谢!急用,在线等
- mysql数据库设计问题
- mysql中查询也会开启事务吗?
- 如何使用EMS SQL manager 2007 for mysql 查看数据库的操作日志?
- powerdesigner如何定义表的用户定义完整性(check)
-r
AX=0000 BX=0000 CX=0008 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=13C9 ES=13C9 SS=13C9 CS=13C9 IP=0100 NV UP EI PL NZ NA PO NC
13C9:0100 3132 XOR [BP+SI],SI SS:0000=20CD
-d
13C9:0100 31 32 33 34 35 36 37 38-00 00 00 00 00 00 00 00 12345678........
13C9:0110 00 00 00 00 00 00 00 00-00 00 00 00 34 00 B8 13 ............4...
13C9:0120 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
13C9:0130 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
13C9:0140 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
13C9:0150 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
13C9:0160 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
13C9:0170 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
-mysql> desc tx;
+-------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| b1 | mediumblob | YES | | NULL | |
+-------+------------+------+-----+---------+-------+
2 rows in set (0.06 sec)mysql>
mysql> update tx
-> set b1=LOAD_FILE('C:/edit3');
Query OK, 1 row affected (0.05 sec)
Rows matched: 1 Changed: 1 Warnings: 0mysql>
mysql> select hex(b1),length(b1) from tx;
+------------------+------------+
| hex(b1) | length(b1) |
+------------------+------------+
| 3132333435363738 | 8 |
+------------------+------------+
1 row in set (0.00 sec)mysql>
Windowxp C# .netForm mysql-connector-net-6.0.3
2.在和MySQL不同的机器上执行程序,会有多字节现象
多字节文件中被替换为 5C 30 原文件
00000000h: FF D8 FF E0 00 10 4A 46 49 46 00 01 01 00 00 01 ; ??.JFIF......
00000010h: 00 01 00 00 FF DB 00 43 00 0A 07 07 08 07 06 0A ; ....?C........
00000020h: 08 08 08 0B 0A 0A 0B 0E 18 10 0E 0D 0D 0E 1D 15 ; ................
00000030h: 16 11 18 23 1F 25 24 22 1F 22 21 26 2B 37 2F 26 ; ...#.%$"."!&+7/&
00000040h: 29 34 29 21 22 30 41 31 34 39 3B 3E 3E 3E 25 2E ; )4)!"0A149;>>>%.
00000050h: 44 49 43 3C 48 37 3D 3E 3B FF DB 00 43 01 0A 0B ; DIC<H7=>;?C...
00000060h: 0B 0E 0D 0E 1C 10 10 1C 3B 28 22 28 3B 3B 3B 3B ; ........;("(;;;;
00000070h: 3B 3B 3B 3B 3B 3B 3B 3B 3B 3B 3B 3B 3B 3B 3B 3B ; ;;;;;;;;;;;;;;;;
00000080h: 3B 3B 3B 3B 3B 3B 3B 3B 3B 3B 3B 3B 3B 3B 3B 3B ; ;;;;;;;;;;;;;;;;
00000090h: 3B 3B 3B 3B 3B 3B 3B 3B 3B 3B 3B 3B 3B 3B FF C0 ; ;;;;;;;;;;;;;;
00000000h: FF D8 FF E0 5C 30 10 4A 46 49 46 00 01 01 00 00 ; ?郳0.JFIF.....
00000010h: 01 00 01 00 00 FF DB 5C 30 43 00 0A 07 07 08 07 ; .....踈0C......
00000020h: 06 0A 08 08 08 0B 0A 0A 0B 0E 18 10 0E 0D 0D 0E ; ................
00000030h: 1D 15 16 11 18 23 1F 25 24 22 1F 22 21 26 2B 37 ; .....#.%$"."!&+7
00000040h: 2F 26 29 34 29 21 22 30 41 31 34 39 3B 3E 3E 3E ; /&)4)!"0A149;>>>
00000050h: 25 2E 44 49 43 3C 48 37 3D 3E 3B FF DB 5C 30 43 ; %.DIC<H7=>;踈0C
00000060h: 01 0A 0B 0B 0E 0D 0E 1C 10 10 1C 3B 28 22 28 3B ; ...........;("(;
00000070h: 3B 3B 3B 3B 3B 3B 3B 3B 3B 3B 3B 3B 3B 3B 3B 3B ; ;;;;;;;;;;;;;;;;
00000080h: 3B 3B 3B 3B 3B 3B 3B 3B 3B 3B 3B 3B 3B 3B 3B 3B ; ;;;;;;;;;;;;;;;;
00000090h: 3B 3B 3B 3B 3B 3B 3B 3B 3B 3B 3B 3B 3B 3B 3B 3B ; ;;;;;;;;;;;;;;;;
000000a0h: 3B FF C0 5C 30 11 08 00 0C 00 17 03 01 22 00 02 ; ;繺0........"..
show variables like 'char%';
'character_set_connection', 'utf8'
'character_set_database', 'gbk'
'character_set_results', 'utf8'
'character_set_server', 'gbk'
'character_set_system', 'utf8'
'character_sets_dir', 'C:\Program Files\MySQL\MySQL Server 5.0\share\charsets\'
1.show variables like 'char%' 的结果看哪个值?
`imageID` int(10) unsigned NOT NULL auto_increment,
`imageInformation` mediumblob NOT NULL,
PRIMARY KEY (`imageID`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk
'character_set_connection', 'utf8'
) ENGINE=InnoDB DEFAULT CHARSET=gbk 这儿你用的GBK,会产生字符编码的转换。
在连接字符串中设定charset,值为服务器的字符集设定
是这么回事
错误原因:
我将文件转为二进制数组 保存在mysql数据库中,写了 Insert into imageInfoData(name,ImageData) values(@name,@ImageData)语句 ,@ImageData是占位的(预处理参数),使用MySqlDriver
在替换预处理参数时需要将byte[]转换为字符串,用System.Text.Encoding.Default.GetString((byte[])Value)将byte[]转换为字符串时出了问题
编码方式改变了,这个方法我用于不是文件的byte[]就可以,也就是说文件的byte[]转为字符串不能使用该方法.但是MysqlDriver提供的只是一个接口 我重新写一个接口,必须使用它,于是我找到了一个解决方法.
解决方法:
// 将图像8位无符号整数数组转换为它等效的System.string表示形势(使用64数字编码)
string fileBase64String = Convert.ToBase64String(bytes); // 再将System.string的所有字符编码为一个字符系列
byte[] stringBytes = Encoding.UTF8.GetBytes(fileBase64String);
在将stringBytes 传到MysqlDriver的接口中,替换时用到System.Text.Encoding.Default.GetString(byte[])方法转为字符串就不会出现问题了,保存到数据库中,从数据库中去出来是用
string fileBase64String = Encoding.UTF8.GetString(stringBase64Bytes, 0, stringBase64Bytes.Length); // 将指定的System.string(它将二进制数据编码为base64)转换为等效的8位无符号整数数组
byte[] bytes = Convert.FromBase64String(fileBase64String);
这样就得到文件byte[],再将及其转换为文件即可我的的解决方法不知道适用不,我把我的解决方法提供给出现类似问题的同志们作参考,我想可能会有用谢谢各位,希望以后继续请教你们