> For the complete documentation index, see [llms.txt](https://mariadb.com/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://mariadb.com/docs/server/reference/data-types/string-data-types/blob.md).

# BLOB

## Syntax

```bnf
BLOB[(M)]
```

## Description

{% hint style="info" %}
If you are handling large binary data that exceeds the `max_allowed_packet` limit, you can stream the data in chunks using specialized API functions like `mysql_stmt_send_long_data()` or `setBinaryStream()`. See [Handling Large Data via APIs](/docs/server/reference/data-types/string-data-types/blob-and-text-data-types.md#handling-large-data-via-apis) for more details.
{% endhint %}

A `BLOB` column with a maximum length of 65,535 (2¹⁶ - 1) bytes. Each `BLOB` value is stored using a two-byte length prefix that indicates the number of bytes in the value.

An optional length `M` can be given for this type. If this is done, MariaDB creates the column as the smallest `BLOB` type large enough to hold values *`M`* bytes long.

`BLOB` values can also be used to store [dynamic columns](/docs/server/reference/sql-structure/nosql/dynamic-columns.md).

`BLOB` and `TEXT` columns can both be assigned a [DEFAULT](/docs/server/server-usage/tables/create-table.md#default) value.

### Indexing

On a column that uses the `BLOB` data type, setting a unique index is now possible.

#### Note

In previous releases, setting a unique index on a column that uses the `BLOB` data type was not possible. Index would only guarantee the uniqueness of a fixed number of characters.

### Oracle Mode

In [Oracle mode](/docs/release-notes/community-server/about/compatibility-and-differences/sql_modeoracle.md), `BLOB` is a synonym for `LONGBLOB`.

## EXAMPLES

### BLOB

Example of `BLOB`:

```sql
CREATE TABLE blob_example (
   description VARCHAR(20),
   example BLOB
) DEFAULT CHARSET=latin1; -- One byte per char makes the examples clearer
```

```sql
INSERT INTO blob_example VALUES
   ('Normal foo', 'foo'),
   ('Trailing spaces foo', 'foo      '),
   ('NULLed', NULL),
   ('Empty', ''),
   ('Maximum', RPAD('', 65535, CHAR(7)));
```

```sql
SELECT description, LENGTH(example) AS length
   FROM blob_example;

+---------------------+--------+
| description         | length |
+---------------------+--------+
| Normal foo          |      3 |
| Trailing spaces foo |      9 |
| NULLed              |   NULL |
| Empty               |      0 |
| Maximum             |  65535 |
+---------------------+--------+
```

## Data Too Long

When `SQL_MODE` is strict (the default) a value is considered "too long" when its length exceeds the size of the data type, and an error is generated.

Example of data too long behavior for `BLOB`:

```sql
TRUNCATE blob_example;

INSERT INTO blob_example VALUES
   ('Overflow', RPAD('', 65536, CHAR(7)));

ERROR 1406 (22001): Data too long for column 'example' at row 1
```

## See Also

* [BLOB and TEXT Data Types](/docs/server/reference/data-types/string-data-types/blob-and-text-data-types.md)
* [Data Type Storage Requirements](/docs/server/reference/data-types/data-type-storage-requirements.md)
* [Oracle mode](/docs/release-notes/community-server/about/compatibility-and-differences/sql_modeoracle.md)

<sub>*This page is licensed: GPLv2, originally from*</sub> [<sub>*fill\_help\_tables.sql*</sub>](https://github.com/MariaDB/server/blob/main/scripts/fill_help_tables.sql)

{% @marketo/form formId="4316" %}
