https://blog.csdn.net/q3dxdx/article/details/51014357

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/q3dxdx/article/details/51014357

BLOB,二进制大对象(字节流)。可以用来存储图片,声音和视频等二进制文件。没有字符集的说法。

TEXT,文本大对象(字符流)。可以用来存储大量的字符串,可以理解为超大的char或者varchar类型。由于是存储字符,所以有字符集的说法。

并且blob和text类型是无法设置默认值的。并且必要时要增大max_allowed_packet的值以适应该数据类型。

根据mysql的个性,blob和text又细分为:(存储限制来自网上摘录)

tinyblob,tinytext,最大存储限制255字节;

blob,text,最大存储限制65k(是真的吗?);

mediumblob,mediumtext,最大存储限制16M;

longblob,longtext,最大存储限制4G。

下面根据实验并以blob为例,来演示存储限制:

C:\Users\Administrator>mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 5.7.11-log MySQL Community Server (GPL)

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> use test1
Database changed
mysql> show tables;
+-----------------+
| Tables_in_test1 |
+-----------------+
| t1              |
+-----------------+
1 row in set (0.00 sec)

mysql> drop table t1;
Query OK, 0 rows affected (0.28 sec)

mysql> CREATE TABLE t1 (
    ->   id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    ->   tiny_blob TINYBLOB,
    ->   b_blob BLOB,
    ->   medium_blob MEDIUMBLOB,
    ->   long_blob LONGBLOB
    -> );
Query OK, 0 rows affected (0.36 sec)

mysql> desc t1;
+-------------+------------+------+-----+---------+----------------+
| Field       | Type       | Null | Key | Default | Extra          |
+-------------+------------+------+-----+---------+----------------+
| id          | int(11)    | NO   | PRI | NULL    | auto_increment |
| tiny_blob   | tinyblob   | YES  |     | NULL    |                |
| b_blob      | blob       | YES  |     | NULL    |                |
| medium_blob | mediumblob | YES  |     | NULL    |                |
| long_blob   | longblob   | YES  |     | NULL    |                |
+-------------+------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)

