根据mysql和mariadb,如果使用compress()压缩了输入字符串,uncompress()将返回一个字符串。
在示例中还说明:
SELECT UNCOMPRESS(COMPRESS('a string'));
+----------------------------------+
| UNCOMPRESS(COMPRESS('a string')) |
+----------------------------------+
| a string |
+----------------------------------+
但是在mysql workbench和navicat上,结果只得到一个blob。只使用
SELECT CONVERT(UNCOMPRESS(COMPRESS('a string')) USING utf8);
返回原始字符串。我错在哪里?是医生搞错了还是我误解了?
最佳答案
UNCOMPRESS()
的结果类型至少从mysql 5.1开始就一直是LONG_BLOB
,在此之前它是VARBINARY
。
背景是COMPRESS()
只压缩字符串内容,但不保留字符集或排序规则等元数据。因此对于UNCOMPRESS()
来说,将未压缩的数据作为二进制数据流返回是唯一安全的选项。将返回的二进制数据转换为特定的字符集和排序规则取决于用户,例如,将此信息存储在带外的单独列中,然后将其用作参数以供以后使用。
关于mysql - mariadb 10 uncompress()返回blob而不是string,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26854111/