Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

JSON_UNQUOTE () - Xóa trích dẫn khỏi tài liệu JSON trong MySQL

Trong MySQL, JSON_UNQUOTE() hàm “bỏ dấu ngoặc kép” một tài liệu JSON và trả về kết quả dưới dạng utf8mb4 chuỗi.

Bạn cung cấp tài liệu JSON làm đối số và hàm sẽ thực hiện phần còn lại.

Cú pháp

Cú pháp như sau:

JSON_UNQUOTE(json_val)

Ở đâu json_val là tài liệu JSON mà bạn muốn không được trích dẫn.

Ví dụ

Đây là một ví dụ để chứng minh.

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

Kết quả:

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

Ký tự thoát

Cách hàm này xử lý các ký tự thoát phụ thuộc vào việc NO_BACKSLASH_ESCAPES được bật hoặc tắt.

Khi NO_BACKSLASH_ESCAPES bị tắt

NO_BACKSLASH_ESCAPES chế độ bị tắt theo mặc định trong MySQL 8.0.

Đây là những gì sẽ xảy ra nếu chúng tôi bao gồm \t để chỉ định một ký tự tab trong một chuỗi khi NO_BACKSLASH_ESCAPES bị vô hiệu hóa và không có sử dụng JSON_UNQUOTE() .

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

Kết quả:

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

Và đây là những gì sẽ xảy ra nếu chúng tôi sử dụng JSON_UNQUOTE() :

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

Kết quả:

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

Chúng tôi có thể khắc phục điều này bằng cách sử dụng hai dấu gạch chéo ngược (\\t ). Tuy nhiên, hãy nhớ rằng làm điều này sẽ thay đổi kết quả khi không sử dụng JSON_UNQUOTE() .

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

Kết quả:

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

Khi NO_BACKSLASH_ESCAPES được Bật

Đây là những gì sẽ xảy ra khi chúng tôi bật NO_BACKSLASH_ESCAPES trước khi chạy câu lệnh trước:

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

Kết quả:

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

Và đây là những gì sẽ xảy ra nếu chúng ta xóa dấu gạch chéo ngược đầu tiên:

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

Kết quả:

+--------------------+-----------------+
| 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. Cách kết nối với cơ sở dữ liệu bằng ứng dụng khách NaviCat MySQL

  2. Loại dữ liệu MySQL nào nên được sử dụng cho Vĩ độ / Kinh độ với 8 chữ số thập phân?

  3. Cách so sánh hai cột trong MySQL

  4. Triển khai máy chủ Percona cho một đám mây kết hợp

  5. Làm thế nào để có được tổng số người dùng tích lũy mỗi ngày trong MySQL