MySQL中的BLOB类型和TEXT类型相关说明

  •   
  • 4006
  • MySQL
  • 34
  • super_dodo
  • 2017/04/06

MySQL中BLOB是一个二进制大对象,可以容纳可变数量的数据。有4种BLOB类型:TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。它们只是可容纳值的最大长度不同(255k-4G)。

有4种TEXT类型:TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT。这些对应4种BLOB类型,有相同的最大长度和存储需求。

BLOB 列被视为二进制字符串(字节字符串)。TEXT列被视为非二进制字符串(字符字符串)。BLOB列没有字符集,并且排序和比较基于列值字节的数值值。TEXT列有一个字符集,并且根据字符集的 校对规则对值进行排序和比较。

在TEXT或BLOB列的存储或检索过程中,不存在大小写转换。

//新建了一张表如下
CREATE TABLE `tbl_blob_test` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(20) NOT NULL DEFAULT '',
  `remark` blob COMMENT '二进制',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8mb4mb4;

//使用PHP插入数据--循环插入几次(Yii2框架下面)
$model = new BlobTest();
$model->name = 'Dodo--'.Date('Y-m-d');
$model->remark = '五星红旗你是我的骄傲我为你自豪为你欢呼。hello China..';
$model->save();
//Tips 存储的时候不需要进行任何处理,MySQL会自动存储

//导出来的sql备份语句为
INSERT INTO `tbl_blob_test` VALUES ('1', 'Dodo--2017-03-23', 0x446F646F626F6F6B323031372D30332D32332031353A30353A3031);
INSERT INTO `tbl_blob_test` VALUES ('2', 'Dodo--2017-03-23', 0xE4BA94E6989FE7BAA2E69797E8BF8EE9A38EE9A39EE689AC2D2D646F646F626F6F6B);
INSERT INTO `tbl_blob_test` VALUES ('3', 'Dodo--2017-03-23', 0xE4BA94E6989FE7BAA2E69797E8BF8EE9A38EE9A39EE689AC2D2D646F646F626F6F6B);
INSERT INTO `tbl_blob_test` VALUES ('4', 'Dodo--2017-03-23', 0xE4BA94E6989FE7BAA2E69797E8BF8EE9A38EE9A39EE689AC2D2D646F646F626F6F6B);
INSERT INTO `tbl_blob_test` VALUES ('5', 'Dodo--2017-03-23', 0xE4BA94E6989FE7BAA2E69797E8BF8EE9A38EE9A39EE689AC2D2D646F646F626F6F6B);
INSERT INTO `tbl_blob_test` VALUES ('6', 'Dodo--2017-03-23', 0xE4BA94E6989FE7BAA2E69797E8BF8EE9A38EE9A39EE689AC2D2D646F646F626F6F6B);
INSERT INTO `tbl_blob_test` VALUES ('7', 'Dodo--2017-03-23', 0xE4BA94E6989FE7BAA2E69797E4BDA0E698AFE68891E79A84E9AA84E582B22D2D646F646F626F6F6B);
INSERT INTO `tbl_blob_test` VALUES ('8', 'Dodo--2017-03-23', 0xE4BA94E6989FE7BAA2E69797E4BDA0E698AFE68891E79A84E9AA84E582B2E68891E4B8BAE4BDA0E887AAE8B1AAE4B8BAE4BDA0E6ACA2E591BCE3808268656C6C6F204368696E612E2E);


//这个时候使用LIKE语句进行查询remark字段也是完全OK的,和text字段类型一致
$sql = "SELECT * FROM tbl_blob_test WHERE remark LIKE '%hello%' ";
//可以得到正常想要的结果


MySQL的四种BLOB类型:
类型			大小(单位:字节)
TinyBlob		最大 255
Blob			最大 65K
MediumBlob		最大 16M
LongBlob		最大 4G

在这个世界上。没有什么可以遮蔽一个人内心的光。