一张图片的BASE64码转成二进制,存到sql 中,从sql中读出来再转成base64前后不一致-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

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

吴孟桥 2016-06-14 17:15:08 3730

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

SQL
分享到
取消 提交回答
全部回答(1)
  • 吴孟桥
    2019-07-17 19:38:16

    不同的数据库跟数据类型都有可能不一样。对于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。

    0 0
数据库
使用钉钉扫一扫加入圈子
+ 订阅

分享数据库前沿,解构实战干货,推动数据库技术变革

推荐文章
相似问题