Apakah mysql mendukung tipe data json?

Untuk menggabungkan nilai JSON, MySQL mengabaikan nilai NULL dan mengonversi nilai Non-NULL menjadi tipe numerik. Fungsi MIN(), MAX(), dan GROUP_CONCAT() tidak memerlukan konversi numerik ini, namun fungsi agregasi lainnya akan selalu mengubah nilai menjadi numerik terlebih dahulu

Konversi nilai Non-NULL ke beberapa tipe JSON harus selalu menghasilkan hasil yang bermakna. Untuk mempertahankan ini, MySQL sering memotong nilai dan memungkinkan hilangnya presisi. Namun, jika konversinya bukan tipe JSON, maka tidak ada jaminan bahwa Anda akan mendapatkan hasil yang berarti

Apa Manfaat Koneksi MySQL JSON?

Anda dapat meningkatkan Manajemen Data menggunakan MySQL dengan menerapkan format JSON. JSON parse MySQL akan memberi Anda manfaat berikut

  • Validasi Dokumen. Koneksi MySQL JSON memastikan bahwa data Anda akan divalidasi secara otomatis. Ini karena kendala bahwa kolom JSON hanya menerima dokumen yang valid. Oleh karena itu, Anda tidak perlu khawatir melakukan validasi data secara manual setiap kali Anda memasukkan sesuatu yang baru.  
  • Performa Tinggi. Koneksi MySQL JSON dapat meningkatkan kinerja kueri Anda dalam hal kecepatan. Itu membuat indeks berdasarkan nilai di dalam kolom JSON. Fitur "indeks fungsional" melakukan tugas ini
  • Kenyamanan. JSON menawarkan sintaks sebaris untuk kolomnya. Ini membuatnya sangat mudah bagi Anda untuk mengintegrasikan kueri Dokumen menggunakan SQL dengan cara yang tidak merepotkan
  • Akses Efisien. Data yang Anda simpan di kolom JSON di MySQL, tidak pernah disimpan sebagai teks biasa. Sebagai gantinya, data JSON diubah menjadi format biner yang optimal untuk akses mudah dan cepat saat menggunakan larik dan objek

Apa Keterbatasan Koneksi MySQL JSON?

Menggunakan format JSON untuk MySQL dilengkapi dengan batasan berikut

  • Tanpa Skema. JSON tidak memiliki skema tetap yang memberi Anda fleksibilitas total untuk merepresentasikan Data Anda. Namun, kurangnya skema dapat menimbulkan masalah bagi pemula yang mungkin secara tidak sengaja menyisipkan data yang salah bentuk
  • Hanya Jenis Nomor Tunggal. JSON hanya beroperasi pada format floating-point presisi ganda IEEE-754. Ini menyiratkan bahwa Anda tidak dapat mendiversifikasi jenis nomor input Anda seperti bahasa pemrograman lainnya. Selain itu, JSON tidak menawarkan tipe data Tanggal tetap, sehingga pengembang terpaksa menggunakan string saat mereka perlu memasukkan tanggal
  • Tidak ada komentar. JSON tidak mengizinkan komentar, sehingga tidak memungkinkan untuk menambahkan anotasi ke bidang. Untuk mengatasinya Anda perlu menggunakan dokumentasi tambahan yang akan memakan waktu ekstra dan dapat menimbulkan kebingungan.  
  • Verbositas. JSON lebih siap daripada XML dalam hal pertukaran data. Namun seringkali kurang presisi dan untuk konversi yang lebih akurat, Anda harus mengandalkan teknik yang lebih efisien

Kesimpulan

Artikel tersebut memperkenalkan Anda ke MySQL & JSON beserta fitur-fitur pentingnya. Kemudian dibahas 3 langkah yang dapat digunakan untuk mengatur Koneksi JSON MySQL Anda dengan mudah. Selanjutnya, artikel tersebut menjelaskan beberapa operasi yang dapat Anda lakukan pada data JSON di MySQL. Artikel tersebut juga membahas manfaat dan batasan yang terkait dengan Koneksi MySQL JSON

Kunjungi Situs Web kami untuk Menjelajahi Hevo

Sekarang, untuk menjalankan kueri SQL atau melakukan Analisis Data pada data MySQL Anda, pertama-tama Anda harus mengekspor data ini ke Gudang Data. Ini akan mengharuskan Anda untuk mengkustomisasi skrip kompleks kode untuk mengembangkan proses ETL. Hevo Data dapat mengotomatiskan proses transfer data Anda, sehingga memungkinkan Anda untuk fokus pada aspek lain dari bisnis Anda seperti Analitik, Manajemen Pelanggan, dll. Platform ini memungkinkan Anda mentransfer data dari 100+ berbagai sumber seperti MySQL ke Gudang Data berbasis Cloud seperti Amazon Redshift, Snowflake, Google BigQuery, dll. Ini akan memberi Anda pengalaman tanpa kerumitan dan membuat kehidupan kerja Anda jauh lebih mudah

