日度归档:2012 年 10 月 15 日

MySQL 存储二进制数据

MySQL 支持在数据库中存储二进制数据,具体数据类型参考 MySQL 手册。然而,SQL 语句是文本化的,如果要向数据库中存储二进制数据,需要经过特殊的转化。通常的做法是将二进制数据或文件转换为对应的16进制字符串。

使用 insert 的例子:

**mysql**
create table test_table (test_blob tinyblob);

insert into test_table values(unhex(414243444500));

select * from test_table;
+-----------+
| test_blob |
+-----------+
| ABCDE     |
+-----------+
1 row in set (0.00 sec)

使用 load 的例子:

**shell**
echo '48494a4b4c00' > /tmp/test_load.txt

**mysql**
load data infile '/tmp/test_load.txt' into table test_table (test_blob) set test_blob=unhex(test_blob);

select * from test_table;
+-----------+
| test_blob |
+-----------+
| ABCDE     |
| HIPQR     |
+-----------+
2 rows in set (0.00 sec)

通常对于大的二进制文件,比如图片、word 文件等文件,放在数据库中不是一个好的做法,虽然数据库支持这样做。否则会导致数据库容量急剧增大,影响性能。