>  기사  >  데이터 베이스  >  MySQL의 blob 및 텍스트 데이터 유형에 대해 이야기해 보겠습니다(자세한 예).

MySQL의 blob 및 텍스트 데이터 유형에 대해 이야기해 보겠습니다(자세한 예).

WBOY
WBOY앞으로
2022-01-13 15:35:442726검색

이 글에서는 mysql의 blob과 text 데이터 유형을 살펴보겠습니다. Blob은 바이너리 파일을 저장할 수 있는 컨테이너입니다. 텍스트 유형은 char 및 varchar와 유사하며 문자열을 저장하는 데 사용할 수 있습니다. 두 가지 데이터 유형에 대한 관련 지식을 함께 살펴보세요. 모두에게 도움이 되기를 바랍니다.

MySQL의 blob 및 텍스트 데이터 유형에 대해 이야기해 보겠습니다(자세한 예).

1. blob 유형

blob(바이너리 대형 개체)은 바이너리 파일을 저장할 수 있는 컨테이너로 주로 사진, 오디오, 비디오 파일과 같은 바이너리 대형 개체를 저장하는 데 사용됩니다. 저장 용량의 크기에 따라 분류하면 Blob 유형은 다음과 같은 네 가지 유형으로 나눌 수 있습니다.

MySQL의 blob 및 텍스트 데이터 유형에 대해 이야기해 보겠습니다(자세한 예).

가장 일반적으로 사용되는 blob 필드 유형은 최대 65KB의 데이터를 저장할 수 있으며 일반적으로 저장하는 데 사용됩니다. 아이콘이나 로고 이미지. 단, 이미지를 직접 저장하기에는 데이터베이스가 적합하지 않습니다. 많은 수의 이미지를 저장해야 하는 경우에는 개체 저장소나 파일 저장소를 사용하여 호출할 수 있습니다.

2. 텍스트 유형

텍스트 유형은 char 및 varchar와 유사하며 문자열을 저장하는 데 사용할 수 있습니다. 일반적으로 긴 텍스트 문자열을 저장해야 할 경우 텍스트 유형을 사용하는 것을 고려할 수 있습니다. . 저장 크기에 따라 텍스트 유형도 다음 네 가지 유형으로 나눌 수 있습니다.

MySQL의 blob 및 텍스트 데이터 유형에 대해 이야기해 보겠습니다(자세한 예).

그러나 일상적인 시나리오에서는 긴 텍스트 데이터를 저장해야 하는 경우에만 varchar를 사용하는 것이 좋습니다. 텍스트 유형을 사용할 수 있습니다. varchar와 비교할 때 텍스트 유형은 다음과 같은 특징을 갖습니다.

  • 텍스트 유형은 길이를 지정할 필요가 없습니다.

  • 데이터베이스가 엄격한 sqlmode를 활성화하지 않은 경우 삽입된 값이 텍스트 열의 최대 길이를 초과하면 값이 잘려 삽입되고 경고가 생성됩니다.

  • 텍스트 유형 필드는 기본값을 가질 수 없습니다.

  • varchar는 인덱스를 직접 생성할 수 있으며 텍스트 필드에 대한 인덱스를 생성할 때 첫 번째 문자 수를 지정해야 합니다.

  • 텍스트 유형 검색 효율성은 varchar보다 낮습니다.

텍스트 유형의 사용을 자세히 테스트해 보겠습니다.

# 创建测试表 字符集是 utf8
mysql> show create table tb_text\G
*************************** 1. row ***************************
       Table: tb_text
Create Table: CREATE TABLE `tb_text` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `a` tinytext,
  `b` text,
  `c` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
# 创建索引测试 发现text类型必须指定前缀长度
mysql> alter table tb_text add index idx_a (a);
ERROR 1170 (42000): BLOB/TEXT column 'a' used in key specification without a key length
mysql> alter table tb_text add index idx_b (b); 
ERROR 1170 (42000): BLOB/TEXT column 'b' used in key specification without a key length
mysql> alter table tb_text add index idx_c (c);
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0
mysql> alter table tb_text add index idx_b (b(10));
Query OK, 0 rows affected (0.06 sec)
Records: 0  Duplicates: 0  Warnings: 0
# 插入数据测试(repeat函数用于生成重复数据)
# 正常插入
mysql> insert into tb_text  (a,b,c) values (repeat('hello',3),repeat('hello',3),repeat('hello',3));
Query OK, 1 row affected (0.01 sec)
# 插入英文字符超标
mysql> insert into tb_text  (a) values (repeat('hello',52));
Query OK, 1 row affected, 1 warning (0.01 sec)
mysql> show warnings;
+---------+------+----------------------------------------+
| Level   | Code | Message                                |
+---------+------+----------------------------------------+
| Warning | 1265 | Data truncated for column 'a' at row 1 |
+---------+------+----------------------------------------+
1 row in set (0.00 sec)
# 插入中文超标
mysql>  insert into tb_text  (a) values (repeat('你好',100));
Query OK, 1 row affected, 1 warning (0.02 sec)
mysql> show warnings;
+---------+------+----------------------------------------+
| Level   | Code | Message                                |
+---------+------+----------------------------------------+
| Warning | 1265 | Data truncated for column 'a' at row 1 |
+---------+------+----------------------------------------+
1 row in set (0.00 sec)
# 查看数据 发现数据有所截取 tinytext 类型最多存储255字节数据
mysql> select * from tb_text;
+----+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------+-----------------+
| id | a | b | c |
+----+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------+-----------------+
|  1 | hellohellohello | hellohellohello | hellohellohello |
|  2 | hellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohello | NULL| NULL|
|  3 | 你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你| NULL| NULL|
+----+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------+-----------------+
3 rows in set (0.00 sec)

위 테스트를 통해 텍스트 유형의 저장 용량이 문자가 아닌 바이트 단위라는 것을 알 수 있습니다. 예를 들어,tinytext는 255자가 아닌 최대 255바이트까지 저장할 수 있습니다. utf8 문자 집합에서는 영문자나 숫자 하나가 1바이트를 차지하고, 한자 하나는 3바이트를 차지합니다. 즉,tinytext는 최대 255/3=85개의 한자를 저장할 수 있고, text는 최대 65535/3=21845개의 한자를 저장할 수 있습니다. varchar(M)의 M은 영문, 숫자, 한자가 각각 한 글자를 차지하는 문자수를 의미한다. 즉,tinytext가 저장할 수 있는 크기는 varchar(255) 이하이다.

요약:

이 문서에서는 Blob 및 텍스트 필드 유형에 대한 지식을 소개합니다. Blob 및 텍스트 유형의 사용은 일반적으로 데이터베이스 사양에서 권장되지 않지만, 이 두 데이터 유형은 일부 기록 문제 또는 특정 시나리오로 인해 여전히 사용됩니다. 이 글은 기록용이므로 이용 시 참고하시기 바랍니다.

추천 학습: mysql 비디오 튜토리얼

위 내용은 MySQL의 blob 및 텍스트 데이터 유형에 대해 이야기해 보겠습니다(자세한 예).의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 Mysql技术公众号에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제