开发者社区> 问答> 正文

一张图片的BASE64码转成二进制,存到sql 中,从sql中读出来再转成base64前后不一致

问一个问题,一张图片的BASE64码转成二进制,存到sql 中,
screenshot
screenshot
是当我从SQL中取出来,再转成BASE64的时候发现结果不一致,这是什么原因?我错在哪里了?

展开
收起
吴孟桥 2016-06-14 17:15:08 7537 0
1 条回答
写回答
取消 提交回答
  • 不同的数据库跟数据类型都有可能不一样。对于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。

    2019-07-17 19:38:16
    赞同 展开评论 打赏
问答分类:
SQL
问答地址:
问答排行榜
最热
最新

相关电子书

更多
SQL Server在电子商务中的应用与实践 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载