Maison  >  Article  >  base de données  >  Parlons des types de données blob et texte dans MySQL (exemples détaillés)

Parlons des types de données blob et texte dans MySQL (exemples détaillés)

WBOY
WBOYavant
2022-01-13 15:35:442757parcourir

Dans cet article, examinons les types de données blob et text dans MySQL. Blob est un conteneur qui peut stocker des fichiers binaires. Le type de texte est similaire à char et varchar, et peut être utilisé pour stocker des chaînes. regardez cela ensemble. La connaissance pertinente des deux types de données, j'espère que cela sera utile à tout le monde.

Parlons des types de données blob et texte dans MySQL (exemples détaillés)

1. type blob

blob (grand objet binaire) est un conteneur qui peut stocker des fichiers binaires. Il est principalement utilisé pour stocker des objets binaires volumineux, tels que des images, des fichiers audio et vidéo. Classés selon la taille de la capacité de stockage, les types de blob peuvent être divisés en quatre types suivants :

Parlons des types de données blob et texte dans MySQL (exemples détaillés)

Le plus couramment utilisé est le type de champ blob, qui peut stocker jusqu'à 65 Ko de données et est généralement utilisé pour stocker icônes ou images de logo. Cependant, la base de données ne convient pas au stockage direct d'images. S'il est nécessaire de stocker un grand nombre d'images, veuillez utiliser le stockage d'objets ou le stockage de fichiers. Le chemin de l'image peut être stocké dans la base de données pour l'appel.

2. Type de texte

Le type de texte est similaire à char et varchar et peut être utilisé pour stocker des chaînes. En général, vous pouvez envisager d'utiliser le type de texte lorsque vous rencontrez le besoin de stocker de longues chaînes de texte. . Selon la taille de stockage, le type de texte peut également être divisé en quatre types suivants :

Parlons des types de données blob et texte dans MySQL (exemples détaillés)

Cependant, dans les scénarios quotidiens, il est préférable d'utiliser varchar pour stocker des chaînes uniquement lorsque des données texte longues doivent être stockées, le type de texte peut être utilisé. Par rapport à varchar, le type de texte présente les caractéristiques suivantes :

  • Le type de texte n'a pas besoin de spécifier la longueur.

  • Si la base de données n'active pas le mode SQL strict, lorsque la valeur insérée dépasse la longueur maximale de la colonne de texte, la valeur sera tronquée et insérée et un avertissement sera généré.

  • Les champs de type texte ne peuvent pas avoir de valeurs par défaut.

  • varchar peut créer un index directement, et vous devez spécifier le premier nombre de caractères lors de la création d'un index pour le champ de texte.

  • L'efficacité de la récupération du type de texte est inférieure à celle du varchar.

Testons l'utilisation du type texte en détail :

# 创建测试表 字符集是 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)

Grâce au test ci-dessus, nous avons remarqué que la capacité de stockage du type texte est en octets plutôt qu'en caractères. Par exemple, tinytext peut stocker jusqu'à 255 octets au lieu de 255 caractères. Dans le jeu de caractères utf8, une lettre ou un chiffre anglais occupe un octet, tandis qu'un caractère chinois occupe trois octets. Autrement dit, tinytext peut stocker jusqu'à 255/3=85 caractères chinois, et le texte peut stocker jusqu'à 65535/3=21845 caractères chinois. Le M dans varchar(M) fait référence au nombre de caractères. Chaque caractère anglais, numérique et chinois occupe un caractère, c'est-à-dire que la taille que tinytext peut stocker n'est pas supérieure à varchar(255).

Résumé :

Cet article présente les connaissances sur les types de champs de blob et de texte. Bien que l’utilisation des types blob et texte ne soit généralement pas recommandée dans les spécifications des bases de données, ces deux types de données sont toujours utilisés en raison de problèmes historiques ou de certains scénarios. Cet article est uniquement à titre indicatif, vous pouvez vous y référer lorsque vous l'utilisez.

Apprentissage recommandé : Tutoriel vidéo mysql

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer