> 백엔드 개발 > PHP 튜토리얼 > 保存图片指纹(一串乱码)到mysql, 求分析

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

WBOY
풀어 주다: 2016-06-23 14:18:29
원래의
949명이 탐색했습니다.

本帖最后由 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.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