Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Pengantar tipe data MySQL


Pengantar

Salah satu fitur utama dari database relasional secara umum adalah kemampuan untuk mendefinisikan skema atau struktur tabel yang secara tepat menentukan format data yang akan dikandungnya. Ini dilakukan dengan menentukan kolom yang berisi struktur ini bersama dengan tipe data their dan batasan apa pun.

Tipe data menentukan pola umum untuk data yang mereka terima dan simpan. Nilai harus mematuhi persyaratan yang digariskan agar dapat diterima oleh MySQL. Meskipun dimungkinkan untuk menentukan persyaratan khusus, tipe data menyediakan blok bangunan dasar yang memungkinkan MySQL untuk memvalidasi input dan bekerja dengan data menggunakan operasi yang sesuai.

MySQL mencakup berbagai tipe data yang digunakan untuk memberi label dan memvalidasi nilai yang sesuai dengan tipe yang sesuai. Dalam panduan ini, kita akan membahas tipe data paling umum yang tersedia di MySQL, berbagai format input dan output yang mereka gunakan, dan cara mengonfigurasi berbagai bidang untuk memenuhi kebutuhan aplikasi Anda.


Apa saja tipe data di MySQL?

Sebelum masuk ke detail, mari kita lihat secara luas tipe data apa yang disediakan MySQL.

MySQL mendukung berbagai jenis data yang sesuai untuk berbagai jenis data sederhana dan kompleks. Ini termasuk:

  • TINYINT
  • SMALLINT
  • MEDIUMINT
  • INT
  • BIGINT
  • DECIMAL
  • NUMERIC
  • FLOAT
  • DOUBLE
  • BIT
  • DATE
  • DATETIME
  • TIMESTAMP
  • TIME
  • YEAR
  • CHAR
  • VARCHAR
  • BINARY
  • VARBINARY
  • BLOB
  • TEXT
  • ENUM
  • SET
  • GEOMETRY
  • POINT
  • LINESTRING
  • POLYGON
  • MULTIPOINT
  • MULTILINESTRING
  • MULTIPOLYGON
  • GEOMETRYCOLLECTION
  • JSON

Kami akan membahas yang paling umum dari ini secara lebih mendalam di seluruh panduan ini.



Memulai tipe data MySQL

Saat Anda memulai dengan tipe, penting untuk diingat bahwa tipe saja tidak selalu merupakan solusi lengkap untuk validasi data, tetapi sebuah komponen. Alat database lainnya, seperti kendala juga memiliki peran dalam menentukan kebenaran. Namun, tipe data sering kali menjadi garis pertahanan pertama terhadap data yang tidak valid.

Untuk banyak kasus, tipe umum yang disediakan oleh MySQL sesuai untuk jenis data yang akan Anda simpan. Misalnya, sementara Anda dapat menyimpan koordinat titik geometris dalam dua kolom angka yang berbeda, point yang disediakan type adalah tujuan yang dibangun untuk menyimpan dan memvalidasi persis jenis informasi ini. Saat memilih jenis, periksa untuk melihat apakah Anda menggunakan jenis paling spesifik yang berlaku untuk kasus penggunaan Anda.




Angka dan nilai numerik

MySQL mencakup berbagai tipe data numerik yang cocok untuk skenario yang berbeda. Jenis yang sesuai bergantung pada sifat pasti dari nilai yang Anda rencanakan untuk disimpan serta persyaratan presisi Anda.


Bilangan bulat

bilangan bulat tipe data adalah kategori tipe yang digunakan untuk menyimpan angka tanpa pecahan atau desimal. Ini dapat berupa nilai positif atau negatif, dan tipe bilangan bulat yang berbeda dapat menyimpan rentang angka yang berbeda. Jenis bilangan bulat dengan rentang nilai yang dapat diterima lebih kecil membutuhkan lebih sedikit ruang daripada jenis dengan rentang yang lebih luas.

Daftar dasar tipe integer meliputi:

Jenis bilangan bulat Panjang Rentang bertanda tangan yang berlaku Rentang tidak bertanda tangan yang berlaku
TINYINT 1 byte -128 hingga 127 0 hingga 255
SMALLINT 2 byte -32768 hingga 32767 0 hingga 65535
MEDIUMINT 3 byte -8388608 hingga 8388607 0 hingga 16777215
INT 4 byte -2147483648 hingga 2147483647 0 hingga 4294967295
BIGINT 8 byte -2^63 hingga -2^63-1 0 hingga 2^64-1

