问一个问题,一张图片的BASE64码转成二进制,存到sql 中,
是当我从SQL中取出来,再转成BASE64的时候发现结果不一致,这是什么原因?我错在哪里了?
不同的数据库跟数据类型都有可能不一样。对于Sql Server数据库,存放二进制的数据类型是SqlDbType.Binary,但这个类型有长度限制,最长只到8000。所以二进制长度超过8000的话,存放进去可能被截断。
其次,一般数据库dll组件会有提供相应类型的数据获取方法。如果是SqlDbType.Binary的话,建议是用SqlDataReade对应的GetSqlBinary方法获取SqlBinary对象,再调用SqlBinary对象的valuen属性获取byte[]值,减少出现转码问题。
最后,Photo属性赋值的是BASE64字符串,存进数据库里的本般就是BASE64的二进制,从数据库获取后,直接二进制转成字符串就行了,不用调用Convert.ToBase64String。Convert.ToBase64String的作用是转成BASE64字符串。你代码的转换过程如下
源数据->byte[]->调用ToBase64String->转换后的base64字符串;
存到数据库的过程:转换后的base64字符串->byte[]->数据库;
从数据库读取:数据库->byte[]->调用ToBase64String->二次转换后的base64字符串。
最终取出后相当于转了两次base64码,所以从数据库获取后调用Encoding.Default.GetString()方法转成字符串就行了,不需要调用ToBase64String。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。