Hướng dẫn store array json in mysql - lưu trữ mảng json trong mysql
Tôi muốn lưu mảng JSON này mà fb-login của tôi trở lại cơ sở dữ liệu. Tuy nhiên, tôi không thực sự biết cách chuyển đổi nó thành một chuỗi bằng PHP. Show
Tôi đã thử mã này dưới đây nhưng tôi thậm chí không hoàn toàn chắc chắn cho dù lợi nhuận đăng nhập FB có phải là mảng JSON hay không.
Làm thế nào tôi có thể lưu các môn thể thao khác nhau vào cơ sở dữ liệu của mình trong một chuỗi? Bất kì sự trợ giúp nào đều được đánh giá cao. Thanks. Chỉnh sửa: Phần trên trả về null. Chỉnh sửa thứ hai:
MySQL hỗ trợ kiểu dữ liệu 7 gốc được xác định bởi RFC 7159 cho phép truy cập hiệu quả vào dữ liệu trong các tài liệu JSON (ký hiệu đối tượng JavaScript). Kiểu dữ liệu 7 cung cấp các lợi thế này so với việc lưu trữ các chuỗi định dạng JSON trong một cột chuỗi:
MySQL 8.0 cũng hỗ trợ định dạng bản vá hợp nhất JSON được xác định trong RFC 7396, sử dụng hàm 1. Xem mô tả của chức năng này, cũng như bình thường hóa, hợp nhất và tự động phát hiện các giá trị JSON, để biết các ví dụ và thông tin thêm.JSON Merge Patch format defined in
RFC 7396, using the 1 function. See the description of this function, as well as Normalization, Merging, and Autowrapping of JSON
Values, for examples and further information. Ghi chú Cuộc thảo luận này sử dụng 7 trong monotype để chỉ ra cụ thể loại dữ liệu JSON và JSON JSON, trong phông chữ thông thường để chỉ ra dữ liệu JSON nói chung.“JSON” in regular font to indicate JSON data in general. Không gian cần thiết để lưu trữ một tài liệu 7 gần giống như đối với 4 hoặc 5; Xem Phần & NBSP; 11.7, Yêu cầu lưu trữ kiểu dữ liệu, để biết thêm thông tin. Điều quan trọng là phải nhớ rằng kích thước của bất kỳ tài liệu JSON nào được lưu trữ trong cột 7 bị giới hạn ở giá trị của biến hệ thống 7. . Lưu ý rằng đối với cột 7, kích thước lưu trữ và do đó giá trị được trả về bởi hàm này, được sử dụng bởi cột trước khi cập nhật một phần có thể được thực hiện trên đó (xem cuộc thảo luận về tối ưu hóa một phần JSON sau này Phần này).Trước MySQL 8.0.13, cột 7 không thể có giá trị mặc định không phải -____ 71.Cùng với kiểu dữ liệu 7, một tập hợp các hàm SQL có sẵn để cho phép các hoạt động trên các giá trị JSON, chẳng hạn như tạo, thao tác và tìm kiếm. Các cuộc thảo luận sau đây cho thấy các ví dụ về các hoạt động này. Để biết chi tiết về các chức năng riêng lẻ, xem Phần & NBSP; 12,18, Chức năng của JSON.Một tập hợp các chức năng không gian để vận hành trên các giá trị Geojson cũng có sẵn. Xem Phần & NBSP; 12.17.11, Chức năng Geojson không gian. Các cột 7, giống như các cột của các loại nhị phân khác, không được lập chỉ mục trực tiếp; Thay vào đó, bạn có thể tạo một chỉ mục trên một cột được tạo trích xuất giá trị vô hướng từ cột 7. Xem lập chỉ mục một cột được tạo để cung cấp chỉ mục cột JSON, để biết ví dụ chi tiết.Trình tối ưu hóa MySQL cũng tìm kiếm các chỉ mục tương thích trên các cột ảo phù hợp với các biểu thức JSON. Trong MySQL 8.0.17 trở lên, công cụ lưu trữ 5 hỗ trợ các chỉ mục đa giá trị trên các mảng JSON. Xem các chỉ mục đa giá trị.MySQL NDB Cluster 8.0 hỗ trợ các cột 7 và các chức năng JSON của MySQL, bao gồm tạo một chỉ mục trên một cột được tạo từ cột 7 dưới dạng cách giải quyết để không thể lập chỉ mục cột 7. Tối đa 3 cột 7 mỗi bảng 0 được hỗ trợ.Cập nhật một phần của các giá trị JSONTrong MySQL 8.0, trình tối ưu hóa có thể thực hiện cập nhật một phần, tại chỗ của cột 7 thay vì xóa tài liệu cũ và viết toàn bộ tài liệu mới vào cột. Tối ưu hóa này có thể được thực hiện để cập nhật đáp ứng các điều kiện sau:
Các bản cập nhật một phần như vậy có thể được ghi vào nhật ký nhị phân bằng cách sử dụng định dạng nhỏ gọn giúp tiết kiệm không gian; Điều này có thể được bật bằng cách đặt biến hệ thống 3 thành 4.Điều quan trọng là phải phân biệt cập nhật một phần của giá trị cột 7 được lưu trữ trong bảng từ việc viết bản cập nhật một phần của một hàng vào nhật ký nhị phân. Có thể cập nhật hoàn chỉnh cột 7 được ghi lại trong nhật ký nhị phân dưới dạng cập nhật một phần. Điều này có thể xảy ra khi một trong hai (hoặc cả hai) của hai điều kiện cuối cùng từ danh sách trước đó không được đáp ứng nhưng các điều kiện khác được thỏa mãn.Xem thêm mô tả của 3.Một vài phần tiếp theo cung cấp thông tin cơ bản liên quan đến việc tạo và thao tác các giá trị JSON. Tạo giá trị JSONMột mảng JSON chứa một danh sách các giá trị được phân tách bằng dấu phẩy và được đặt trong các ký tự 8 và 9:
Một đối tượng JSON chứa một tập hợp các cặp giá trị khóa được phân tách bằng dấu phẩy và được đặt trong phạm vi 00 và 01:
Như các ví dụ minh họa, các mảng và đối tượng JSON có thể chứa các giá trị vô hướng là chuỗi hoặc số, chữ JSON NULL theo nghĩa đen hoặc chữ JSON boolean đúng hoặc sai. Chìa khóa trong các đối tượng JSON phải là chuỗi. Các giá trị vô hướng tạm thời (ngày, giờ hoặc DateTime) cũng được cho phép:
Nesting được phép trong các phần tử mảng JSON và giá trị khóa đối tượng JSON:
Bạn cũng có thể lấy các giá trị JSON từ một số hàm do MySQL cung cấp cho mục đích này (xem Phần & NBSP; 12.18.2, các hàm tạo ra các giá trị JSON) cũng như bằng cách sử dụng các giá trị của các loại khác vào loại 7 ) (xem chuyển đổi giữa các giá trị JSON và không phải là JSON). Một số đoạn tiếp theo mô tả cách MySQL xử lý các giá trị JSON được cung cấp dưới dạng đầu vào.Trong MySQL, các giá trị JSON được viết dưới dạng chuỗi. MySQL phân tích bất kỳ chuỗi nào được sử dụng trong bối cảnh yêu cầu giá trị JSON và tạo ra lỗi nếu nó không hợp lệ là JSON. Các bối cảnh này bao gồm chèn một giá trị vào một cột có kiểu dữ liệu 7 và chuyển một đối số cho một hàm mong đợi giá trị JSON (thường được hiển thị là 05 hoặc 06 trong tài liệu cho các hàm JSON của MySQL), như các ví dụ sau đây chứng minh:
MySQL xử lý các chuỗi được sử dụng trong bối cảnh JSON bằng cách sử dụng bộ ký tự 10 và đối chiếu 11. Các chuỗi trong các bộ ký tự khác được chuyển đổi thành 10 khi cần thiết. .Thay thế cho việc viết các giá trị JSON bằng cách sử dụng các chuỗi theo nghĩa đen, các hàm tồn tại để soạn các giá trị JSON từ các phần tử thành phần. 18 lấy danh sách các giá trị (có thể trống) và trả về mảng JSON chứa các giá trị đó:
19 lấy một danh sách (có thể trống) của các cặp giá trị khóa và trả về một đối tượng JSON chứa các cặp đó: 0
20 lấy hai hoặc nhiều tài liệu JSON và trả về kết quả kết hợp: 1Để biết thông tin về các quy tắc hợp nhất, hãy xem chuẩn hóa, hợp nhất và tự động ra các giá trị JSON. . Các giá trị JSON có thể được gán cho các biến do người dùng xác định: 2Tuy nhiên, các biến do người dùng xác định không thể thuộc loại dữ liệu 7, do đó, mặc dù 23 trong ví dụ trước trông giống như giá trị JSON và có cùng một bộ ký tự và đối chiếu là giá trị JSON, nhưng nó không có kiểu dữ liệu 7. Thay vào đó, kết quả từ 19 được chuyển đổi thành một chuỗi khi được gán cho biến.not have the 7 data type. Instead, the result from 19 is converted to a string when assigned to the variable. Các chuỗi được tạo ra bằng cách chuyển đổi các giá trị JSON có một bộ ký tự là 10 và đối chiếu 11: 3Bởi vì 11 là một đối chiếu nhị phân, so sánh các giá trị JSON nhạy cảm với trường hợp. 4Độ nhạy của trường hợp cũng áp dụng cho JSON 29, 30 và 31 nghĩa đen, luôn phải được viết bằng chữ thường: 5Độ nhạy của trường hợp của các chữ JSON khác nhau so với SQL 1, 33 và 34, có thể được viết trong bất kỳ chữ cái nào: 6Đôi khi có thể cần thiết hoặc mong muốn để chèn các ký tự báo giá ( 35 hoặc 36) vào tài liệu JSON. Giả sử cho ví dụ này rằng bạn muốn chèn một số đối tượng JSON chứa các chuỗi đại diện cho các câu nêu một số sự thật về MySQL, mỗi đối tượng được ghép nối với một từ khóa thích hợp, vào một bảng được tạo bằng câu lệnh SQL được hiển thị ở đây: 7Trong số các cặp từ khóa này là cái này: 8Một cách để chèn đây là đối tượng JSON vào bảng 37 là sử dụng hàm MySQL 19. Trong trường hợp này, bạn phải thoát khỏi từng ký tự trích dẫn bằng cách sử dụng dấu gạch chéo ngược, như được hiển thị ở đây: 9Điều này không hoạt động theo cùng một cách nếu bạn chèn giá trị là một đối tượng JSON theo nghĩa đen, trong trường hợp đó, bạn phải sử dụng chuỗi thoát hiểm gấp đôi, như thế này: 0Sử dụng Double Backslash giúp MySQL thực hiện xử lý trình tự thoát, và thay vào đó khiến nó chuyển chuỗi theo nghĩa đen cho công cụ lưu trữ để xử lý. Sau khi chèn đối tượng JSON theo một trong hai cách vừa hiển thị, bạn có thể thấy rằng các dấu gạch chéo ngược có mặt trong giá trị cột JSON bằng cách thực hiện một 39 đơn giản, như thế này: 1Để tra cứu câu cụ thể này sử dụng 40 làm khóa, bạn có thể sử dụng toán tử đường dẫn cột 41, như được hiển thị ở đây: 2Điều này để lại các dấu gạch chéo ngược, cùng với các dấu ngoặc kép xung quanh. Để hiển thị giá trị mong muốn bằng cách sử dụng 40 làm khóa, nhưng không bao gồm các dấu ngoặc kép xung quanh hoặc bất kỳ lối thoát nào, hãy sử dụng toán tử đường dẫn nội tuyến 43, như thế này: 3Ghi chú Ví dụ trước không hoạt động như được hiển thị nếu chế độ SQL máy chủ 44 được bật. Nếu chế độ này được đặt, một dấu gạch chéo ngược thay vì có thể sử dụng các dấu gạch chéo ngược gấp đôi để chèn theo nghĩa đen của đối tượng JSON và các dấu gạch chéo ngược được bảo tồn. Nếu bạn sử dụng chức năng 19 khi thực hiện chèn và chế độ này được đặt, bạn phải xen kẽ các trích dẫn đơn và đôi, như thế này: 4Xem mô tả của hàm 46 để biết thêm thông tin về tác động của chế độ này đối với các ký tự đã thoát trong các giá trị JSON.Chuẩn hóa, hợp nhất và tự động ra giá trị JSONKhi một chuỗi được phân tích cú pháp và được tìm thấy là một tài liệu JSON hợp lệ, nó cũng được chuẩn hóa. Điều này có nghĩa là các thành viên có các khóa sao chép một khóa được tìm thấy sau này trong tài liệu, đọc từ trái sang phải, bị loại bỏ. Giá trị đối tượng được tạo bởi cuộc gọi 19 sau đây chỉ bao gồm phần tử 48 thứ hai vì tên khóa đó xảy ra trước đó trong giá trị, như được hiển thị ở đây: 5Chuẩn hóa cũng được thực hiện khi các giá trị được chèn vào các cột JSON, như được hiển thị ở đây: 6Hành vi chính của bản sao cuối cùng của người Viking này được đề xuất bởi RFC 7159 và được thực hiện bởi hầu hết các trình phân tích cú pháp JavaScript. (Lỗi #86866, lỗi #26369555)“last duplicate key wins” behavior is suggested by RFC 7159 and is implemented by most JavaScript parsers. (Bug #86866, Bug #26369555) Trong các phiên bản của MySQL trước 8.0.3, các thành viên có khóa đã nhân đôi một khóa được tìm thấy trước đó trong tài liệu đã bị loại bỏ. Giá trị đối tượng được tạo bởi cuộc gọi 19 sau đây không bao gồm phần tử 48 thứ hai vì tên khóa đó xảy ra trước đó trong giá trị: 7Trước MySQL 8.0.3, khóa bản sao đầu tiên này giành được sự chuẩn hóa của Wins cũng được thực hiện khi chèn các giá trị vào các cột JSON.“first duplicate key wins” normalization was also performed when inserting values into JSON columns. 8MySQL cũng loại bỏ thêm khoảng trắng giữa các khóa, giá trị hoặc các phần tử trong tài liệu JSON gốc và lá (hoặc chèn, khi cần thiết) một không gian sau mỗi dấu phẩy ( 51) hoặc ruột kết ( 52) khi hiển thị nó. Điều này được thực hiện để tăng cường khả năng đọc.Các hàm MySQL tạo ra các giá trị JSON (xem Phần & NBSP; 12.18.2, các hàm tạo ra các giá trị JSON) luôn trả về các giá trị chuẩn hóa. Để làm cho tra cứu hiệu quả hơn, MySQL cũng sắp xếp các phím của đối tượng JSON. Bạn nên lưu ý rằng kết quả của việc đặt hàng này có thể thay đổi và không được đảm bảo là nhất quán giữa các bản phát hành.You should be aware that the result of this ordering is subject to change and not guaranteed to be consistent across releases. Hợp nhất các giá trị JSONHai thuật toán hợp nhất được hỗ trợ trong MySQL 8.0.3 (và sau đó), được thực hiện bởi các chức năng 20 và 1. Chúng khác nhau về cách chúng xử lý các khóa trùng lặp: 20 giữ lại các giá trị cho các khóa trùng lặp, trong khi 1 loại bỏ tất cả trừ giá trị cuối cùng. Một vài đoạn tiếp theo giải thích cách mỗi hai chức năng này xử lý việc hợp nhất các kết hợp khác nhau của các tài liệu JSON (nghĩa là, của các đối tượng và mảng).Ghi chú
20 giống như hàm 58 được tìm thấy trong các phiên bản trước của MySQL (được đổi tên trong MySQL 8.0.3). 58 vẫn được hỗ trợ dưới dạng bí danh cho 20 trong MySQL 8.0, nhưng không được chấp nhận và có thể loại bỏ trong một bản phát hành trong tương lai.Hợp nhất các mảng. & Nbsp; Trong các bối cảnh kết hợp nhiều mảng, các mảng được hợp nhất thành một mảng duy nhất. 20 does this by concatenating arrays named later to the end of the first array. 1 considers each argument as an array consisting of a single element (thus having 0 as its index) and then applies “last duplicate key wins” logic to select only the last argument. You can compare the results shown by this query: 9Nhiều đối tượng khi hợp nhất tạo ra một đối tượng. 20 xử lý nhiều đối tượng có cùng một khóa bằng cách kết hợp tất cả các giá trị duy nhất cho khóa đó trong một mảng; Mảng này sau đó được sử dụng làm giá trị cho khóa đó trong kết quả. 1 loại bỏ các giá trị mà các khóa trùng lặp được tìm thấy, hoạt động từ trái sang phải, để kết quả chỉ chứa giá trị cuối cùng cho khóa đó. Truy vấn sau đây minh họa sự khác biệt trong kết quả cho khóa trùng lặp 65: 0Các giá trị không được sử dụng trong bối cảnh yêu cầu giá trị mảng được tự động tạo ra: giá trị được bao quanh bởi các ký tự 8 và 9 để chuyển đổi nó thành một mảng. Trong câu lệnh sau, mỗi đối số được tự động tạo thành một mảng ( 68, 69). Chúng sau đó được hợp nhất để tạo ra một mảng kết quả duy nhất; Như trong hai trường hợp trước, 20 kết hợp các giá trị có cùng một khóa trong khi 1 loại bỏ các giá trị cho tất cả các khóa trùng lặp ngoại trừ phần cuối, như được hiển thị ở đây: 1Các giá trị mảng và đối tượng được hợp nhất bằng cách tự động xử lý đối tượng như một mảng và hợp nhất các mảng bằng cách kết hợp các giá trị hoặc bởi khóa trùng lặp cuối cùng sẽ thắng được theo lựa chọn hàm hợp nhất ( 20 hoặc 1 :“last duplicate key wins” according to the choice of merging function ( 20 or 1, respectively), as can be seen in this example: 2Tìm kiếm và sửa đổi các giá trị JSONBiểu thức đường dẫn JSON chọn một giá trị trong tài liệu JSON. Biểu thức đường dẫn rất hữu ích với các chức năng trích xuất các phần hoặc sửa đổi tài liệu JSON, để chỉ định vị trí trong tài liệu đó để vận hành. Ví dụ: truy vấn sau trích xuất từ tài liệu JSON Giá trị của thành viên với khóa 74: 3Path Cú pháp sử dụng ký tự 75 hàng đầu để thể hiện tài liệu JSON đang được xem xét, theo tùy chọn theo các bộ chọn cho thấy các phần cụ thể hơn của tài liệu:
Đặt 75 Tham khảo mảng JSON này với ba yếu tố: 5Sau đó:
Bởi vì 00 và 02 đánh giá các giá trị không quan trọng, chúng có thể được sử dụng làm cơ sở cho các biểu thức đường dẫn cụ thể hơn chọn các giá trị lồng nhau. Ví dụ:
Như đã đề cập trước đây, các thành phần đường dẫn mà các khóa tên phải được trích dẫn nếu tên khóa chưa được trích xuất không hợp pháp trong các biểu thức đường dẫn. Đặt 75 Tham khảo giá trị này: 6Cả hai khóa đều chứa một không gian và phải được trích dẫn:
Các đường dẫn sử dụng Wildcards đánh giá thành một mảng có thể chứa nhiều giá trị: 7Trong ví dụ sau, đường dẫn 21 đánh giá thành nhiều đường dẫn ( 22 và 23) và tạo ra một mảng các giá trị đường dẫn phù hợp: 8Phạm vi từ các mảng JSON. & NBSP; Bạn có thể sử dụng các phạm vi với từ khóa 24 keyword to specify subsets of JSON arrays. For example, 25 includes the second, third, and fourth elements of an array, as shown here: 9Cú pháp là 84 đến 08, trong đó 84 và 08, tương ứng là các chỉ số đầu tiên và cuối cùng của một loạt các phần tử từ mảng JSON. 08 phải lớn hơn 84; 84 phải lớn hơn hoặc bằng 0. Các phần tử mảng được lập chỉ mục bắt đầu bằng 0. , where 84 and 08 are, respectively, the first and last indexes of a range of elements from
a JSON array. 08 must be greater than 84; 84 must be greater than or equal to 0. Array elements are indexed beginning with 0. Bạn có thể sử dụng các phạm vi trong bối cảnh nơi các ký tự đại diện được hỗ trợ. Phần tử mảng ngoài cùng bên phải. & Nbsp; Từ khóa 86 keyword is supported as a synonym for the index of the last element in an array. Expressions of the form last -
can be used for relative addressing, and
within range definitions, like this: 0Nếu đường dẫn được đánh giá theo giá trị không phải là một mảng, kết quả của việc đánh giá giống như khi giá trị đã được bọc trong một mảng một phần tử: 1Bạn có thể sử dụng ________ 235-> ________ 177 với nhận dạng cột JSON và biểu thức đường dẫn JSON như một từ đồng nghĩa với 37, 77). Xem Phần & NBSP; 12.18.3, Các chức năng mà tìm kiếm các giá trị JSON, để biết thêm thông tin. Xem thêm lập chỉ mục một cột được tạo để cung cấp chỉ mục cột JSON.Một số chức năng lấy một tài liệu JSON hiện có, sửa đổi nó theo một cách nào đó và trả về tài liệu được sửa đổi kết quả. Biểu thức đường dẫn cho biết nơi nào trong tài liệu để thực hiện thay đổi. Ví dụ: các hàm 4, 40 và 5 mỗi tài liệu JSON, cộng với một hoặc nhiều cặp giá trị đường dẫn mô tả nơi sửa đổi tài liệu và các giá trị sẽ sử dụng. Các chức năng khác nhau về cách chúng xử lý các giá trị hiện có và không tồn tại trong tài liệu.Xem xét tài liệu này: 2
4 Thay thế các giá trị cho các đường dẫn tồn tại và thêm các giá trị cho các đường dẫn không tồn tại:. 3Trong trường hợp này, đường dẫn 43 chọn một giá trị hiện có ( 30), được thay thế bằng giá trị theo đối số đường dẫn ( 45). Đường dẫn 46 không tồn tại, do đó, giá trị tương ứng ( 47) được thêm vào giá trị được chọn bởi 02. 40 thêm các giá trị mới nhưng không thay thế các giá trị hiện có: 4
5 thay thế các giá trị hiện có và bỏ qua các giá trị mới: 5Các cặp giá trị đường dẫn được đánh giá từ trái sang phải. Tài liệu được tạo ra bằng cách đánh giá một cặp trở thành giá trị mới mà cặp tiếp theo được đánh giá.
6 lấy một tài liệu JSON và một hoặc nhiều đường dẫn chỉ định các giá trị sẽ bị xóa khỏi tài liệu. Giá trị trả về là tài liệu gốc trừ đi các giá trị được chọn bởi các đường dẫn tồn tại trong tài liệu: 6Các đường dẫn có các hiệu ứng này:
Cú pháp đường dẫn JSONNhiều chức năng JSON được MySQL hỗ trợ và được mô tả ở nơi khác trong hướng dẫn này (xem Phần & NBSP; 12,18, Chức năng của JSON JSON) yêu cầu một biểu thức đường dẫn để xác định một yếu tố cụ thể trong tài liệu JSON. Một đường dẫn bao gồm phạm vi của đường dẫn theo sau là một hoặc nhiều chân đường dẫn. Đối với các đường dẫn được sử dụng trong các hàm JSON của MySQL, phạm vi luôn là tài liệu được tìm kiếm hoặc hoạt động khác, được đại diện bởi một ký tự 75 hàng đầu. Chân đường dẫn được phân tách bằng các ký tự thời kỳ ( 59). Các tế bào trong các mảng được biểu thị bằng [ 08], trong đó 08 là một số nguyên không âm. Tên của các khóa phải là các chuỗi được trích dẫn kép hoặc định danh ECMAscript hợp lệ (xem tên nhận dạng và định danh, trong đặc tả ngôn ngữ Ecmascript). Các biểu thức đường dẫn, như văn bản JSON, nên được mã hóa bằng bộ ký tự 13, 14 hoặc 10. Các mã hóa ký tự khác bị ép buộc ngầm vào 10. Cú pháp hoàn chỉnh được hiển thị ở đây:[ , where 08 is a non-negative integer. Names of keys must be double-quoted strings or valid ECMAScript identifiers (see Identifier Names and
Identifiers, in the ECMAScript Language Specification). Path expressions, like JSON text, should be encoded using the 13, 14, or 10 character set. Other character encodings are implicitly coerced to 10. The complete syntax is shown here: 7Như đã lưu ý trước đây, trong MySQL, phạm vi của đường dẫn luôn là tài liệu được vận hành, được biểu thị là 75. Bạn có thể sử dụng 67 làm từ đồng nghĩa với tài liệu trong biểu thức đường dẫn JSON.
Ghi chú Một số triển khai hỗ trợ tham chiếu cột cho phạm vi của đường dẫn JSON; MySQL 8.0 không hỗ trợ những điều này. Các mã thông báo ký tự đại diện 90 và 91 được sử dụng như sau:
Đối với các ví dụ cú pháp đường dẫn, hãy xem các mô tả về các hàm JSON khác nhau lấy đường dẫn làm đối số, chẳng hạn như 80, 4 và 5. Ví dụ bao gồm việc sử dụng các ký tự đại diện 90 và 91, hãy xem mô tả về hàm 85.MySQL 8.0 cũng hỗ trợ ký hiệu phạm vi cho các tập hợp con của mảng JSON bằng cách sử dụng từ khóa 24 (chẳng hạn như 87), cũng như từ khóa 86 làm từ đồng nghĩa với phần tử ngoài cùng của mảng. Xem tìm kiếm và sửa đổi các giá trị JSON, để biết thêm thông tin và ví dụ.So sánh và đặt hàng các giá trị JSONCác giá trị JSON có thể được so sánh bằng cách sử dụng 89, 90, 91, 92, 93, 94, 95 và 96.Các toán tử và chức năng so sánh sau đây chưa được hỗ trợ với các giá trị JSON:
Một cách giải quyết cho các toán tử và chức năng so sánh chỉ được liệt kê là chuyển các giá trị JSON vào loại dữ liệu số hoặc chuỗi MySQL gốc để chúng có loại vô hướng không phải là JSON nhất quán. So sánh các giá trị JSON diễn ra ở hai cấp độ. Mức so sánh đầu tiên dựa trên các loại JSON của các giá trị so sánh. Nếu các loại khác nhau, kết quả so sánh được xác định chỉ bằng loại có ưu tiên cao hơn. Nếu hai giá trị có cùng loại JSON, mức so sánh thứ hai xảy ra bằng cách sử dụng các quy tắc cụ thể loại. Danh sách sau đây cho thấy các ưu tiên của các loại JSON, từ ưu tiên cao nhất đến thấp nhất. . Bất kỳ giá trị nào có loại JSON được liệt kê trước đó trong danh sách đều so với bất kỳ giá trị nào có loại JSON được liệt kê sau trong danh sách. 8Đối với các giá trị JSON có cùng mức độ ưu tiên, các quy tắc so sánh là loại cụ thể:
Các giá trị JSON có thể chứa các số giá trị chính xác và số giá trị xấp xỉ. Để thảo luận chung về các loại số này, xem Phần & NBSP; 9.1.2, chữ số chữ số. Các quy tắc để so sánh các loại số MySQL gốc được thảo luận trong Phần & NBSP; 12.3, Chuyển đổi loại trong đánh giá biểu thức, nhưng các quy tắc để so sánh các số trong các giá trị JSON khác nhau phần nào: Trong một so sánh giữa hai cột sử dụng MySQL ["abc", 10, null, true, false]28 và ["abc", 10, null, true, false]27, tương ứng, người ta biết rằng tất cả các so sánh liên quan đến một số nguyên và gấp đôi, do đó, số nguyên được chuyển đổi thành gấp đôi cho tất cả các hàng. Đó là, các số giá trị chính xác được chuyển đổi thành số giá trị xấp xỉ.Mặt khác, nếu truy vấn so sánh hai cột JSON chứa số, thì không thể biết trước liệu các số có số nguyên hay gấp đôi. Để cung cấp hành vi nhất quán nhất trên tất cả các hàng, MySQL chuyển đổi số giá trị xấp xỉ thành các số giá trị chính xác. Thứ tự kết quả là nhất quán và không mất độ chính xác cho các số giá trị chính xác. Ví dụ, với vô hướng 9223372036854775805, 9223372036854775806, 9223372036854775807 và 9.223372036854776e18 Là so sánh JSON để sử dụng các quy tắc so sánh số không phải là json, có thể xảy ra thứ tự không nhất quán. Các quy tắc so sánh MySQL thông thường cho các số mang lại thứ tự sau:
44 và 45 cho các giá trị JSON hoạt động theo các nguyên tắc này:
Để phân loại, có thể có lợi khi đúc một vô hướng JSON cho một số loại MySQL bản địa khác. Ví dụ: nếu một cột có tên 50 chứa các đối tượng JSON có thành viên bao gồm khóa 51 và giá trị không âm, hãy sử dụng biểu thức này để sắp xếp các giá trị 51: 6Nếu có một cột được tạo được xác định để sử dụng biểu thức tương tự như trong 44, trình tối ưu hóa MySQL sẽ nhận ra điều đó và xem xét sử dụng chỉ mục cho kế hoạch thực thi truy vấn. Xem Phần & NBSP; 8.3.11, Trình tối ưu hóa sử dụng các chỉ mục cột được tạo ra.Tổng hợp các giá trị JSONĐể tổng hợp các giá trị JSON, các giá trị SQL 1 bị bỏ qua như đối với các loại dữ liệu khác. Các giá trị không-____ 71 được chuyển đổi thành loại số và tổng hợp, ngoại trừ 56, 57 và 58. Việc chuyển đổi thành số sẽ tạo ra một kết quả có ý nghĩa cho các giá trị JSON là vô hướng số, mặc dù (tùy thuộc vào giá trị) cắt và mất độ chính xác có thể xảy ra. Chuyển đổi sang số lượng các giá trị JSON khác có thể không tạo ra kết quả có ý nghĩa.
Tôi có thể lưu trữ mảng json trong mysql không?MySQL hỗ trợ kiểu dữ liệu JSON gốc được xác định bởi RFC 7159 cho phép truy cập hiệu quả vào dữ liệu trong các tài liệu JSON (ký hiệu đối tượng JavaScript). Kiểu dữ liệu JSON cung cấp các lợi thế này so với việc lưu trữ các chuỗi định dạng JSON trong một cột chuỗi: Xác thực tự động các tài liệu JSON được lưu trữ trong các cột JSON. that enables efficient access to data in JSON (JavaScript Object Notation) documents. The JSON data type provides these advantages over storing JSON-format strings in a string column: Automatic validation of JSON documents stored in JSON columns.
Tôi có thể lưu trữ một mảng trong mysql không?Mặc dù một mảng là một trong những loại dữ liệu phổ biến nhất trong thế giới lập trình, MySQL thực sự không hỗ trợ lưu trực tiếp loại mảng.Bạn không thể tạo một cột bảng loại mảng trong MySQL.Dữ liệu loại mảng lưu trữ dễ dàng nhất trong MySQL là sử dụng kiểu dữ liệu JSON.MySQL actually doesn't support saving an array type directly. You can't create a table column of array type in MySQL. The easiest way store array type data in MySQL is to use the JSON data type.
JSON được lưu trữ như thế nào trong MySQL?MySQL lưu trữ các tài liệu JSON ở định dạng nội bộ cho phép truy cập nhanh đọc nhanh vào các thành phần tài liệu.Định dạng nhị phân JSON được cấu trúc theo cách cho phép máy chủ tìm kiếm các giá trị trong tài liệu JSON trực tiếp bằng khóa hoặc chỉ mục mảng, rất nhanh.in an internal format that allows quick read access to document elements. The JSON binary format is structured in the way that permits the server to search for values within the JSON document directly by key or array index, which is very fast.
Hạn chế của các cột JSON trong MySQL là gì?Hạn chế?Nếu JSON của bạn có nhiều trường có cùng một khóa, chỉ có một trong số đó, cái cuối cùng, sẽ được giữ lại.Hạn chế khác là MySQL không hỗ trợ lập chỉ mục các cột JSON, điều đó có nghĩa là việc tìm kiếm thông qua các tài liệu JSON của bạn có thể dẫn đến quét bảng đầy đủ.MySQL doesn't support indexing JSON columns, which means that searching through your JSON documents could result in a full table scan. |