Jenis di atas dibatasi oleh rentang validnya. Nilai apa pun di luar rentang akan menghasilkan kesalahan.

Selain tipe yang disebutkan di atas, MySQL juga mengenali alias yang disebut SERIAL . Menandai kolom sebagai SERIAL akan memberikan properti ini:BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE . Ini digunakan sebagai singkatan untuk properti kolom kunci utama umum. Kolom akan secara otomatis menetapkan nilai unik baru setiap kali catatan ditambahkan.



Titik tetap

Jenis titik tetap digunakan untuk mengontrol jumlah presisi atau spesifisitas mungkin untuk nomor dengan desimal. Di MySQL, ini dapat dikontrol dengan memanipulasi dua faktor:presisi dan skala.

Presisi adalah jumlah maksimum total digit yang dapat dimiliki suatu bilangan. Sebaliknya, skala adalah jumlah digit di sebelah kanan titik desimal. Dengan memanipulasi angka-angka ini, Anda dapat mengontrol seberapa besar komponen pecahan dan non-fraksional dari suatu angka yang diizinkan.

Kedua argumen ini digunakan untuk mengontrol presisi arbitrer menggunakan numeric atau decimal tipe data (kedua tipe ini identik di MySQL). numeric type membutuhkan nol hingga dua argumen.

Tanpa argumen, kolom didefinisikan memiliki presisi 10 dan skala 0. Ini berarti kolom dapat menampung hingga 10 digit, tetapi tidak satu pun dari angka ini yang dapat berada setelah titik desimal:

NUMERIC

Ketika satu argumen diberikan, itu ditafsirkan sebagai ketepatan kolom dengan skala yang disetel ke 0. Ini secara efektif memungkinkan Anda untuk menentukan jumlah digit maksimum dalam bilangan seperti bilangan bulat (tanpa komponen pecahan atau desimal). Misalnya, jika Anda membutuhkan 5 digit bilangan bulat, Anda dapat menentukan:

NUMERIC(5)

Tentukan presisi diikuti dengan skala saat mengonfigurasi kolom menggunakan kedua kontrol. MySQL akan membulatkan komponen desimal dari input apa pun ke jumlah digit yang benar menggunakan nomor skala. MySQL akan menggunakan presisi dan skala untuk menentukan berapa banyak digit yang diperbolehkan di sisi kiri titik desimal. Jika entri melebihi jumlah digit yang diizinkan, MySQL akan menghasilkan kesalahan.

Misalnya, kita dapat menentukan kolom dengan presisi total 5 dan skala 2:

NUMERIC(5, 2)

Kolom ini akan memiliki perilaku berikut:

Nilai masukan Nilai yang dibulatkan Diterima (sesuai presisi)?
400.28080 400.28 Ya
8.332799 8,33 Ya
11799.799 11799.80 Tidak
11799 11799 Tidak
2802.27 2802.27 Tidak


Titik mengambang

Angka floating point adalah cara lain untuk mengekspresikan angka desimal, tetapi tanpa presisi yang tepat dan konsisten. Sebaliknya, tipe floating point hanya memiliki konsep presisi maksimum yang sering dikaitkan dengan arsitektur dan platform perangkat keras.

Misalnya, untuk membatasi kolom floating point hingga 8 digit presisi, Anda dapat menggunakan FLOAT type, yang menyimpan hasil menggunakan 4 byte dengan presisi mulai dari 0 hingga 23 digit:

FLOAT(8)

Demikian pula, DOUBLE type menggunakan 8 byte untuk menyimpan data dan dapat menggunakan presisi 24 hingga 53 digit.

Karena pilihan desain ini, bilangan floating point dapat bekerja dengan bilangan dengan jumlah desimal yang besar secara efisien, tetapi tidak selalu tepat. Representasi internal angka dapat menyebabkan sedikit perbedaan antara input dan output. Hal ini dapat menyebabkan perilaku tak terduga saat membandingkan nilai, mengerjakan matematika floating point, atau melakukan operasi yang memerlukan nilai eksak.



Titik mengambang vs numerik

Kedua angka floating point disediakan oleh tipe seperti FLOAT dan DOUBLE dan nomor titik tetap yang disediakan oleh NUMERIC atau DECIMAL jenis dapat digunakan untuk menyimpan nilai desimal. Bagaimana Anda tahu mana yang harus digunakan?