mysql> insert into t1(id) select 1;
Query OK, 1 row affected (0.09 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> select * from t1;
+----+-----------+--------+-------------+-----------+
| id | tiny_blob | b_blob | medium_blob | long_blob |
+----+-----------+--------+-------------+-----------+
|  1 | NULL      | NULL   | NULL        | NULL      |
+----+-----------+--------+-------------+-----------+
1 row in set (0.00 sec)

mysql>

#先建一个表t1,各种blob类型均有。

然后查看参数max_allowed_packet的大小:

mysql> select @@global.max_allowed_packet;
+-----------------------------+
| @@global.max_allowed_packet |
+-----------------------------+
|                     8388608 |
+-----------------------------+
1 row in set (0.00 sec)

mysql> select 8388608/1024;
+--------------+
| 8388608/1024 |
+--------------+
|    8192.0000 |
+--------------+
1 row in set (0.00 sec)

mysql> select 8388608/1024/1024;
+-------------------+
| 8388608/1024/1024 |
+-------------------+
|        8.00000000 |
+-------------------+
1 row in set (0.00 sec)

mysql>

#8M

下面测试tinyblob的存储限制,看是否只能存储最大255字节的文件:

D:\Program Files\mysql-5.7.11-winx64\temp>dir
 驱动器 D 中的卷是 新加卷
 卷的序列号是 0672-4D3B

D:\Program Files\mysql-5.7.11-winx64\temp 的目录

2016/03/30  14:58    <DIR>          .
2016/03/30  14:58    <DIR>          ..
2016/03/30  14:58               255 test.255.file  #255字节
2016/03/30  14:58               256 test.256.file  #比255字节多1字节
               2 个文件            511 字节
               2 个目录 64,739,741,696 可用字节

D:\Program Files\mysql-5.7.11-winx64\temp>

#我们准备两个文件,一个是255字节,另一个是256字节。

现在我们更新tinyblob字段,看是否成功:

mysql> UPDATE t1
    -> SET t1.tiny_blob=LOAD_FILE('D:/Program Files/mysql-5.7.11-winx64/temp/test.255.file')
    -> WHERE t1.id=1;
Query OK, 1 row affected (0.11 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> UPDATE t1
    -> SET t1.tiny_blob=LOAD_FILE('D:/Program Files/mysql-5.7.11-winx64/temp/test.256.file')
    -> WHERE t1.id=1;
ERROR 1406 (22001): Data too long for column 'tiny_blob' at row 1
mysql>

很明显,根据上面得出,tinyblob类型的最大存储限制是255字节。

继续看看blob的存储限制是否是65k:

先准备需要的文件

D:\Program Files\mysql-5.7.11-winx64\temp>dir
 驱动器 D 中的卷是 新加卷
 卷的序列号是 0672-4D3B

D:\Program Files\mysql-5.7.11-winx64\temp 的目录

2016/03/30  15:28    <DIR>          .
2016/03/30  15:28    <DIR>          ..
2016/03/30  15:28            65,535 test.65535.file #比64K少1字节
2016/03/30  15:28            65,536 test.65536.file #65536字节,也就是刚刚64K
2016/03/30  15:28            65,537 test.65537.file #比64K多1字节
2016/03/30  15:26            66,559 test.65559.file #比65K少1字节
2016/03/30  15:25            66,560 test.65560.file #66560字节,也就是刚刚65K
2016/03/30  15:25            66,561 test.65561.file #比65K多1字节
               6 个文件        396,288 字节
               2 个目录 64,777,019,392 可用字节

D:\Program Files\mysql-5.7.11-winx64\temp>

#ok,文件已经准备好。来看看update是否成功:

mysql> UPDATE t1
    -> SET t1.b_blob=LOAD_FILE('D:/Program Files/mysql-5.7.11-winx64/temp/test.65560.file')
    -> WHERE t1.id=1;
ERROR 1406 (22001): Data too long for column 'b_blob' at row 1
mysql>

#失败了,根据网上摘录资料显示,blob类型的最大存储限制是65K,而这里演示出实际上65k是无法存储的。已经超过了最大限制。

那么65559字节呢,能存储进去吗?

mysql> UPDATE t1
    -> SET t1.b_blob=LOAD_FILE('D:/Program Files/mysql-5.7.11-winx64/temp/test.65559.file')
    -> WHERE t1.id=1;
ERROR 1406 (22001): Data too long for column 'b_blob' at row 1
mysql>

#可见,65559字节也是无法存储的。那么blob到底能存储多少字节呢?答案是65536-1=65535字节,也就是64K少1字节。

来看演示:

mysql> UPDATE t1
    -> SET t1.b_blob=LOAD_FILE('D:/Program Files/mysql-5.7.11-winx64/temp/test.65537.file')
    -> WHERE t1.id=1;
ERROR 1406 (22001): Data too long for column 'b_blob' at row 1  #失败
mysql>
mysql> UPDATE t1
    -> SET t1.b_blob=LOAD_FILE('D:/Program Files/mysql-5.7.11-winx64/temp/test.65536.file')
    -> WHERE t1.id=1;
ERROR 1406 (22001): Data too long for column 'b_blob' at row 1 #失败
mysql>

mysql> UPDATE t1
    -> SET t1.b_blob=LOAD_FILE('D:/Program Files/mysql-5.7.11-winx64/temp/test.65535.file')
    -> WHERE t1.id=1;
Query OK, 1 row affected (0.18 sec)
Rows matched: 1  Changed: 1  Warnings: 0  #成功

mysql>

可见,blob类型的最大存储限制是65535字节,就是64K少1字节。而不是网上说的65K。

继续来看看mediumblob类型,是16M吗?

先更改max_allowed_packet参数为256M,以满足16M:

mysql> set @@global.max_allowed_packet=256*1024*1024;
Query OK, 0 rows affected (0.00 sec)

mysql> exit
Bye

C:\Users\Administrator>mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 13
Server version: 5.7.11-log MySQL Community Server (GPL)

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> select @@max_allowed_packet;
+----------------------+
| @@max_allowed_packet |
+----------------------+
|            268435456 | #256M,够大了
+----------------------+
1 row in set (0.00 sec)

mysql>

成功更改。

准备文件:

D:\Program Files\mysql-5.7.11-winx64\temp>dir
 驱动器 D 中的卷是 新加卷
 卷的序列号是 0672-4D3B

D:\Program Files\mysql-5.7.11-winx64\temp 的目录

2016/03/30  15:49    <DIR>          .
2016/03/30  15:49    <DIR>          ..
2016/03/30  15:48        16,777,215 test.16777215.file #比16M少1字节
2016/03/30  15:44        16,777,216 test.16777216.file #16777216字节,也就是刚刚16M
2016/03/30  15:48        16,777,217 test.16777217.file #比16M多1字节
               3 个文件     50,331,648 字节
               2 个目录 64,727,027,712 可用字节

D:\Program Files\mysql-5.7.11-winx64\temp>

下面看看更新mediumblob是否成功:

mysql> use test1
Database changed
mysql> UPDATE t1
    -> SET t1.medium_blob=LOAD_FILE('D:/Program Files/mysql-5.7.11-winx64/temp/test.16777217.file')
    -> WHERE t1.id=1;
ERROR 1406 (22001): Data too long for column 'medium_blob' at row 1 #比16M多1字节,更新失败
mysql> UPDATE t1
    -> SET t1.medium_blob=LOAD_FILE('D:/Program Files/mysql-5.7.11-winx64/temp/test.16777216.file')
    -> WHERE t1.id=1;
ERROR 1406 (22001): Data too long for column 'medium_blob' at row 1 #刚刚16M,更新也失败
mysql> UPDATE t1
    -> SET t1.medium_blob=LOAD_FILE('D:/Program Files/mysql-5.7.11-winx64/temp/test.16777215.file')
    -> WHERE t1.id=1;
Query OK, 1 row affected (4.19 sec)
Rows matched: 1  Changed: 1  Warnings: 0 #比16M少1字节,更新成功

mysql>

所以,mediumblob类型的最大存储限制不是16M,而是16M少1字节。

那么longblob呢?

个人目前无法测试,毕竟64位下max_allowed_packet参数的最大值是1G。所以4G的longblob类型无法测试。

但我告诉你,是4G少1字节。

所以,

tinyblob,tinytext,最大存储限制为28-1=255字节;

blob,text,最大存储限制为 216-1=64k-1字节;

mediumblob,mediumtext,最大存储限制为 224-1=16M-1字节;

longblob,longtext,最大存储限制为232-1=4G-1字节。

转载于:https://www.cnblogs.com/kelelipeng/p/10131294.html

MySQL数据类型之BLOB与TEXT及其最大存储限制相关推荐

  1. mysql中的blob和text区别

    mysql中的blob和text区别 经过查询资料发现 除了blob 还有tinyblob longblob mediumblob 当然text还有tinytext mediumtext longte ...

  2. 关系数据库——mysql数据类型大总结

    整数类型: 实数类型: 定点数:DECIMAL和NUMERIC类型在MySQL中视为相同的类型.它们用于保存必须为确切精度的值. DECIMAL(M,D),其中M表示十进制数字总的个数,D表示小数点后 ...

  3. SQL笔记(3)——MySQL数据类型

    学习MySQL,通常应该是先学习数据类型的,因为不管是开发还是MySQL中,每个数据对象都有其对应的数据类型,MySQL提供了丰富的数据类型,如在创建表的时候就需要指定列的数据类型,在向表中插入数据时 ...

  4. mysql vchar 磁盘碎片_mysql TEXT与BLOB 碎片整理

    1.一般在保存少量字符串的时候,我们会选择CHAR 或者VARCHAR:而在保存较大文本时,通常会选择使用TEXT 或者BLOB,二者之间的主要差别是BLOB 能用来保存二进制数据,比如照片:而TEX ...

  5. mysql数据类型介绍(含text,longtext,mediumtext说明)

    转载,文章原连接已经失效,百度快照找到的. MySQL支持大量的列类型,它可以被分为3类:数字类型.日期和时间类型以及字符串(字符)类型.本节首先给出可用类型的一个概述,并且总结每个列类型的存储需求, ...

  6. Mysql数据类型blob存储长度

    BLOB (binary large object),二进制大对象,是一个可以存储二进制文件的容器.在计算机中,BLOB常常是数据库中用来存储二进制文件的字段类型. BLOB是一个大文件,典型的BLO ...

  7. mysql储存大文本_mysql 的大文本存储TEXT BLOB

    TEXT & BLOB 一般在保存少量字符串的时候,我们会选择 CHAR 或者 VARCHAR:而在保存较大文本时, 通常会选择使用 TEXT 或者 BLOB,二者之间的主要差别是 BLOB ...

  8. MySQL修改默认Blob数据类型大小(解决上传1M以上文件失败的问题)

    如果需要在MySQL中存储二进制数据,那么肯定会用到 BLOB 类型的字段.MySQL中,BLOB是个类型系列,包括:TinyBlob.Blob.MediumBlob.LongBlob,这几个类型之间 ...

  9. [转]mysql 数据类型

    原文地址:https://github.com/jaywcjlove/handbook/blob/master/MySQL/MySQL%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E ...

最新文章

  1. strut2服务器与android交互数据,用Android搭建客户端 手机和服务器交互开发
  2. CentOS下查看已经登录用户并踢出的方法
  3. redis存储java对象存储_Spring-Data-Redis存储对象(redisTemplate)
  4. centos安装mysql步骤,CentOS安装mysql超详细步骤
  5. Windows——Modern Standby(现代待机) S0改Suspend to RAM(待机到内存)S3睡眠解决方案(以机械革命F1 i5-11300H为例)
  6. 文献记录(part46)--Building Outlier Detection Ensembles by Selective Parameterization of ...
  7. python hstack_Python小白数据科学教程:NumPy (下)
  8. 从“信件装错”问题向递推问题的延伸
  9. jdk8新特性(二)Stream流式操作
  10. 常见的SAS接口类型、接口连接器外观详细解读
  11. pycharm中实现sin和cos函数曲线图
  12. 安装python第三方模块包时,报错 error: Microsoft Visual C++ 14.0 or greater is required. Get it with “Microsoft C
  13. 为什么现在社交电商这么火?
  14. Java 编程实例 - 查找数组中的重复元素
  15. C语言:由键盘任意输入1个整形数据(小于10亿,位数不限),将其倒置,如:输入12345,则输出54321。
  16. 013 两个重要极限之一
  17. 【MM模块】Subsequent Debits/Credits 事后借记/事后贷记
  18. 几种常见的算法求最大公约数(C语言)
  19. 搞个网站需要多少钱【网站费用】
  20. 【项目篇-项目选题与类型】创赛项目来源、项目选题建议;四种常见类型项目各自内容的侧重点与区别

热门文章

  1. GET 和 POST的区别(转载)
  2. javaScript——原型
  3. Spring Boot 2.2 增加了一个新功能,启动飞起~
  4. [stl]集合相似度(PTA)
  5. vue 右键菜单插件 简单、可扩展、样式自定义的右键菜单
  6. K3/Cloud点按钮打开单据,列表,动态表单,简单账表和直接Sql报表示例
  7. [算法笔记]分块算法从入门到TLE
  8. 如何快速安装kafka-manager
  9. 用xib自定义UIView并在代码中使用--iOS
  10. 压力测试工具siege的用法