Mula-mula mari kita fahami perbezaan antara jenis rentetan varchar(M) dan jenis berangka tinyint(M) dalam mysql ?
Jenis lajur rentetan: Dari segi varchar(M), M ialah panjang aksara maksimum yang boleh disimpan dalam medan, Maksudnya, panjang medan. Bergantung pada tetapan, anda mungkin menerima ralat apabila anda memasukkan data yang melebihi panjang medan, dan walaupun anda tidak menerima ralat, data yang anda masukkan akan dipotong secara automatik agar sesuai dengan panjang medan yang telah ditetapkan. Oleh itu, varchar(20) dan varchar(40) adalah berbeza, yang benar-benar mencerminkan panjang data yang boleh disimpan dalam medan ini .
Jenis lajur angka: Pengubah suai panjangnya mewakili lebar paparan maksimum dan tiada kaitan dengan storan fizikal medan. Dalam erti kata lain, julat berangka yang boleh disimpan oleh tinyint(1) dan tinyint(4) ialah -128…127 (atau untuk nilai tidak bertanda 0…255 adalah jenis data sama). Sudah tentu, mereka masih Terdapat sedikit perbezaan, yang akan dijelaskan di bawah.
Untuk jenis data tinyint, ia hanya menduduki 1 bait:
- tidak ditandatangani, antara 0 hingga 255, Panjang lalai ialah 3 .
- ditandatangani, julat ialah -128 hingga 127, panjang lalai ialah 4.
Algoritma julat: tinyint menduduki 1 bait, bait ialah 8 bit, iaitu 1*8=8, dan bilangan nombor yang boleh diwakili ialah 8 kali 2 Petak (2^8 = 256 nombor).
Perbezaan: Jika sifar digunakan, apabila panjang sebenar tidak mencapai panjang paparan yang ditentukan, ia akan berlapik dengan 0 di hadapan. (Fungsi zerofill secara ringkasnya ialah mengisi sifar)
Mula-mula buat jadual ujian dan gunakan zerofill untuk semua jenis tinyint.
CREATE TABLE `pre_demo` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', `unsigned_t` tinyint(3) unsigned zerofill NOT NULL DEFAULT '000', `signed_t` tinyint(4) unsigned zerofill NOT NULL DEFAULT '0000', `t1` tinyint(1) unsigned zerofill NOT NULL DEFAULT '0', `t2` tinyint(2) unsigned zerofill NOT NULL DEFAULT '00', `t3` tinyint(3) unsigned zerofill NOT NULL DEFAULT '000', `t4` tinyint(4) unsigned zerofill NOT NULL DEFAULT '0000', `t5` tinyint(5) unsigned zerofill NOT NULL DEFAULT '00000', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Kemudian, masukkan data ujian.
NSERT INTO pre_demo VALUES(NULL,8,8,8,8,8,8,8); INSERT INTO pre_demo VALUES(NULL,123,123,123,123,123,123,123);
Akhir sekali, tanya data dalam jadual data.
mysql> SELECT * FROM pre_demo; +----+------------+----------+-----+-----+-----+------+-------+ | id | unsigned_t | signed_t | t1 | t2 | t3 | t4 | t5 | +----+------------+----------+-----+-----+-----+------+-------+ | 1 | 008 | 0008 | 8 | 08 | 008 | 0008 | 00008 | | 2 | 123 | 0123 | 123 | 123 | 123 | 0123 | 00123 | +----+------------+----------+-----+-----+-----+------+-------+ 2 rows in set (0.00 sec)
Atas ialah kandungan terperinci Apakah perbezaan antara Mysql tinyint(1) dan tinyint(4). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!