Aturan umumnya adalah jika Anda membutuhkan ketelitian dalam perhitungan Anda, NUMERIC jenis selalu merupakan pilihan yang lebih baik. NUMERIC type akan menyimpan nilai persis seperti yang disediakan, yang berarti bahwa hasilnya sepenuhnya dapat diprediksi saat mengambil atau menghitung nilai. NUMERIC tipe disebut presisi arbitrer karena Anda menentukan jumlah presisi yang dibutuhkan tipe dan itu akan menyimpan jumlah digit yang tepat di bidang.

Sebaliknya, jenis seperti FLOAT dan DOUBLE adalah tipe presisi variabel. Jumlah presisi yang mereka pertahankan tergantung pada nilai input. Ketika mereka mencapai akhir tingkat presisi yang diizinkan, mereka mungkin membulatkan digit yang tersisa, yang mengarah ke perbedaan antara nilai yang dikirimkan dan yang diambil.

Jadi kapan Anda akan menggunakan tipe presisi variabel? Jenis presisi variabel seperti FLOAT dan DOUBLE sangat cocok untuk skenario di mana nilai pasti tidak diperlukan (misalnya, jika mereka akan dibulatkan) dan ketika kecepatan sangat berharga. Presisi variabel umumnya akan menawarkan manfaat kinerja dibandingkan NUMERIC ketik.




Jenis string

Tipe karakter dan tipe string MySQL dapat ditempatkan ke dalam dua kategori:panjang tetap dan panjang variabel . Pilihan di antara keduanya memengaruhi cara MySQL mengalokasikan ruang untuk setiap nilai dan cara memvalidasi input.

Tipe data berbasis karakter yang paling sederhana dalam MySQL adalah char Tipe. Tanpa argumen, char type menerima satu karakter sebagai input:

CHAR

Ketika bilangan bulat positif diberikan dalam deklarasi, char kolom akan menyimpan string karakter dengan panjang tetap sama dengan jumlah karakter yang ditentukan:

CHAR(10)

Jika string diberikan dengan karakter yang lebih sedikit, spasi kosong akan ditambahkan untuk mengisi panjangnya:

Masukan # karakter masukan Nilai yang disimpan # karakter yang disimpan
'pohon' 4 'pohon      ' 10

Jika string diberikan dengan jumlah karakter yang lebih besar dari yang diizinkan, MySQL akan memunculkan kesalahan. Sebagai pengecualian untuk aturan ini, jika karakter yang meluap adalah semua spasi, MySQL hanya akan memotong spasi berlebih agar sesuai dengan bidang.

Alternatif untuk bidang karakter panjang tetap adalah bidang panjang variabel. Untuk ini, MySQL menyediakan varchar Tipe. varchar type menyimpan karakter tanpa ukuran tetap. Tidak seperti char , varchar tidak dapat digunakan tanpa menentukan jumlah maksimum karakter yang akan disimpan.

Dengan mendefinisikan varchar dengan bilangan bulat positif, Anda dapat mengatur panjang string maksimum:

VARCHAR(10)

Ini berbeda dengan menggunakan char ketik dengan integer di varchar tidak akan mengisi nilai jika input tidak memenuhi panjang bidang maksimum:

Masukan # karakter masukan Nilai yang disimpan # karakter yang disimpan
'pohon' 4 'pohon' 4

Jika string lebih besar dari panjang maksimum, MySQL akan melempar kesalahan. Perilaku pemotongan yang sama yang ada di char kolom terjadi di sini:jika karakter yang meluap adalah spasi, karakter tersebut akan dipotong agar sesuai dengan panjang karakter maksimum.

MySQL juga mendukung binary dan varbinary tipe data. Ini beroperasi dengan cara yang mirip dengan char dan varchar jenis, tetapi menyimpan string biner daripada string karakter. Ini berimplikasi pada bagaimana mereka disimpan dan dioperasikan (untuk hal-hal seperti perbandingan, penyortiran, dll.).

Untuk binary dan varbinary jenis, bilangan bulat yang diberikan saat mendefinisikan jenis kolom mewakili jumlah byte, bukan jumlah karakter.

Dua tipe data lain yang disediakan MySQL untuk penyimpanan string dan karakter adalah blob dan text . Jenis ini beroperasi mirip dengan varchar dan varbinary jenis masing-masing dan dimaksudkan untuk menyimpan benda-benda besar. Mereka beroperasi sebagian besar sama dengan rekan-rekan mereka, tetapi memiliki beberapa perbedaan seperti tidak dapat memiliki nilai default dan membutuhkan panjang awalan saat membuat indeks.



Booleans

MySQL sebenarnya tidak memiliki tipe boolean asli untuk mewakili nilai benar dan salah.

