mysql存储指纹_保存图片指纹(一串乱码)到mysql, 求分析

博主在尝试将图片指纹(一串乱码)存储到MySQL时遇到问题,直接执行PHP SQL报错。讨论中建议使用Base64编码或者将`bitmap`字段设为二进制类型。最终成功保存并理解了二进制字段在存储特殊字节时的必要性。
摘要由CSDN通过智能技术生成

本帖最后由 JJ___JJ 于 2013-08-08 15:10:59 编辑

MySQL 乱码 各位大大, 图片指纹如下:

sql为:

update test set `bitmap` ='?+W&+N{|\0Ox0\\$8)sld\"Z|y|\0ZZ!\0]P!Zw\Z\Zgm|p\"y^W|)Q,\0xc{\0\Z\\[#]pEXcto[ER`\'l{b&8P8j[w1y^t|d0YSMK![sj\0Kyww7)PE\ZIPv^m|\0\0\0{\0PK^\0y|x-e^|jcxc|`N' where id = 168;

bitmap字段为varchar 255

很奇怪的一件事, 直接php运行sql, 会报错:

$query = "update test set `bitmap` ='".mysql_real_escape_string($bitmap)."' where id = {$picture['id']};";1366: Incorrect string value: '\xDD[+W&+...' for column 'bitmap' at row 1

直接copy这段sql去mysql客户端执行, 是没问题的. 目前认为是copy的时候, 这段指纹乱码没有能copy完整, 或者已经变了,

如果不加mysql_real_escape_string, 而是将指纹乱码保存到文本, 是无法copy出来 只能粘贴处部分.

求大大们帮忙分析, 非常感谢.

回复讨论(解决方案)

大大给点意见啊

保存 base64 编码,可免去一切烦恼

直接保存,则bitmap字段必须为二进制的

但并不保证一定能存储成功

保存 base64 编码,可免去一切烦恼

直接保存,则bitmap字段必须为二进制的

但并不保证一定能存储成功

好的, 谢谢, 我试试.

保存 base64 编码,可免去一切烦恼

直接保存,则bitmap字段必须为二进制的

但并不保证一定能存储成功

感谢版主大大提醒, 已经成功保存到数据库. 取出来也没有问题.

不过bitmap字段为什么必须为二进制的, 我现在保存为char类型, 有问题么, 我看了下结果长度固定, 而且二进制类型向来少用, 所以选择了char类型.

理论上说,数据库是放进去什么,取出来还是什么

但数据库具体实现时为了解决搜索的问题,都做了一些个性化调整

比如 mysql 的字符类型字段 char、varchar、txt 都不区分大小写,都有一个连接校对。这样便于文字的处理

但是二进制内容并不需要数据库干涉,干涉了反而要出问题

字节型可以记录例如 [del] [null] 之类的字节,但字符串就没法记录了,所以要原样保留就要用字节

或者通过可逆编码(base64)把上述不可视字节转为可视字符才能保存,提取是反向解码就是了

理论上说,数据库是放进去什么,取出来还是什么

但数据库具体实现时为了解决搜索的问题,都做了一些个性化调整

比如 mysql 的字符类型字段 char、varchar、txt 都不区分大小写,都有一个连接校对。这样便于文字的处理

但是二进制内容并不需要数据库干涉,干涉了反而要出问题

非常感谢.

字节型可以记录例如 [del] [null] 之类的字节,但字符串就没法记录了,所以要原样保留就要用字节

或者通过可逆编码(base64)把上述不可视字节转为可视字符才能保存,提取是反向解码就是了

谢谢提醒, 已经这样做了.

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值