Rumah >pangkalan data >tutorial mysql >Mari bercakap tentang jenis data gumpalan dan teks dalam MySQL (contoh terperinci)

Mari bercakap tentang jenis data gumpalan dan teks dalam MySQL (contoh terperinci)

WBOY
WBOYke hadapan
2022-01-13 15:35:442780semak imbas

Dalam artikel ini, kita melihat jenis data gumpalan dan teks dalam mysql Gumpalan ialah bekas yang boleh menyimpan fail binari Jenis teks adalah serupa dengan char dan varchar, dan boleh digunakan untuk menyimpan rentetan. Mari kita lihat bersama-sama. Mari kita lihat pengetahuan yang berkaitan tentang kedua-dua jenis data ini. Saya harap ia akan membantu semua orang.

Mari bercakap tentang jenis data gumpalan dan teks dalam MySQL (contoh terperinci)

1. jenis gumpalan

gumpalan (objek besar binari) ialah fail binari yang boleh Bekas disimpan digunakan terutamanya untuk menyimpan objek binari yang besar, seperti gambar, fail audio dan video. Dikelaskan mengikut saiz kapasiti penyimpanan, jenis gumpalan boleh dibahagikan kepada empat jenis berikut:

Mari bercakap tentang jenis data gumpalan dan teks dalam MySQL (contoh terperinci)

Yang paling biasa digunakan ialah jenis medan gumpalan, yang boleh menyimpan kepada 65KB data , biasanya digunakan untuk menyimpan ikon atau imej logo. Walau bagaimanapun, pangkalan data tidak sesuai untuk menyimpan imej secara langsung Jika terdapat keperluan untuk menyimpan sejumlah besar imej, sila gunakan storan objek atau storan fail Laluan imej boleh disimpan dalam pangkalan data untuk membuat panggilan.

2. jenis teks

jenis teks adalah serupa dengan char dan varchar, dan boleh digunakan untuk menyimpan rentetan datang ke storan Pertimbangkan untuk menggunakan jenis teks apabila rentetan teks yang panjang diperlukan. Mengikut saiz storan, jenis teks juga boleh dibahagikan kepada empat jenis berikut:

Mari bercakap tentang jenis data gumpalan dan teks dalam MySQL (contoh terperinci)

Walau bagaimanapun, dalam senario harian, cuba gunakan varchar untuk menyimpan rentetan, hanya jika anda ingin menyimpan teks panjang Untuk data, anda boleh menggunakan jenis teks. Berbanding dengan varchar, jenis teks mempunyai ciri-ciri berikut:

  • Jenis teks tidak perlu menyatakan panjangnya.

  • Jika sqlmode ketat tidak didayakan dalam pangkalan data, apabila nilai yang dimasukkan melebihi panjang maksimum lajur teks, nilai akan dipotong dan dimasukkan dan amaran akan dijana.

  • Medan jenis teks tidak boleh mempunyai nilai lalai.

  • varchar boleh mencipta indeks secara langsung Untuk mencipta indeks pada medan teks, anda perlu menentukan nombor pertama aksara.

  • Kecekapan mendapatkan semula jenis teks adalah lebih rendah daripada varchar.

Mari kita uji secara khusus cara menggunakan jenis teks:

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

Melalui ujian di atas, kami mendapati bahawa kapasiti storan jenis teks adalah dalam bait sebagai unit dan bukannya aksara. Sebagai contoh, tinytext boleh menyimpan sehingga 255 bait dan bukannya 255 aksara Di bawah set aksara utf8, satu huruf atau nombor Inggeris menduduki satu bait, manakala satu aksara Cina menduduki tiga bait. Maksudnya, tinytext boleh menyimpan sehingga 255/3=85 aksara Cina dan teks boleh menyimpan sehingga 65535/3=21845 aksara Cina. M dalam varchar(M) merujuk kepada bilangan aksara Setiap aksara Inggeris, nombor dan Cina menduduki satu aksara, iaitu saiz yang boleh disimpan oleh tinytext adalah tidak lebih daripada varchar(255).

Ringkasan:

Artikel ini memperkenalkan pengetahuan tentang jenis medan gumpalan dan teks. Walaupun penggunaan jenis gumpalan dan teks secara amnya tidak disyorkan dalam spesifikasi pangkalan data, kedua-dua jenis data ini masih digunakan kerana beberapa isu sejarah atau senario tertentu. Artikel ini hanya untuk rekod, anda boleh merujuknya apabila menggunakannya.

Pembelajaran yang disyorkan: tutorial video mysql

Atas ialah kandungan terperinci Mari bercakap tentang jenis data gumpalan dan teks dalam MySQL (contoh terperinci). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:Mysql技术公众号. Jika ada pelanggaran, sila hubungi admin@php.cn Padam