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

JSON_UNQUOTE() – Hapus Kutipan dari Dokumen JSON di MySQL

Di MySQL, JSON_UNQUOTE() fungsi “menghapus tanda kutip” dokumen JSON dan mengembalikan hasilnya sebagai utf8mb4 string.

Anda memberikan dokumen JSON sebagai argumen, dan fungsi akan melakukan sisanya.

Sintaks

Sintaksnya seperti ini:

JSON_UNQUOTE(json_val)

Dimana json_val adalah dokumen JSON yang ingin Anda tanda kutip.

Contoh

Berikut ini contoh untuk didemonstrasikan.

SET @data = '"Homer Simpson"';
SELECT 
  @data Original, 
  JSON_UNQUOTE(@data) Unquoted;

Hasil:

+-----------------+---------------+
| Original        | Unquoted      |
+-----------------+---------------+
| "Homer Simpson" | Homer Simpson |
+-----------------+---------------+

Karakter Kabur

Cara fungsi ini menangani karakter escape tergantung pada apakah NO_BACKSLASH_ESCAPES diaktifkan atau dinonaktifkan.

Saat NO_BACKSLASH_ESCAPES Dinonaktifkan

 NO_BACKSLASH_ESCAPES mode dinonaktifkan secara default di MySQL 8.0.

Inilah yang terjadi jika kami menyertakan \t untuk menentukan karakter tab dalam string saat NO_BACKSLASH_ESCAPES dinonaktifkan, dan tanpa menggunakan JSON_UNQUOTE() .

SET @data = '"Homer \t Simpson"';
SELECT 
  @data Original;

Hasil:

+-------------------+
| Original          |
+-------------------+
| "Homer 	 Simpson" |
+-------------------+

Dan inilah yang terjadi jika kita menggunakan JSON_UNQUOTE() :

SET @data = '"Homer \t Simpson"';
SELECT JSON_UNQUOTE(@data) Unquoted;

Hasil:

ERROR 3141 (22032): Invalid JSON text in argument 1 to function json_unquote: "Invalid escape character in string." at position 7.

Kita dapat mengatasinya dengan menggunakan dua garis miring terbalik (\\t ). Namun, perlu diingat bahwa melakukan ini akan mengubah hasil jika tidak menggunakan JSON_UNQUOTE() .

SET @data = '"Homer \\t Simpson"';
SELECT 
  @data Original, 
  JSON_UNQUOTE(@data) Unquoted;

Hasil:

+--------------------+-----------------+
| Original           | Unquoted        |
+--------------------+-----------------+
| "Homer \t Simpson" | Homer 	 Simpson |
+--------------------+-----------------+

Bila NO_BACKSLASH_ESCAPES Diaktifkan

Inilah yang terjadi ketika kami mengaktifkan NO_BACKSLASH_ESCAPES sebelum menjalankan pernyataan sebelumnya:

SET @@sql_mode = 'NO_BACKSLASH_ESCAPES';
SET @data = '"Homer \\t Simpson"';
SELECT 
  @data Original, 
  JSON_UNQUOTE(@data) Unquoted;

Hasil:

+---------------------+------------------+
| Original            | Unquoted         |
+---------------------+------------------+
| "Homer \\t Simpson" | Homer \t Simpson |
+---------------------+------------------+

Dan inilah yang terjadi jika kita menghapus garis miring terbalik pertama:

SET @@sql_mode = 'NO_BACKSLASH_ESCAPES';
SET @data = '"Homer \t Simpson"';
SELECT 
  @data Original, 
  JSON_UNQUOTE(@data) Unquoted;

Hasil:

+--------------------+-----------------+
| Original           | Unquoted        |
+--------------------+-----------------+
| "Homer \t Simpson" | Homer 	 Simpson |
+--------------------+-----------------+


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Menginstal dan Mengkonfigurasi phpMyAdmin di Debian 8

  2. Bagaimana cara membuat pengecualian mysqli menggunakan MYSQLI_REPORT_STRICT?

  3. Kinerja sisipan batch JDBC

  4. MySQL SELECT WHERE datetime cocok dengan hari (dan belum tentu waktu)

  5. Paksa InnoDB untuk memeriksa kembali kunci asing di atas meja/tabel?