MySQL menyimpan data. Selagi ia adalah data, kami akan menentukan jenis data. Jenis data tertentu ditentukan dalam medan jadual. Kemudian, jenis data yang sepadan mesti digunakan dalam data yang dimasukkan. Juga, patuhi keperluan panjang jenis data.
Dalam MySQL kami membahagikan jenis data kepada jenis berikut:
MySQL数据类型 | 所占字节 | 值范围 |
---|---|---|
tinyint | 1字节 | -128~127 |
smallint | 2字节 | -32768~32767 |
mediumint | 3字节 | -8388608~8388607 |
int | 4字节 | 范围-2147483648~2147483647 |
bigint | 8字节 | +-9.22*10的18次方 |
Panjang jenis integer adalah berbeza, dan proses penggunaan sebenar juga berbeza.
MySQL memanjangkan standard SQL dalam bentuk penunjuk lebar paparan pilihan supaya apabila nilai diambil daripada pangkalan data, nilai itu boleh dipanjangkan kepada panjang yang ditentukan. Sebagai contoh, menyatakan bahawa jenis medan ialah INT(6),
memastikan bahawa nilai yang mengandungi kurang daripada 6 digit secara automatik berlapik dengan ruang apabila diambil daripada pangkalan data. Ambil perhatian bahawa menggunakan penunjuk lebar tidak menjejaskan saiz medan atau julat nilai yang boleh disimpan.
Nota:
Jenis data MySQL | bait yang diduduki | Julat nilai | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
float(m, d) | 4 bait | Titik terapung Ketepatan Tunggal jenis, m jumlah nombor, d tempat perpuluhan | ||||||||||||
ganda(m, d) | 8 bait | Jenis titik terapung berketepatan ganda , m jumlah nombor, d tempat perpuluhan | ||||||||||||
perpuluhan(m, d) |
| Perpuluhan ialah titik terapung nombor disimpan sebagai rentetan |
Nota:
MySQL数据类型 | 所占字节 | 值范围 |
---|---|---|
CHAR | 0-255字节 | 定长字符串 |
VARCHAR | 0-255字节 | 变长字符串 |
TINYBLOB | 0-255字节 | 不超过255个字符的二进制字符串 |
TINYTEXT | 0-255字节 | 短文本字符串 |
BLOB | 0-65535字节 | 二进制形式的长文本数据 |
TEXT | 0-65535字节 | 长文本数据 |
MEDIUMBLOB | 0-16 777 215字节 | 二进制形式的中等长度文本数据 |
MEDIUMTEXT | 0-16 777 215字节 | 中等长度文本数据 |
LOGNGBLOB | 0-4 294 967 295字节 | 二进制形式的极大文本数据 |
LONGTEXT | 0-4 294 967 295字节 | 极大文本数据 |
VARBINARY(M) | 允许长度0-M个字节的定长字节符串 | 值的长度+1个字节 |
BINARY(M) | M | 允许长度0-M个字节的定长字节符串 |
*CHAR * digunakan untuk rentetan panjang tetap dan mesti ditakrifkan dengan pengubah suai saiz dalam kurungan. Pengubah suai saiz ini berjulat dari 0-255. Nilai yang lebih besar daripada panjang yang ditentukan akan dipotong, manakala nilai yang lebih kecil daripada panjang yang ditentukan akan dilapisi dengan ruang.
*VARCHAR *Anggap saiz ini sebagai saiz nilai Jika panjangnya tidak mencukupi, gunakan ruang untuk menggantikannya. Jenis VARCHAR, sebaliknya, menganggapnya sebagai nilai maksimum dan hanya menggunakan panjang yang sebenarnya diperlukan untuk menyimpan rentetan
Jenis ini tidak berlapik dengan ruang, tetapi nilai yang lebih panjang daripada penunjuk masih dipotong.
Oleh kerana jenis VARCHAR boleh menukar panjang nilai yang disimpan secara dinamik berdasarkan kandungan sebenar, menggunakan jenis VARCHAR apabila anda tidak pasti berapa banyak aksara yang diperlukan oleh medan boleh menjimatkan ruang cakera dan meningkatkan kecekapan storan.
Jenis teks dan jenis gumpalanApabila keperluan panjang medan melebihi 255, MySQL menyediakan dua jenis: TEXT dan BLOB. Kesemuanya mempunyai subjenis berbeza bergantung pada saiz data yang disimpan. Data besar ini digunakan untuk menyimpan blok teks atau jenis data binari seperti imej dan fail bunyi.
Terdapat perbezaan dalam klasifikasi dan perbandingan antara jenis TEXT dan BLOB. Jenis BLOB adalah sensitif huruf besar-besaran, manakala TEXT bukan sensitif huruf besar-besaran. Pengubah suai saiz tidak digunakan pada pelbagai subjenis BLOB dan TEXT.
MySQL数据类型 | 所占字节 | 值范围 |
---|---|---|
date | 3字节 | 日期,格式:2014-09-18 |
time | 3字节 | 时间,格式:08:42:30 |
datetime | 8字节 | 日期时间,格式:2014-09-18 08:42:30 |
timestamp | 4字节 | 自动存储记录修改的时间 |
year | 1字节 | 年份 |
Jenis ENUM hanya membenarkan satu nilai diperoleh daripada koleksi manakala jenis SET membenarkan sebarang bilangan nilai diperoleh daripada koleksi.
Jenis ENUM
Jenis ENUM adalah serupa dengan pilihan tunggal kerana ia hanya membenarkan satu nilai diperoleh dalam koleksi. Lebih mudah difahami apabila berurusan dengan data yang saling eksklusif, seperti jantina manusia. Medan jenis ENUM boleh mengambil nilai daripada koleksi atau menggunakan nilai nol Sebarang input lain akan menyebabkan MySQL memasukkan rentetan kosong ke dalam medan. Di samping itu, jika kes nilai yang dimasukkan tidak sepadan dengan kes nilai dalam koleksi, MySQL secara automatik akan menggunakan kes nilai yang dimasukkan untuk menukarnya kepada nilai yang konsisten dengan kes koleksi.
Jenis ENUM boleh disimpan sebagai nombor secara dalaman dalam sistem, dan diindeks bermula dari 1. Jenis ENUM boleh mengandungi sehingga 65536 elemen, satu daripadanya dikhaskan oleh MySQL untuk menyimpan maklumat ralat ini diwakili oleh indeks 0 atau rentetan kosong.
MySQL menganggap nilai yang muncul dalam koleksi jenis ENUM sebagai input sah, dan sebarang input lain akan gagal. Ini menunjukkan bahawa lokasi rekod yang salah boleh didapati dengan mudah dengan mencari baris yang mengandungi rentetan kosong atau indeks angka 0 yang sepadan.
Jenis SET Jenis SET adalah serupa tetapi tidak sama dengan jenis ENUM. Jenis SET boleh memperoleh sebarang bilangan nilai daripada koleksi yang telah ditetapkan. Dan seperti jenis ENUM, sebarang percubaan untuk memasukkan nilai yang tidak dipratentukan ke dalam medan jenis SET akan menyebabkan MySQL memasukkan rentetan kosong. Jika anda memasukkan rekod yang mengandungi unsur undang-undang dan haram, MySQL akan mengekalkan unsur undang-undang dan mengalih keluar unsur haram.
Jenis SET boleh mengandungi sehingga 64 elemen. Dalam elemen SET nilai disimpan sebagai urutan diskret "bit" yang mewakili elemen sepadannya. Bit ialah cara yang mudah dan cekap untuk mencipta koleksi tersusun elemen.
Dan ia juga mengalih keluar elemen pendua, jadi adalah mustahil untuk mengandungi dua elemen yang sama dalam jenis SET.
Untuk mencari rekod haram daripada medan jenis SET cuma cari baris yang mengandungi rentetan kosong atau nilai binari 0.
Kami telah mempelajari begitu banyak jenis, hanya gunakan jenis yang sepadan semasa membuat pernyataan jadual.
Contohnya:
BUAT JADUAL JIKA TIDAK WUJUD
demo
(
id
int(11) BUKAN NULL,
username
varchar(50) NOT NULL,
password
char(32) NOT NULL,
content
longtext NOT NULL,
createtime
datetime NOT NULL,
sex
tinyint(4) NOT NULL
) ENJIN=CHARSET LALAI InnoDB=utf8;
TIDAK TANDA (tidak ditandatangani) Terutamanya digunakan untuk jenis integer dan titik terapung, gunakan tanpa tanda. Iaitu, tidak ada sebelumnya - (tanda tolak).
Digit storan yang lebih panjang. Julat nilai integer kecil ialah -128~127. Selepas menggunakan unsigned, 0-255 panjang boleh disimpan.
Apabila mencipta, ikuti pernyataan medan integer atau titik terapung:
tidak ditandatangani
ZEROFILL (0 padding) 0 ( bukan ruang) boleh digunakan untuk melengkapkan nilai output. Gunakan pengubah suai ini untuk menghalang pangkalan data MySQL daripada menyimpan nilai negatif.
Apabila mencipta, ikuti pernyataan medan integer atau titik terapung:
sifar
lalaiAtribut lalai memastikan bahawa Apabila tiada nilai tersedia, nilai pemalar ditetapkan Nilai ini mestilah pemalar kerana MySQL tidak membenarkan penyisipan nilai fungsi atau ekspresi. Selain itu, sifat ini tidak boleh digunakan dengan lajur BLOB atau TEXT. Jika atribut NULL telah ditentukan untuk lajur ini, nilai lalai akan menjadi NULL jika tiada nilai lalai ditentukan, jika tidak, nilai lalai akan bergantung pada jenis data medan.
Apabila mencipta, ikuti pernyataan medan integer atau titik terapung:
'nilai' lalai
bukan batal Jika a lajur ditakrifkan sebagai bukan nol, nilai nol tidak akan dibenarkan untuk dimasukkan ke dalam lajur. Adalah disyorkan untuk sentiasa menggunakan atribut bukan nol dalam situasi penting kerana ia menyediakan pengesahan asas bahawa semua nilai yang diperlukan telah dihantar kepada pertanyaan.
Apabila mencipta, ikuti pernyataan medan integer atau titik terapung:
bukan batal
null ditentukan untuk lajur Dengan atribut nol, lajur boleh kekal kosong tanpa mengira sama ada lajur lain dalam baris telah diisi. Ingat, null bermaksud "tiada" tepat, bukan rentetan kosong atau 0.
Cuma jangan isytiharkan tidak batal selepas pernyataan medan integer atau titik terapung semasa mencipta.