通过PHP将Android中以base64编码的图像存储到MySQL

4
我一直在尝试通过将图片编码为base64字符串并将其传递给一个PHP脚本来存储在MySQL数据库中。该脚本将这个字符串存储在blob字段(我也尝试过text)。发生的情况是该字符串被如实地发送到PHP脚本,但在存储到数据库中时,它变成了完全不同的字符串。
以下是我的操作步骤:
    Bitmap image = BitmapFactory.decodeFile("/sdcard/photo2.jpg");

    ByteArrayOutputStream stream = new ByteArrayOutputStream();
    image.compress(Bitmap.CompressFormat.PNG, 100, stream);

    byte[] byteImage = stream.toByteArray();

    String s = Base64.encodeToString(byteImage, Base64.NO_WRAP | Base64.URL_SAFE);

然后将字符串“s”传递给php脚本(我已经检查过了,传递正确),然后脚本将其插入到数据库中。
此链接http://diffchecker.com/kKD4w16C包含了原始编码字符串(屏幕左侧)和存储在数据库中的字符串(屏幕右侧)。
有什么想法是为什么这样发生以及如何防止它?
提前致谢。

嘿..你有没有注意到,你刚刚截取了约20%的字符串?看起来你的数据库字段有限制,比如varchar(255),而你试图存储长度为1500的字符串。 - StasGrin
@StasGrin:我也是,你的字符串没有区别,我认为你数据库中的编码类型不同,使用UTF8。 - Houcine
@Houcine 抱歉,我修改了原始评论 :) - StasGrin
请点击此处查看:http://tinyurl.com/c2e7hru。我只是复制了您的数据库字段值的末尾,并在“原始”值中找到了它。 - StasGrin
谢谢大家,我把字段改成了longblob并将编码改为utf-8,现在可以正常工作了。 - askso
1个回答

2
您没有注意到,您刚刚截取了约20%的字符串吗?似乎您的数据库字段有限制。类似于varchar(255),而您尝试存储长度为1500的字符串。 http://tinyurl.com/c2e7hru - 请看这里。我只复制了您的DB字段值的末尾,并在“原始”值中找到它。
另外,请检查您的编码。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接