mysql - 如何仅获取 blob 的子集

标签 mysql substring blob

这里也提出了同样的问题:MySQL blob: how to get just a subset of the stored data 。 但是,提供的解决方案不起作用,SUBSTRINGMID 都无法与 BLOB 数据类型正常工作。我是否错过了以下查询的某些内容:SELECT SUBSTRING(file, 12, 48) FROM log WHERE id=8,子集从位置 1 开始,长度约为 48。 谢谢。

最佳答案

SUBSTRING 函数在 VARBINARYBLOB 上似乎对我来说工作得很好,至少在 MariaDB 5.6.20 中是这样:

MySQL [gps]> show create table KV \G
*************************** 1. row ***************************
       Table: KV
Create Table: CREATE TABLE `KV` (
  `kv_key` varbinary(767) NOT NULL,
  `kv_value` longblob NOT NULL,
  PRIMARY KEY (`kv_key`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin
1 row in set (0.00 sec)

MySQL [gps]> select HEX(kv_key), HEX(kv_value) from KV where kv_key > x'99' limit 10;
+--------------------------------------------------------+------------------------+
| HEX(kv_key)                                            | HEX(kv_value)          |
+--------------------------------------------------------+------------------------+
| FC0696FC1A4AD423B65465FC3D7BBBAFCBDCD8FC657A8BB203FE0F |                        |
| FC114A8CF4C01BD7                                       | 01FE589B5E0200         |
| FC114A8CF4C01BD7FCC991                                 | 55414200               |
| FC114AF271B994BF                                       | 01FE589B5E0200         |
| FC114AF271B994BFFCC991                                 | 434F50442050696C6F7400 |
| FC1A4AD423B65465                                       | 01FE589B5E0200         |
| FC1A4AD423B65465FC2550FCB7D4D490FCA2E4                 |                        |
+--------------------------------------------------------+------------------------+
10 rows in set (0.00 sec)

MySQL [gps]> select HEX(SUBSTRING(kv_key, 4, 4)), HEX(kv_value) from KV where kv_key > x'99' limit 10;
+------------------------------+------------------------+
| HEX(SUBSTRING(kv_key, 4, 4)) | HEX(kv_value)          |
+------------------------------+------------------------+
| FC1A4AD4                     |                        |
| 8CF4C01B                     | 01FE589B5E0200         |
| 8CF4C01B                     | 55414200               |
| F271B994                     | 01FE589B5E0200         |
| F271B994                     | 434F50442050696C6F7400 |
| D423B654                     | 01FE589B5E0200         |
| D423B654                     |                        |
+------------------------------+------------------------+
10 rows in set (0.01 sec)

MySQL [gps]> select HEX(kv_key), HEX(SUBSTRING(kv_value, 4, 4)) from KV where kv_key > x'99' limit 10;
+--------------------------------------------------------+--------------------------------+
| HEX(kv_key)                                            | HEX(SUBSTRING(kv_value, 4, 4)) |
+--------------------------------------------------------+--------------------------------+
| FC0696FC1A4AD423B65465FC3D7BBBAFCBDCD8FC657A8BB203FE0F |                                |
| FC114A8CF4C01BD7                                       | 9B5E0200                       |
| FC114A8CF4C01BD7FCC991                                 | 00                             |
| FC114AF271B994BF                                       | 9B5E0200                       |
| FC114AF271B994BFFCC991                                 | 44205069                       |
| FC1A4AD423B65465                                       | 9B5E0200                       |
| FC1A4AD423B65465FC2550FCB7D4D490FCA2E4                 |                                |
+--------------------------------------------------------+--------------------------------+
10 rows in set (0.00 sec)

关于mysql - 如何仅获取 blob 的子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39026676/

相关文章:

java - 在 Java 中连接到 MySQL 数据库

angular - 使用blob以angular 2下载xlsx文件

javascript - 捕获 html canvas 不作为 dataURL

mysql - 为什么mysql函数now()有时会返回00 :00:00?

php - Vicidial 的 MySQL 过滤器

PHP如何从表中获取所有数据并将其相应地放入div中

regex - perl 可以用正则表达式替换多个子字符串吗?

Linux 命令行查找并添加数字

java - 无法理解如何模拟 String.substring 方法

PHP mySQL 将字符串转换为 png 仅适用于第一张图像