在mysql中遇到blob,我们又想展示这个字段,这个时候应该优先考虑在程序中转换,可以参考我的转换记录:

Java byte[] String 相互转换

C# byte[] string 互相转化

可能有一些特殊情况,我们不得不在SQL语句中完成转换,比如以byte[]做为匹配条件来查询。就像下面这样:

SELECT * FROM mysql.general_log WHERE CAST(argument AS CHAR(10) CHARACTER SET utf8) LIKE 'Insert%'

general_log表中的argument字段类型就是mediumblob的。

简单概括下就是像下面这样使用:

Select CAST(blobfield AS CHAR(100) CHARACTER SET utf8) From Mytable

lebang2020.cn出品

 

SQL 中的转换方式

  • 用 CAST:SELECT CAST(argument AS CHAR(10) CHARACTER SET utf8) FROM ...
  • 用 CONVERT:CONVERT(argument USING utf8)
  • 必须关注字符集,否则中文会乱码。

提示:能拿到 BLOB 原始字节时,优先在程序里按明确编码转换,比在 SQL 中转换更可控;SQL 转换主要用于无法改动程序、或需要以内容为条件的模糊查询场景。

相关阅读

参考资料