1

我将 phpadmin 数据库中的图像上传到 blob 类型的列图像中。因此我想选择图像的二进制代码,所以我这样做

SELECT CONVERT( `image` 
USING binary ) AS image
FROM `license` 
WHERE `l_name` = 'lamen'
LIMIT 0 , 30

结果与我正在寻找的结果相似,但我认为我没有得到纯二进制,因为它返回了这个。

�PNG\r\n\Z\n\0\0\0\rIHDR\0\0\0h\0\0\0f\b\0\0\0�tC�\0\0\0sRGB\0� ��\0\0\0gAMA\0\0�� UT+M�TQ�K�+�k(�\r�\0\0\0\0IEND�B`�</p>

就是一堆乱七八糟的。我删除了很多行,因为它只是这个类似的代码。

然而。如果我说 SELECT CONVERT(图像 USING binary) as image from许可证wherel_name='lamen'

它返回图像并在其下 [BLOB-413 字节]

如果我点击它,我会得到

SELECT * FROM许可证 WHERE CONVERT(图像 USING utf8 ) = CAST( 0x89504e470d0a1a0a0000000d4948445200000068000000660802000000a8744386000000017352474200aece1ce90000000467414d410000b18f0bfc6105000000097048597300000ec300000ec301c76fa8640000013249444154785eedd7310ec2401443c15c823b736ce8e956cf2b218d441b1796e7273cefe7e577d0c073f08c47be0d28ee109ce21477f7585b9cc559dc5fbcb551451555540f15284e7177cf87c5599cc5fd34e03bee9085e21477f79e589cc5599cefb843058a53dcddf36171166771fe725577c007f0e13d519ce2ee1e628bb3388bab5e7cd31c545145754aac0a471555542b4dd31c545145754aac0a471555542b4dd31c545145754aac0a471555542b4dd31c545145754aac0a471555542b4dd31c545145754aac0a471555542b4dd31c545145754aac0a471555542b4dd31c545145754aac0a471555542b4dd31c545145754aac0a471555542b4dd31c545145754aac0a471555542b4dd31c545145754aac0a471555542b4dd31c545145754aac0a471555542b4dd31c5451bd4bf5032b956b28b9120d8b0000000049454e44ae426082 AS BINARY ) ;

我怀疑这是我想要的……但是……即使我说,我也无法让我的选择语句返回该代码 select CONVERT(image USING utf8 )

谢谢你的帮助

PS.我知道将图像上传到文件并保存路径更容易。并且已经知道如何做到这一点。然而,我正在尝试一些东西并想使用这种方式。再次感谢。

4

1 回答 1

0

假设您将图像作为字符串,您根本不需要实际转换它,或者担心字符集。看起来你把它复杂化了。

使用其中一种 BLOB 类型作为字段类型(BLOB / MEDIUMBLOB 等),并确保在插入数据库时​​转义字符串。这些字段类型不依赖于字符集,而是“BINARY”类型。

如果您使用旧的 mysql_() 函数,请使用 mysql_real_escape_string() 转义该值,但如果您使用 PDO 或 mysqli_() 则用户准备好的语句,因为这会为您转义(又好又容易)。

当你选择时,也不需要做任何事情——它应该可以工作。

于 2012-10-10T03:00:34.023 回答