Ingin mencoba Hevo?

Itu tergantung pada panjang data JSON yang akan Anda simpan. Jika tidak terlalu lama Anda dapat menggunakan VARCHAR, tetapi dengan ini Anda memiliki batas 64K

Manual mengatakan. Panjangnya dapat ditentukan sebagai nilai dari 0 hingga 65.535. Panjang maksimum efektif VARCHAR tunduk pada ukuran baris maksimum (65.535 byte, yang dibagi di antara semua kolom) dan kumpulan karakter yang digunakan

Jadi jika Anda berharap memiliki objek besar, gunakan salah satu jenis TEXT

TEXT: 65,535 characters - 64 KB 
MEDIUMTEXT: 16,777,215 - 16 MB 
LONGTEXT: 4,294,967,295 characters - 4 GB 

Sejak MySQL 5. 7. 8 Anda dapat menggunakan tipe data JSON asli

Artikel saya “SQL vs NoSQL. The Differences” mencatat bahwa garis antara database SQL dan NoSQL menjadi semakin kabur, dengan masing-masing kubu mengadopsi fitur dari yang lain. MySQL5. 7+ database InnoDB dan PostgreSQL 9. 2+ keduanya secara langsung mendukung jenis dokumen JSON dalam satu bidang. Pada artikel ini, kita akan memeriksa MySQL 8. 0 implementasi JSON secara lebih rinci

Perhatikan bahwa basis data apa pun akan menerima dokumen JSON sebagai gumpalan string tunggal. Namun, MySQL dan PostgreSQL mendukung data JSON yang divalidasi dalam pasangan kunci/nilai nyata daripada string dasar

Hanya Karena Anda Dapat Menyimpan JSON…

… itu tidak mengikuti yang seharusnya

Normalisasi adalah teknik yang digunakan untuk mengoptimalkan struktur database. Aturan Bentuk Normal Pertama (1NF) mengatur bahwa setiap kolom harus memiliki satu nilai — yang jelas-jelas rusak dengan menyimpan dokumen JSON multi-nilai

Jika Anda memiliki persyaratan data relasional yang jelas, gunakan bidang nilai tunggal yang sesuai. JSON harus digunakan dengan hemat sebagai upaya terakhir. Bidang nilai JSON tidak dapat diindeks, jadi hindari menggunakannya pada kolom yang diperbarui atau dicari secara berkala. Selain itu, lebih sedikit aplikasi klien yang mendukung JSON dan teknologinya lebih baru, sehingga mungkin kurang stabil dibandingkan jenis lainnya

Yang mengatakan, ada kasus penggunaan JSON yang bagus untuk data yang jarang diisi atau atribut khusus

Buat Tabel Dengan Bidang JSON

Pertimbangkan toko yang menjual buku. Semua buku memiliki ID, ISBN, judul, penerbit, nomor halaman dan data relasional lainnya yang jelas. Misalkan Anda ingin menambahkan sejumlah tag kategori ke setiap buku. Anda bisa mencapai ini menggunakan SQL

  1. tabel tag yang menyimpan setiap nama tag dengan ID unik, dan
  2. tabel tagmap dengan ID buku pemetaan catatan banyak-ke-banyak untuk menandai ID

Ini akan berhasil, tetapi sulit dan memerlukan banyak upaya untuk fitur minor. Oleh karena itu, Anda dapat menentukan bidang tag JSON di tabel buku database MySQL Anda