MySQL mengenali tipe BOOL atau BOOLEAN dalam upaya untuk kompatibilitas dengan sistem database lainnya. Namun, implementasi internalnya menggunakan TINYINT(1) kolom untuk menyimpan nilai dan menafsirkannya sebagai benar atau salah berdasarkan seperangkat aturan.

Saat menafsirkan nilai numerik dalam konteks boolean, nilai 0 dianggap palsu. Semua nilai bukan nol dianggap benar.

MySQL mengenali literal boolean TRUE dan FALSE dan mengonversi TRUE ke 1 dan FALSE ke 0 saat menyimpannya.



Tanggal dan waktu

MySQL memiliki dukungan untuk merepresentasikan tanggal, waktu, dan kombinasi keduanya.


Tanggal

date type dapat menyimpan tanggal tanpa nilai waktu yang terkait:

DATE

Saat memproses input untuk date kolom, MySQL dapat menafsirkan format yang berbeda untuk menentukan tanggal yang benar untuk menyimpan. Namun, bagian-bagian komponen harus selalu datang dalam urutan yang sama:tahun, bulan, dan kemudian hari. STR_TO_DATE() fungsi tersedia untuk membantu mengonversi format tanggal lain ke format yang akan ditafsirkan oleh MySQL dengan benar.

Saat menampilkan tanggal, MySQL menggunakan YYYY-MM-DD format. Anda dapat menggunakan DATE_FORMAT() berfungsi untuk memformat output dalam format lain.

date type dapat menyimpan nilai mulai dari 1000-01-01 ke 9999-12-31 .



Waktu

time tipe data dapat menyimpan waktu tertentu dalam sehari tanpa zona waktu atau tanggal yang terkait.

Saat memproses input untuk time kolom, MySQL dapat menafsirkan berbagai format untuk menentukan waktu yang tepat untuk menyimpan. Ketika input memiliki titik dua, biasanya diartikan sebagai hh:mm:ss . Setiap nilai yang dipersingkat (hanya menggunakan satu kolom) akan ditafsirkan menggunakan hh:mm . Ketika input tidak memiliki titik dua, waktu diproses untuk mengisi nilai terkecil terlebih dahulu. Misalnya, 1045 diambil sebagai 10 menit dan 45 detik.

MySQL juga mendukung pecahan detik jika titik desimal diberikan. Ini menyimpan hingga 6 digit presisi setelah desimal. Nilai dalam time kolom dapat berkisar dari -838:59:59.000000 ke 838:59:59.000000 .

Saat menampilkan nilai waktu, MySQL menggunakan hh:mm:ss format. Seperti halnya tanggal, sebuah fungsi disediakan, yang disebut TIME_FORMAT() untuk menampilkan nilai waktu menggunakan format lain.




Stempel waktu dan waktu tanggal

MySQL dapat mewakili stempel waktu, kombinasi tanggal dan waktu yang digunakan untuk mewakili momen waktu tertentu, dalam dua variasi berbeda:menggunakan timestamp ketik dan datetime ketik.

datetime type dapat mewakili nilai dari 1000-01-01 00:00:00 ke 9999-12-31 23:59:59 . Ini juga dapat mencakup pecahan detik hingga enam digit yang mirip dengan time ketik.

timestamp type dapat mewakili nilai dari 1970-01-01 00:00:01 UTC ke 2038-01-19 03:14:07 UTC. Itu dapat menangani detik pecahan juga. Saat menyimpan timestamp nilai, semua nilai dikonversi dari zona waktu yang diberikan ke UTC untuk penyimpanan dan dikonversi kembali ke zona waktu lokal pada pengambilan. datetime ketik tidak melakukan ini.

Mulai MySQL 8.0.19 dan seterusnya, Anda dapat menyertakan offset zona waktu saat menyimpan timestamp untuk secara eksplisit mengatur zona waktu untuk nilai yang disimpan. Anda melakukan ini dengan memasukkan nilai setelah komponen waktu, tanpa spasi untuk menunjukkan offset. Rentang nilai yang diterima dimulai dari -14:00 ke +14:00 , yang mewakili offset dari nilai yang disimpan dari UTC.

Saat memutuskan apakah akan menyimpan nilai tanggal dan waktu menggunakan datetime atau timezone jenis, sering kali membantu untuk memisahkan mereka berdasarkan apa yang terbaik untuk mereka.

Pikirkan datetime nilai sebagai tanggal dan waktu tertentu, dalam kaitannya dengan kalender dan jam di mana pun itu diambil. Jika seseorang pergi tidur pada jam 11 malam, sebuah datetime nilai dapat mewakili nilai tersebut, terlepas dari zona waktu orang tersebut saat ini.

