Heim > Datenbank > MySQL-Tutorial > Hauptteil

Lassen Sie uns über Blob- und Textdatentypen in MySQL sprechen (detaillierte Beispiele).

Freigeben: 2022-01-13 15:42:00
nach vorne
2726 Leute haben es durchsucht

In diesem Artikel werfen wir einen Blick auf die Blob- und Textdatentypen in MySQL. Der Texttyp ähnelt char und varchar und kann zum Speichern von Zeichenfolgen verwendet werden Schauen Sie sich das zusammen an. Das relevante Wissen über die beiden Datentypen wird hoffentlich für alle hilfreich sein.

Lassen Sie uns über Blob- und Textdatentypen in MySQL sprechen (detaillierte Beispiele).

1. Blob-Typ

Blob (binäres großes Objekt) ist ein Container, der Binärdateien speichern kann. Er wird hauptsächlich zum Speichern binärer großer Objekte wie Bilder, Audio- und Videodateien verwendet. Nach der Größe der Speicherkapazität klassifiziert, können Blob-Typen in die folgenden vier Typen unterteilt werden:

Lassen Sie uns über Blob- und Textdatentypen in MySQL sprechen (detaillierte Beispiele).

Am häufigsten wird der Blob-Feldtyp verwendet, der bis zu 65 KB Daten speichern kann und im Allgemeinen zum Speichern verwendet wird Symbole oder Logobilder. Die Datenbank eignet sich jedoch nicht zum direkten Speichern einer großen Anzahl von Bildern. Verwenden Sie zum Aufrufen bitte die Objektspeicherung oder die Dateispeicherung.

2. Texttyp

Der Texttyp ähnelt char und varchar und kann zum Speichern von Zeichenfolgen verwendet werden. Im Allgemeinen können Sie die Verwendung des Texttyps in Betracht ziehen, wenn Sie lange Textzeichenfolgen speichern müssen . Entsprechend der Speichergröße kann der Texttyp auch in die folgenden vier Typen unterteilt werden:

Lassen Sie uns über Blob- und Textdatentypen in MySQL sprechen (detaillierte Beispiele).

In täglichen Szenarien ist es jedoch besser, Varchar zum Speichern von Zeichenfolgen zu verwenden. Nur wenn lange Textdaten gespeichert werden müssen. Der Texttyp kann verwendet werden. Im Vergleich zu Varchar weist der Texttyp die folgenden Merkmale auf:

  • Der Texttyp muss die Länge nicht angeben.

  • Wenn die Datenbank den strengen SQL-Modus nicht aktiviert und der eingefügte Wert die maximale Länge der Textspalte überschreitet, wird der Wert abgeschnitten und eingefügt und eine Warnung wird generiert.

  • Felder vom Typ Text dürfen keine Standardwerte haben.

  • varchar kann einen Index direkt erstellen, und Sie müssen die erste Anzahl von Zeichen angeben, wenn Sie einen Index für das Textfeld erstellen.

  • Die Effizienz beim Abrufen von Texttypen ist geringer als bei Varchar.

Testen wir die Verwendung des Texttyps im Detail:

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

Durch den obigen Test haben wir festgestellt, dass die Speicherkapazität des Texttyps in Bytes und nicht in Zeichen angegeben ist. Tinytext kann beispielsweise bis zu 255 Bytes anstelle von 255 Zeichen speichern. Unter dem utf8-Zeichensatz belegt ein englischer Buchstabe oder eine englische Zahl ein Byte, während ein chinesisches Zeichen drei Bytes belegt. Das heißt, Tinytext kann bis zu 255/3=85 chinesische Zeichen speichern, und Text kann bis zu 65535/3=21845 chinesische Zeichen speichern. Das M in varchar(M) bezieht sich auf die Anzahl der Zeichen. Jedes englische Zeichen, jede Zahl und jedes chinesische Zeichen belegt ein Zeichen, d. h. die Größe, die tinytext speichern kann, beträgt nicht mehr als varchar(255).

Zusammenfassung:

Dieser Artikel vermittelt Kenntnisse über Blob- und Textfeldtypen. Obwohl die Verwendung von Blob- und Texttypen in Datenbankspezifikationen im Allgemeinen nicht empfohlen wird, werden diese beiden Datentypen aufgrund einiger historischer Probleme oder bestimmter Szenarien immer noch verwendet. Dieser Artikel dient nur zur Dokumentation, Sie können ihn bei der Verwendung heranziehen.

Empfohlenes Lernen: MySQL-Video-Tutorial

Das obige ist der detaillierte Inhalt vonLassen Sie uns über Blob- und Textdatentypen in MySQL sprechen (detaillierte Beispiele).. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:Mysql技术公众号
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!