CREATE TABLE `book` (
  `id` MEDIUMINT(8) UNSIGNED NOT NULL AUTO_INCREMENT,
  `title` VARCHAR(200) NOT NULL,
  `tags` JSON DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=INNODB;
_

Perhatikan bahwa kolom JSON tidak dapat memiliki nilai default, digunakan sebagai kunci utama, digunakan sebagai kunci asing, atau memiliki indeks. Anda dapat membuat indeks sekunder pada kolom virtual yang dibuat, tetapi akan lebih mudah dan praktis untuk mempertahankan nilai dalam bidang terpisah jika diperlukan indeks

Menambahkan Data JSON

Seluruh dokumen JSON dapat diteruskan dalam pernyataan INSERT atau UPDATE. Misalnya, tag buku kami dapat diteruskan sebagai larik (di dalam string)

INSERT INTO `book` (`title`, `tags`)
VALUES (
  'ECMAScript 2015: A SitePoint Anthology',
  '["JavaScript", "ES2015", "JSON"]'
);

JSON juga dapat dibuat dengan ini

  • , yang membuat array. Sebagai contoh

    -- returns [1, 2, "abc"]:
    SELECT JSON_ARRAY(1, 2, 'abc');
    
  • , yang membuat objek. Sebagai contoh

    -- returns {"a": 1, "b": 2}:
    SELECT JSON_OBJECT('a', 1, 'b', 2);
    
    _
  • , yang mengutip string sebagai nilai JSON. Sebagai contoh

    -- returns "[1, 2, \"abc\"]":
    SELECT JSON_QUOTE('[1, 2, "abc"]');
    
  • atau Anda dapat

    INSERT INTO `book` (`title`, `tags`)
    VALUES (
      'ECMAScript 2015: A SitePoint Anthology',
      '["JavaScript", "ES2015", "JSON"]'
    );
    
    _5

Memungkinkan Anda untuk memeriksa jenis nilai JSON. Itu harus mengembalikan OBJECT, ARRAY, tipe skalar (INTEGER, BOOLEAN, dll), NULL, atau kesalahan. Sebagai contoh

-- returns ARRAY:
SELECT JSON_TYPE('[1, 2, "abc"]');

-- returns OBJECT:
SELECT JSON_TYPE('{"a": 1, "b": 2}');

-- returns an error:
SELECT JSON_TYPE('{"a": 1, "b": 2');

Mengembalikan 1 jika JSON valid atau 0 sebaliknya

-- returns 1:
SELECT JSON_TYPE('[1, 2, "abc"]');

-- returns 1:
SELECT JSON_TYPE('{"a": 1, "b": 2}');

-- returns 0:
SELECT JSON_TYPE('{"a": 1, "b": 2');
_

Mencoba memasukkan dokumen JSON yang tidak valid akan menimbulkan kesalahan dan seluruh catatan tidak akan dimasukkan/diperbarui

Mencari Data JSON

Menerima dokumen JSON yang sedang dicari dan yang lain untuk dibandingkan. Ini mengembalikan 1 ketika kecocokan ditemukan. Sebagai contoh

-- all books with the 'JavaScript' tag:
SELECT * FROM `book` WHERE JSON_CONTAINS(tags, '["JavaScript"]');
_

Hal serupa mengembalikan jalur ke kecocokan yang diberikan atau NULL saat tidak ada kecocokan. Itu melewati dokumen JSON yang sedang dicari,

INSERT INTO `book` (`title`, `tags`)
VALUES (
  'ECMAScript 2015: A SitePoint Anthology',
  '["JavaScript", "ES2015", "JSON"]'
);
6 untuk menemukan kecocokan pertama, atau
INSERT INTO `book` (`title`, `tags`)
VALUES (
  'ECMAScript 2015: A SitePoint Anthology',
  '["JavaScript", "ES2015", "JSON"]'
);
7 untuk menemukan semua kecocokan, dan string pencarian (di mana
INSERT INTO `book` (`title`, `tags`)
VALUES (
  'ECMAScript 2015: A SitePoint Anthology',
  '["JavaScript", "ES2015", "JSON"]'
);
8 cocok dengan sejumlah karakter dan
INSERT INTO `book` (`title`, `tags`)
VALUES (
  'ECMAScript 2015: A SitePoint Anthology',
  '["JavaScript", "ES2015", "JSON"]'
);
9 cocok dengan satu karakter dengan cara yang identik ke ). Sebagai contoh

-- all books with tags starting 'Java':
SELECT * FROM `book` WHERE JSON_SEARCH(tags, 'one', 'Java%') IS NOT NULL;

Jalur JSON

Jalur JSON menargetkan nilai dan dapat digunakan untuk mengekstrak atau memodifikasi bagian dokumen JSON. Ini menunjukkan ini dengan mengekstraksi satu atau lebih nilai

-- returns "SitePoint":
SELECT JSON_EXTRACT('{"id": 1, "website": "SitePoint"}', '$.website');

Semua definisi jalur dimulai dengan

-- returns [1, 2, "abc"]:
SELECT JSON_ARRAY(1, 2, 'abc');
_1 diikuti oleh penyeleksi lainnya

  • titik diikuti dengan nama, seperti
    -- returns [1, 2, "abc"]:
    SELECT JSON_ARRAY(1, 2, 'abc');
    
    2
  • -- returns [1, 2, "abc"]:
    SELECT JSON_ARRAY(1, 2, 'abc');
    
    3 di mana N adalah posisi dalam array yang diindeks nol
  • wildcard
    -- returns [1, 2, "abc"]:
    SELECT JSON_ARRAY(1, 2, 'abc');
    
    4 mengevaluasi semua anggota objek
  • wildcard
    -- returns [1, 2, "abc"]:
    SELECT JSON_ARRAY(1, 2, 'abc');
    
    5 mengevaluasi semua anggota array
  • wildcard
    -- returns [1, 2, "abc"]:
    SELECT JSON_ARRAY(1, 2, 'abc');
    
    6 mengevaluasi semua jalur yang dimulai dengan awalan bernama dan diakhiri dengan akhiran bernama

Contoh berikut mengacu pada dokumen JSON berikut

INSERT INTO `book` (`title`, `tags`)
VALUES (
  'ECMAScript 2015: A SitePoint Anthology',
  '["JavaScript", "ES2015", "JSON"]'
);
0

Contoh jalur

  • -- returns [1, 2, "abc"]:
    SELECT JSON_ARRAY(1, 2, 'abc');
    
    7 mengembalikan
    -- returns [1, 2, "abc"]:
    SELECT JSON_ARRAY(1, 2, 'abc');
    
    8
  • -- returns [1, 2, "abc"]:
    SELECT JSON_ARRAY(1, 2, 'abc');
    
    9 mengembalikan
    -- returns {"a": 1, "b": 2}:
    SELECT JSON_OBJECT('a', 1, 'b', 2);
    
    0
  • -- returns {"a": 1, "b": 2}:
    SELECT JSON_OBJECT('a', 1, 'b', 2);
    
    1 mengembalikan
    -- returns {"a": 1, "b": 2}:
    SELECT JSON_OBJECT('a', 1, 'b', 2);
    
    2
  • -- returns {"a": 1, "b": 2}:
    SELECT JSON_OBJECT('a', 1, 'b', 2);
    
    _3 mengembalikan
    -- returns {"a": 1, "b": 2}:
    SELECT JSON_OBJECT('a', 1, 'b', 2);
    
    4
  • -- returns {"a": 1, "b": 2}:
    SELECT JSON_OBJECT('a', 1, 'b', 2);
    
    _5 mengembalikan
    -- returns {"a": 1, "b": 2}:
    SELECT JSON_OBJECT('a', 1, 'b', 2);
    
    6

Mengekstrak Jalur JSON dalam Kueri

Anda dapat mengekstrak nama dan tag pertama dari tabel buku Anda menggunakan kueri

INSERT INTO `book` (`title`, `tags`)
VALUES (
  'ECMAScript 2015: A SitePoint Anthology',
  '["JavaScript", "ES2015", "JSON"]'
);
1

Untuk contoh yang lebih kompleks, misalkan Anda memiliki tabel pengguna dengan data profil JSON. Sebagai contoh

idnameprofile1Craig{ “email”. [“craig@email1. com”, “craig@email2. com”], “twitter”. “@craigbuckler” }2SitePoint{ “email”. [], "Indonesia". “@sitepointdotcom” }

Anda dapat mengekstrak nama Twitter menggunakan jalur JSON. Sebagai contoh

INSERT INTO `book` (`title`, `tags`)
VALUES (
  'ECMAScript 2015: A SitePoint Anthology',
  '["JavaScript", "ES2015", "JSON"]'
);
2

Anda dapat menggunakan jalur JSON di klausa WHERE untuk hanya mengembalikan pengguna dengan akun Twitter

INSERT INTO `book` (`title`, `tags`)
VALUES (
  'ECMAScript 2015: A SitePoint Anthology',
  '["JavaScript", "ES2015", "JSON"]'
);
_3

Memodifikasi Bagian dari Dokumen JSON

Ada beberapa fungsi MySQL untuk memodifikasi bagian dari dokumen JSON menggunakan notasi jalur. Ini termasuk

  • -- returns {"a": 1, "b": 2}:
    SELECT JSON_OBJECT('a', 1, 'b', 2);
    
    _7. menyisipkan atau memperbarui data dalam dokumen
  • -- returns {"a": 1, "b": 2}:
    SELECT JSON_OBJECT('a', 1, 'b', 2);
    
    _8. memasukkan data ke dalam dokumen
  • -- returns {"a": 1, "b": 2}:
    SELECT JSON_OBJECT('a', 1, 'b', 2);
    
    _9. menggantikan data dalam dokumen
  • -- returns "[1, 2, \"abc\"]":
    SELECT JSON_QUOTE('[1, 2, "abc"]');
    
    0. menggabungkan dua atau lebih dokumen
  • -- returns "[1, 2, \"abc\"]":
    SELECT JSON_QUOTE('[1, 2, "abc"]');
    
    1. menambahkan nilai ke akhir array
  • -- returns "[1, 2, \"abc\"]":
    SELECT JSON_QUOTE('[1, 2, "abc"]');
    
    2. menyisipkan array di dalam dokumen
  • -- returns "[1, 2, \"abc\"]":
    SELECT JSON_QUOTE('[1, 2, "abc"]');
    
    _3. menghapus data dari dokumen

Karena itu Anda dapat menambahkan tag "teknis" ke buku mana pun yang sudah memiliki tag "JavaScript".

INSERT INTO `book` (`title`, `tags`)
VALUES (
  'ECMAScript 2015: A SitePoint Anthology',
  '["JavaScript", "ES2015", "JSON"]'
);
_4

Informasi lebih lanjut

Manual MySQL memberikan informasi lebih lanjut tentang tipe data JSON dan fungsi JSON terkait

Sekali lagi, saya mendorong Anda untuk tidak menggunakan JSON kecuali benar-benar diperlukan. Anda bisa meniru seluruh database NoSQL yang berorientasi dokumen di MySQL, tetapi itu akan meniadakan banyak manfaat SQL, dan Anda juga dapat beralih ke sistem NoSQL yang sebenarnya. Yang mengatakan, tipe data JSON mungkin menghemat upaya untuk persyaratan data yang lebih tidak jelas dalam aplikasi SQL

Bagikan Artikel Ini

Craig Buckler

Craig adalah konsultan web lepas Inggris yang membangun halaman pertamanya untuk IE2. 0 pada tahun 1995. Sejak saat itu dia menganjurkan standar, aksesibilitas, dan praktik terbaik teknik HTML5. Dia membuat spesifikasi perusahaan, situs web, dan aplikasi online untuk perusahaan dan organisasi termasuk Parlemen Inggris, Parlemen Eropa, Departemen Energi & Perubahan Iklim, Microsoft, dan banyak lagi. Dia telah menulis lebih dari 1.000 artikel untuk SitePoint dan Anda dapat menemukannya di @craigbuckler

Bisakah kita memasukkan JSON di MySQL?

Perhatikan bahwa basis data apa pun akan menerima dokumen JSON sebagai blob string tunggal. Namun, MySQL dan PostgreSQL mendukung data JSON yang divalidasi dalam pasangan kunci/nilai nyata, bukan string dasar .

Versi MySQL mana yang mendukung JSON?

MySQL menyediakan dukungan untuk tipe data JSON asli dari versi 5. 7. 8 yang menyimpan dokumen JSON dalam format internal, yang memungkinkan akses baca yang cepat dan efisien ke objek dokumen.

Bagaimana cara mendapatkan data JSON di MySQL?

Cara mengambil data dari kolom JSON di MySQL. MySQL menyediakan dua operator ( -> dan ->> ) untuk mengekstrak data dari kolom JSON . ->> akan mendapatkan nilai string sementara -> akan mengambil nilai tanpa tanda kutip. Seperti yang Anda lihat ->> mengembalikan output sebagai string yang dikutip, sementara -> mengembalikan nilai sebagaimana adanya.

Bagaimana cara membuat tipe data JSON di MySQL?

Alternatifnya, Anda bisa menggunakan fungsi JSON_OBJECT bawaan untuk membuat objek JSON. Fungsi JSON_OBJECT menerima daftar pasangan kunci/nilai dalam bentuk JSON_OBJECT(key1, value1, key2, value2,. key(n), value(n)) dan mengembalikan objek JSON

Kapan menggunakan tipe data JSON MySQL?

MySQL mendukung tipe data JSON asli sejak versi 5. 7. 8. Tipe data JSON asli memungkinkan Anda menyimpan dokumen JSON lebih efisien daripada format teks JSON di versi sebelumnya . MySQL menyimpan dokumen JSON dalam format internal yang memungkinkan akses baca cepat ke elemen dokumen.

Bisakah Anda meminta JSON di MySQL?

MySQL mendukung tipe data JSON asli yang mendukung validasi otomatis dan penyimpanan yang dioptimalkan serta akses dokumen JSON . Meskipun data JSON sebaiknya disimpan dalam database NoSQL seperti MongoDB, Anda mungkin masih menemukan tabel dengan data JSON dari waktu ke waktu.