Sebaliknya, timezone nilai terbaik dalam mewakili momen tertentu dalam waktu yang tidak ambigu di seluruh zona waktu. Untuk mengirim undangan panggilan video, timezone value akan dapat memastikan rapat terjadi pada waktu yang sama untuk semua orang, terlepas dari zona waktu peserta.



Jenis berguna lainnya

Seiring dengan jenis yang kami bahas dengan beberapa kedalaman di atas, ada jenis tambahan yang berguna dalam skenario tertentu. Kami akan membahasnya secara singkat untuk memberi Anda gambaran tentang cara menggunakannya dan kapan mereka dapat berguna.


Enumerated dan set types

Dua jenis terkait yang memungkinkan pengguna untuk menentukan nilai yang valid untuk kolom adalah enum dan set jenis.

enum type adalah tipe string yang memungkinkan pengguna untuk menentukan kumpulan nilai yang valid saat kolom dibuat. Nilai apa pun yang cocok dengan salah satu nilai yang ditentukan akan diterima dan semua nilai lainnya ditolak. Fungsi ini mirip dengan menu tarik-turun di mana pilihan dapat dibuat dari serangkaian opsi tertentu. Misalnya, sebuah enum disebut season dapat dibuat dengan nilai winter , spring , summer , dan autumn .

Untuk membuat enum kolom, tentukan jenisnya sebagai enum , memberikan nilai yang mungkin sebagai string, dipisahkan dengan koma, di dalam kumpulan tanda kurung, seperti ini:

season ENUM('winter', 'spring', 'summer', 'autumn')

Jenis serupa dari jenis yang ditentukan pengguna adalah set Tipe. Seperti enum ketik, set jenis memungkinkan pengguna untuk menentukan nilai yang valid sebagai string pada definisi. Perbedaan antara kedua jenis ini adalah dalam set , lebih dari satu nilai dapat disimpan untuk setiap record.

Misalnya, jika Anda memerlukan kolom untuk mewakili hari dalam seminggu sukarelawan tersedia untuk bekerja, Anda dapat memiliki set kolom seperti ini:

availability SET('sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday')

Saat memasukkan nilai untuk availability kolom yang baru saja kami buat, Anda memberikan satu string dengan koma yang memisahkan semua hari sukarelawan tersedia. Misalnya:

'monday,tuesday,wednesday,thursday,friday''sunday,saturday''monday,wednesday,friday''thursday'

Untuk set jenis di MySQL, nilai duplikat dalam input selalu dihapus dan setelah pengambilan, nilai mengikuti urutan yang digunakan dalam set definisi terlepas dari urutannya saat dimasukkan ke dalam kolom.



JSON

MySQL mendukung kolom di JSON menggunakan json Tipe. Data disimpan sebagai json disimpan dalam biner untuk eksekusi dan pemrosesan yang lebih cepat sehingga server tidak perlu menafsirkan string untuk beroperasi pada JSON nilai.

JSON

Untuk beroperasi pada JSON kolom, MySQL menyediakan sejumlah fungsi untuk bekerja dengan nilai dalam dokumen.




Kesimpulan

Pada artikel ini, kita telah membahas banyak tipe data paling umum yang berguna saat bekerja dengan database MySQL. Ada jenis tambahan yang tidak tercakup dalam panduan ini yang berguna untuk diketahui, tetapi ini merupakan titik awal yang baik untuk sebagian besar kasus penggunaan.

Penting untuk menggunakan sistem tipe dengan tepat sehingga Anda dapat mengontrol nilai yang valid dan mengoperasikan data seperti yang diharapkan. Ada jebakan yang dapat Anda hadapi jika memilih jenis yang tidak cocok untuk data Anda, jadi mempertimbangkannya sebelum Anda berkomitmen pada jenis data bermanfaat dalam banyak kasus.

Jika Anda menggunakan Prisma Client untuk bekerja dengan database MySQL Anda, Anda dapat menemukan pemetaan antara beberapa jenis MySQL dan Prisma yang umum di dokumen konektor data MySQL Prisma.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara mendapatkan jumlah baris di tabel MySQL menggunakan PHP?

  2. Cara Memisahkan String di MySQL

  3. Cara Menginstal Database MariaDB di Debian 10

  4. Langkah-langkah untuk Menginstal MySQL8 di CentOS

  5. kesalahan runtime:java.lang.ClassNotFoundException:com.mysql.jdbc.Driver