Hướng dẫn how to save json in mysql - cách lưu json trong mysql

Mọi người bình luận dường như đang đến từ góc sai, việc lưu trữ mã JSON là tốt qua PHP trong DB quan hệ và thực tế sẽ nhanh hơn để tải và hiển thị dữ liệu phức tạp như thế này, tuy nhiên bạn sẽ có những cân nhắc thiết kế như Tìm kiếm, lập chỉ mục, v.v.

Cách tốt nhất để làm điều này là sử dụng dữ liệu lai, ví dụ nếu bạn cần tìm kiếm dựa trên DateTime MySQL (điều chỉnh hiệu suất) sẽ nhanh hơn rất nhiều so với PHP và đối với khoảng cách tìm kiếm của địa điểm MySQL cũng sẽ rất nhiều nhanh hơn (thông báo tìm kiếm không truy cập). Dữ liệu bạn không cần tìm kiếm sau đó có thể được lưu trữ trong JSON, Blob hoặc bất kỳ định dạng nào khác mà bạn thực sự thấy cần thiết.

Dữ liệu bạn cần truy cập rất dễ dàng được lưu trữ dưới dạng JSON, ví dụ như một hệ thống hóa đơn cơ bản trên trường hợp. Chúng không được hưởng lợi nhiều từ RDBMS và có thể được lưu trữ trong JSON chỉ bằng JSON_ENCODING ($ _ POST ['Entires']) nếu bạn có cấu trúc hình thức HTML chính xác.

Tôi rất vui vì bạn rất vui khi sử dụng MongoDB và tôi hy vọng rằng nó sẽ tiếp tục phục vụ bạn tốt, nhưng đừng nghĩ rằng MySQL sẽ luôn rời khỏi radar của bạn, vì ứng dụng của bạn tăng lên trong Một số chức năng và tính năng (ngay cả khi nó chỉ dành cho dữ liệu lưu trữ hoặc báo cáo kinh doanh được lưu trữ)

Hướng dẫn how to save json in mysql - cách lưu json trong mysql

Benmorel

32.9K48 Huy hiệu vàng173 Huy hiệu bạc307 Huy hiệu đồng48 gold badges173 silver badges307 bronze badges

Đã trả lời ngày 17 tháng 2 năm 2014 lúc 15:41Feb 17, 2014 at 15:41

7

MySQL 5.7 hiện hỗ trợ kiểu dữ liệu JSON gốc tương tự như MongoDB và các cửa hàng dữ liệu tài liệu sơ đồ khác:

Hỗ trợ JSON

Bắt đầu với MySQL 5.7.8, MySQL hỗ trợ loại JSON gốc. Các giá trị JSON không được lưu trữ dưới dạng chuỗi, thay vào đó sử dụng định dạng nhị phân bên trong cho phép truy cập đọc nhanh vào các thành phần tài liệu. Các tài liệu JSON được lưu trữ trong các cột JSON được xác thực tự động bất cứ khi nào chúng được chèn hoặc cập nhật, với một tài liệu không hợp lệ tạo ra lỗi. Các tài liệu JSON được chuẩn hóa khi tạo và có thể được so sánh bằng cách sử dụng hầu hết các toán tử so sánh như =, =,,! =, Và; Để biết thông tin về các nhà khai thác được hỗ trợ cũng như ưu tiên và các quy tắc khác mà MySQL tuân theo khi so sánh các giá trị JSON, hãy xem so sánh và đặt hàng các giá trị JSON.

MySQL 5.7.8 cũng giới thiệu một số chức năng để làm việc với các giá trị JSON. Các chức năng này bao gồm các chức năng được liệt kê ở đây:

  1. Các hàm tạo ra các giá trị json: json_array (), json_merge () và json_object (). Xem Phần 12.16.2, các chức năng tạo ra các giá trị JSON.
  2. Các hàm tìm kiếm các giá trị json: json_contains (), json_contains_path (), json_extract (), json_keys () và json_search (). Xem phần 12.16.3, Các chức năng của người Viking tìm kiếm các giá trị JSON.
  3. Các hàm sửa đổi các giá trị json: json_append (), json_array_append (), json_array_insert (), json_insert (), json_quote (), json_remove (), json_replace (), json_set (), và json_unquote (). Xem phần 12.16.4, các chức năng của các giá trị JSON.
  4. Các hàm cung cấp thông tin về các giá trị JSON: json_depth (), json_length (), json_type () và json_valid (). Xem phần 12.16.5, các chức năng trả về các thuộc tính giá trị JSON.

Trong MySQL 5.7.9 trở lên, bạn có thể sử dụng đường dẫn cột-> làm tốc ký cho json_extract (cột, đường dẫn). Điều này hoạt động như một bí danh cho một cột bất cứ nơi nào một định danh cột có thể xảy ra trong một câu lệnh SQL, bao gồm cả, đặt hàng theo và nhóm theo các điều khoản. Điều này bao gồm chọn, cập nhật, xóa, tạo bảng và các câu lệnh SQL khác. Phía bên trái phải là một định danh cột JSON (và không phải là bí danh). Phía bên phải là biểu thức đường dẫn JSON được trích dẫn được đánh giá theo tài liệu JSON được trả về làm giá trị cột.

Xem Phần 12.16.3, Các chức năng tìm kiếm các giá trị JSON, để biết thêm thông tin về -> và json_extract (). Để biết thông tin về hỗ trợ đường dẫn JSON trong MySQL 5.7, hãy xem tìm kiếm và sửa đổi các giá trị JSON. Xem thêm Các chỉ mục thứ cấp và các cột được tạo ảo.

Thêm thông tin:

https://dev.mysql.com/doc/refman/5.7/en/json.html

Đã trả lời ngày 25 tháng 1 năm 2016 lúc 6:28Jan 25, 2016 at 6:28

Couchdb và MySQL là hai con thú rất khác nhau. JSON là cách bản địa để lưu trữ đồ trong CouchDB. Trong MySQL, điều tốt nhất bạn có thể làm là lưu trữ dữ liệu JSON dưới dạng văn bản trong một trường duy nhất. Điều này sẽ hoàn toàn đánh bại mục đích lưu trữ nó trong RDBMS và sẽ làm phức tạp rất nhiều giao dịch cơ sở dữ liệu.

Don't.

Phải nói rằng, FriendFeed dường như sử dụng một lược đồ cực kỳ tùy chỉnh trên đầu MySQL. Nó thực sự phụ thuộc vào chính xác những gì bạn muốn lưu trữ, hầu như không có câu trả lời nhất định về cách lạm dụng hệ thống cơ sở dữ liệu để nó có ý nghĩa với bạn. Cho rằng bài báo rất cũ và lý do chính của họ chống lại Mongo và Couch là sự non nớt, tôi đã đánh giá lại hai điều này nếu MySQL không cắt nó cho bạn. Bây giờ họ nên phát triển rất nhiều.

Hướng dẫn how to save json in mysql - cách lưu json trong mysql

ghét

4.71328 Huy hiệu vàng46 Huy hiệu bạc44 Huy hiệu đồng28 gold badges46 silver badges44 bronze badges

Đã trả lời ngày 25 tháng 8 năm 2010 lúc 8:26Aug 25, 2010 at 8:26

lừa dối ♦ lừa dốideceze

500K82 Huy hiệu vàng721 Huy hiệu bạc868 Huy hiệu Đồng82 gold badges721 silver badges868 bronze badges

13

Các ký tự JSON không có gì đặc biệt khi nói đến việc lưu trữ, các ký tự như

________ 5, ________ 6, ________ 7, ________ 8, ________ 9, ________ 10, ________ 11 .... thực sự không có gì đặc biệt và có thể được lưu trữ dưới dạng văn bản.

Vấn đề đầu tiên bạn sẽ gặp phải là điều này

{ACRECK_ID: 22, Tên người dùng: 'Robert', Mật khẩu: 'SkHgeeHT893HTGN34YTHG9ER'}

được lưu trữ trong cơ sở dữ liệu không đơn giản để cập nhật trừ khi bạn có thủ tục tố tụng của riêng mình và phát triển JSondecode cho MySQL

UPDATE users SET JSON(user_data,'username') = 'New User';

Vì vậy, vì bạn không thể làm điều đó, trước tiên bạn sẽ phải chọn JSON, giải mã nó, thay đổi nó, cập nhật nó, vì vậy về lý thuyết, bạn cũng có thể dành nhiều thời gian hơn để xây dựng cấu trúc cơ sở dữ liệu phù hợp!

Tôi sử dụng JSON để lưu trữ dữ liệu nhưng chỉ có dữ liệu meta, dữ liệu không được cập nhật thường xuyên, không liên quan đến người dùng cụ thể .. Ví dụ nếu người dùng thêm một bài đăng và trong bài đăng đó, anh ấy thêm hình ảnh phân tích hình ảnh và tạo ngón tay cái và Sau đó sử dụng URL ngón tay cái ở định dạng JSON.

Đã trả lời ngày 25 tháng 8 năm 2010 lúc 8:27Aug 25, 2010 at 8:27

RobertpittrobertpittRobertPitt

56.4K21 Huy hiệu vàng113 Huy hiệu bạc159 Huy hiệu đồng21 gold badges113 silver badges159 bronze badges

2

Để minh họa mức độ khó khăn để lấy dữ liệu JSON bằng cách sử dụng truy vấn, tôi sẽ chia sẻ truy vấn mà tôi đã thực hiện để xử lý việc này.

Nó không tính đến các mảng hoặc các đối tượng khác, chỉ là các kiểu dữ liệu cơ bản. Bạn nên thay đổi 4 phiên bản của cột thành tên cột lưu trữ JSON và thay đổi 4 trường hợp của MyField thành trường JSON bạn muốn truy cập.column to the column name storing the JSON, and change the 4 instances of myfield to the JSON field you want to access.

SELECT
    SUBSTRING(
        REPLACE(REPLACE(REPLACE(column, '{', ''), '}', ','), '"', ''),
        LOCATE(
            CONCAT('myfield', ':'),
            REPLACE(REPLACE(REPLACE(column, '{', ''), '}', ','), '"', '')
        ) + CHAR_LENGTH(CONCAT('myfield', ':')),
        LOCATE(
            ',',
            SUBSTRING(
                REPLACE(REPLACE(REPLACE(column, '{', ''), '}', ','), '"', ''),
                LOCATE(
                    CONCAT('myfield', ':'),
                    REPLACE(REPLACE(REPLACE(column, '{', ''), '}', ','), '"', '')
                ) + CHAR_LENGTH(CONCAT('myfield', ':'))
            )
        ) - 1
    )
    AS myfield
FROM mytable WHERE id = '3435'

Đã trả lời ngày 15 tháng 2 năm 2013 lúc 15:05Feb 15, 2013 at 15:05

Hướng dẫn how to save json in mysql - cách lưu json trong mysql

JorjonjorjonJorjon

5.2681 Huy hiệu vàng40 Huy hiệu bạc56 Huy hiệu đồng1 gold badge40 silver badges56 bronze badges

2

Nó thực sự phụ thuộc vào trường hợp sử dụng của bạn. Nếu bạn đang lưu trữ thông tin hoàn toàn không có giá trị trong báo cáo và sẽ không được truy vấn thông qua các kết nối với các bảng khác, có thể có ý nghĩa khi bạn lưu trữ dữ liệu của mình trong một trường văn bản, được mã hóa dưới dạng JSON.

Điều này có thể đơn giản hóa rất nhiều mô hình dữ liệu của bạn. Tuy nhiên, như đã đề cập bởi Robertpitt, đừng hy vọng có thể kết hợp dữ liệu này với các dữ liệu khác đã được chuẩn hóa.

Đã trả lời ngày 18 tháng 8 năm 2013 lúc 12:12Aug 18, 2013 at 12:12

Hướng dẫn how to save json in mysql - cách lưu json trong mysql

Phil Lanasaphil LanasaPhil LaNasa

2.8491 Huy hiệu vàng24 Huy hiệu bạc16 Huy hiệu đồng1 gold badge24 silver badges16 bronze badges

2

Đây là một câu hỏi cũ, nhưng tôi vẫn có thể thấy điều này ở đầu kết quả tìm kiếm của Google, vì vậy tôi đoán sẽ có ý nghĩa thêm một câu trả lời mới 4 năm sau khi câu hỏi được hỏi.

Trước hết, có sự hỗ trợ tốt hơn trong việc lưu trữ JSON trong RDBMS. Bạn có thể xem xét chuyển sang PostgreSQL (mặc dù MySQL đã hỗ trợ JSON kể từ v5.7.7). PostgreSQL sử dụng các lệnh SQL rất giống nhau vì MySQL ngoại trừ chúng hỗ trợ nhiều chức năng hơn. Một trong những chức năng họ thêm là họ cung cấp kiểu dữ liệu JSON và giờ đây bạn có thể truy vấn JSON được lưu trữ. (Một số tài liệu tham khảo về điều này) Nếu bạn không tạo ra truy vấn trực tiếp trong chương trình của mình, ví dụ, sử dụng PDO trong PHP hoặc Eloquent in Laravel, tất cả những gì bạn cần làm chỉ là cài đặt PostgreSQL trên máy chủ của bạn và thay đổi cài đặt kết nối cơ sở dữ liệu. Bạn thậm chí không cần phải thay đổi mã của mình.

Hầu hết thời gian, như các câu trả lời khác được đề xuất, lưu trữ dữ liệu dưới dạng JSON trực tiếp trong RDBMS không phải là một ý tưởng tốt. Có một số ngoại lệ mặc dù. Một tình huống tôi có thể nghĩ đến là một lĩnh vực với số lượng khác nhau của mục nhập được liên kết.

Ví dụ: để lưu trữ thẻ của một bài đăng trên blog, thông thường bạn sẽ cần phải có một bảng cho bài đăng trên blog, một bảng thẻ và bảng phù hợp. Vì vậy, khi người dùng muốn chỉnh sửa một bài đăng và bạn cần hiển thị thẻ nào có liên quan đến bài đăng đó, bạn sẽ cần truy vấn 3 bảng. Điều này sẽ làm hỏng hiệu suất rất nhiều nếu bảng / bảng thẻ phù hợp của bạn dài.

Bằng cách lưu trữ các thẻ dưới dạng JSON trong bảng bài đăng trên blog, hành động tương tự chỉ yêu cầu một tìm kiếm bảng duy nhất. Sau đó, người dùng sẽ có thể xem bài đăng trên blog để chỉnh sửa nhanh hơn, nhưng điều này sẽ làm hỏng hiệu suất nếu bạn muốn tạo báo cáo về bài đăng nào được liên kết với thẻ hoặc có thể tìm kiếm theo thẻ.

Bạn cũng có thể cố gắng hủy bỏ cơ sở dữ liệu. Bằng cách sao chép dữ liệu và lưu trữ dữ liệu theo cả hai cách, bạn có thể nhận được lợi ích của cả hai phương thức. Bạn sẽ chỉ cần thêm một chút thời gian để lưu trữ dữ liệu của mình và nhiều không gian lưu trữ hơn (giá rẻ so với chi phí của sức mạnh tính toán nhiều hơn)

Đã trả lời ngày 1 tháng 6 năm 2015 lúc 7:31Jun 1, 2015 at 7:31

Cytsunnycytsunnycytsunny

4.56714 Huy hiệu vàng57 Huy hiệu bạc123 Huy hiệu Đồng14 gold badges57 silver badges123 bronze badges

Tôi sẽ nói hai lý do duy nhất để xem xét điều này là:

  • Hiệu suất không đủ tốt với cách tiếp cận bình thường hóa
  • Bạn không thể dễ dàng mô hình hóa dữ liệu đặc biệt chất lỏng/linh hoạt/thay đổi của mình

Tôi đã viết một chút về cách tiếp cận của riêng tôi ở đây:

Bạn gặp phải vấn đề về khả năng mở rộng nào khi sử dụng lưu trữ dữ liệu NoQuery?

(see the top answer)

Even JSON wasn't quite fast enough so we used a custom-text-format approach. Worked / continues to work well for us.

Is there a reason you're not using something like MongoDB? (could be MySQL is "required"; just curious)

answered Aug 25, 2010 at 8:26

BrianBrian

6,3413 gold badges32 silver badges49 bronze badges

Here is a function that would save/update keys of a JSON array in a column and another function that retrieves JSON values. This functions are created assuming that the column name of storing the JSON array is json. It is using PDO.

Save/Update Function

function save($uid, $key, $val){
 global $dbh; // The PDO object
 $sql = $dbh->prepare("SELECT `json` FROM users WHERE `id`=?");
 $sql->execute(array($uid));
 $data      = $sql->fetch();
 $arr       = json_decode($data['json'],true);
 $arr[$key] = $val; // Update the value
 $sql=$dbh->prepare("UPDATE `users` SET `json`=? WHERE `id`=?");
 $sql->execute(array(
   json_encode($arr), 
   $uid
 ));
}

where $uid is the user's id, $key - the JSON key to update and it's value is mentioned as $val.

Get Value Function

function get($uid, $key){
 global $dbh;
 $sql = $dbh->prepare("SELECT `json` FROM `users` WHERE `id`=?");
 $sql->execute(array($uid));
 $data = $sql->fetch();
 $arr  = json_decode($data['json'], true);
 return $arr[$key];
}

where $key is a key of JSON array from which we need the value.

answered Jan 13, 2014 at 15:41

SubinSubin

3,3961 gold badge33 silver badges63 bronze badges

3

It seems to me that everyone answering this question is kind-of missing the one critical issue, except @deceze -- use the right tool for the job. You can force a relational database to store almost any type of data and you can force Mongo to handle relational data, but at what cost? You end up introducing complexity at all levels of development and maintenance, from schema design to application code; not to mention the performance hit.

In 2014 we have access to many database servers that handle specific types of data exceptionally well.

  • Mongo (document storage)
  • Redis (key-value data storage)
  • MySQL/Maria/PostgreSQL/Oracle/etc (relational data)
  • CouchDB (JSON)

I'm sure I missed some others, like RabbirMQ and Cassandra. My point is, use the right tool for the data you need to store.

If your application requires storage and retrieval of a variety of data really, really fast, (and who doesn't) don't shy away from using multiple data sources for an application. Most popular web frameworks provide support for multiple data sources (Rails, Django, Grails, Cake, Zend, etc). This strategy limits the complexity to one specific area of the application, the ORM or the application's data source interface.

answered Jul 18, 2014 at 19:58

Hướng dẫn how to save json in mysql - cách lưu json trong mysql

2

Early support for storing JSON in MySQL has been added to the MySQL 5.7.7 JSON labs release (linux binaries, source)! The release seems to have grown from a series of JSON-related user-defined functions made public back in 2013.

This nascent native JSON support seems to be heading in a very positive direction, including JSON validation on INSERT, an optimized binary storage format including a lookup table in the preamble that allows the JSN_EXTRACT function to perform binary lookups rather than parsing on every access. There is also a whole raft of new functions for handling and querying specific JSON datatypes:

CREATE TABLE users (id INT, preferences JSON);

INSERT INTO users VALUES (1, JSN_OBJECT('showSideBar', true, 'fontSize', 12));

SELECT JSN_EXTRACT(preferences, '$.showSideBar') from users;

+--------------------------------------------------+
| id   | JSN_EXTRACT(preferences, '$.showSideBar') |
+--------------------------------------------------+
| 1    | true                                      |
+--------------------------------------------------+

IMHO, the above is a great use case for this new functionality; many SQL databases already have a user table and, rather than making endless schema changes to accommodate an evolving set of user preferences, having a single JSON column a single

SELECT
    SUBSTRING(
        REPLACE(REPLACE(REPLACE(column, '{', ''), '}', ','), '"', ''),
        LOCATE(
            CONCAT('myfield', ':'),
            REPLACE(REPLACE(REPLACE(column, '{', ''), '}', ','), '"', '')
        ) + CHAR_LENGTH(CONCAT('myfield', ':')),
        LOCATE(
            ',',
            SUBSTRING(
                REPLACE(REPLACE(REPLACE(column, '{', ''), '}', ','), '"', ''),
                LOCATE(
                    CONCAT('myfield', ':'),
                    REPLACE(REPLACE(REPLACE(column, '{', ''), '}', ','), '"', '')
                ) + CHAR_LENGTH(CONCAT('myfield', ':'))
            )
        ) - 1
    )
    AS myfield
FROM mytable WHERE id = '3435'
2 away is perfect. Especially as it's unlikely that it would ever need to be queried for individual items.

While it's still early days, the MySQL server team are doing a great job of communicating the changes on the blog.

answered Jul 17, 2015 at 12:37

Rich PollockRich Pollock

1,19012 silver badges15 bronze badges

JSON is a valid datatype in PostgreSQL database as well. However, MySQL database has not officially supported JSON yet. But it's baking: http://mysqlserverteam.com/json-labs-release-native-json-data-type-and-binary-format/

I also agree that there are many valid cases that some data is better be serialized to a string in a database. The primary reason might be when it's not regularly queried, and when it's own schema might change - you don't want to change the database schema corresponding to that. The second reason is when the serialized string is directly from external sources, you may not want to parse all of them and feed in the database at any cost until you use any. So I'll be waiting for the new MySQL release to support JSON since it'll be easier for switching between different database then.

answered Jul 21, 2015 at 18:06

I know this is really late but I did have a similar situation where I used a hybrid approach of maintaining RDBMS standards of normalizing tables upto a point and then storing data in JSON as text value beyond that point. So for example I store data in 4 tables following RDBMS rules of normalization. However in the 4th table to accomodate dynamic schema I store data in JSON format. Every time I want to retrieve data I retrieve the JSON data, parse it and display it in Java. This has worked for me so far and to ensure that I am still able to index the fields I transform to json data in the table to a normalized manner using an ETL. This ensures that while the user is working on the application he faces minimal lag and the fields are transformed to a RDBMS friendly format for data analysis etc. I see this approach working well and believe that given MYSQL (5.7+) also allows parsing of JSON this approach gives you the benefits of both RDBMS and NOSQL databases.

Đã trả lời ngày 5 tháng 1 năm 2018 lúc 9:15Jan 5, 2018 at 9:15

Prashantprashantprashant

1.3621 Huy hiệu vàng13 Huy hiệu bạc19 Huy hiệu đồng1 gold badge13 silver badges19 bronze badges

Tôi sử dụng JSON để ghi lại bất cứ điều gì cho một dự án, tôi sử dụng ba bảng trên thực tế! Một cho dữ liệu trong JSON, một cho chỉ số của mỗi siêu dữ liệu của cấu trúc JSON (mỗi meta được mã hóa bởi một ID duy nhất) và một cho người dùng phiên, đó là tất cả. Điểm chuẩn không thể được định lượng ở trạng thái mã sớm này, nhưng đối với ví dụ, tôi là người dùng chế độ xem (tham gia bên trong với chỉ mục) để có được một danh mục (hoặc bất cứ điều gì, như người dùng, ...) và nó rất chậm (rất chậm , Chế độ xem được sử dụng trong MySQL không phải là cách tốt). Mô -đun tìm kiếm, trong cấu trúc này, có thể làm bất cứ điều gì tôi muốn, nhưng, tôi nghĩ MongoDB sẽ hiệu quả hơn trong khái niệm bản ghi dữ liệu JSON đầy đủ này. Đối với mẫu mực của tôi, tôi xem người dùng để tạo cây danh mục và bánh mì, Chúa ơi! Rất nhiều truy vấn để làm! Apache đã biến mất! Và trên thực tế, đối với trang web nhỏ này, tôi sử dụng một PHP tạo ra cây và bánh mì, việc trích xuất dữ liệu được thực hiện bởi mô -đun tìm kiếm (người chỉ sử dụng chỉ mục), bảng dữ liệu chỉ được sử dụng để cập nhật. Nếu tôi muốn, tôi có thể phá hủy tất cả các chỉ số và tái tạo nó bằng từng dữ liệu và thực hiện công việc ngược lại, như, phá hủy tất cả dữ liệu (JSON) và chỉ tái tạo nó bằng bảng chỉ mục. Dự án của tôi còn trẻ, chạy theo PHP và MySQL, nhưng đôi khi tôi sử dụng Node JS và MongoDB sẽ hiệu quả hơn cho dự án này.

Sử dụng JSON nếu bạn nghĩ rằng bạn có thể làm, chỉ để làm điều đó, bởi vì bạn có thể! Và, quên nó nếu đó là một sai lầm; Hãy thử bằng cách đưa ra lựa chọn tốt hay xấu, nhưng hãy thử!

Thấp

một người dùng Pháp

Đã trả lời ngày 2 tháng 8 năm 2013 lúc 23:34Aug 2, 2013 at 23:34

2

Tôi tin rằng việc lưu trữ JSON trong cơ sở dữ liệu MySQL trên thực tế đánh bại mục đích sử dụng RDBMS vì nó được sử dụng. Tôi sẽ không sử dụng nó trong bất kỳ dữ liệu nào sẽ được thao tác tại một số điểm hoặc báo cáo, vì nó không chỉ thêm độ phức tạp mà còn có thể dễ dàng tác động đến hiệu suất tùy thuộc vào cách sử dụng.

Tuy nhiên, tôi đã tò mò nếu có ai khác nghĩ về một lý do có thể để thực sự làm điều này. Tôi đã suy nghĩ để tạo ra một ngoại lệ cho mục đích ghi nhật ký. Trong trường hợp của tôi, tôi muốn ghi nhật ký các yêu cầu có số lượng tham số và lỗi thay đổi. Trong tình huống này, tôi muốn sử dụng các bảng cho loại yêu cầu và các yêu cầu với một chuỗi JSON gồm các giá trị khác nhau đã thu được.

Trong tình huống trên, các yêu cầu được ghi lại và không bao giờ thao tác hoặc lập chỉ mục trong trường chuỗi JSON. Tuy nhiên, trong một môi trường phức tạp hơn, có lẽ tôi sẽ cố gắng sử dụng một cái gì đó có ý định nhiều hơn cho loại dữ liệu này và lưu trữ nó với hệ thống đó. Như những người khác đã nói, nó thực sự phụ thuộc vào những gì bạn đang cố gắng thực hiện, nhưng các tiêu chuẩn theo sau luôn giúp tuổi thọ và độ tin cậy!

Đã trả lời ngày 16 tháng 9 năm 2014 lúc 16:11Sep 16, 2014 at 16:11

MarkmarkMark

1631 Huy hiệu bạc10 Huy hiệu đồng1 silver badge10 bronze badges

Bạn có thể sử dụng chính này

Sau khi cài đặt nó vào máy chủ (chỉ cần đặc quyền gốc không siêu), bạn có thể làm điều gì đó như thế này:

SELECT
    SUBSTRING(
        REPLACE(REPLACE(REPLACE(column, '{', ''), '}', ','), '"', ''),
        LOCATE(
            CONCAT('myfield', ':'),
            REPLACE(REPLACE(REPLACE(column, '{', ''), '}', ','), '"', '')
        ) + CHAR_LENGTH(CONCAT('myfield', ':')),
        LOCATE(
            ',',
            SUBSTRING(
                REPLACE(REPLACE(REPLACE(column, '{', ''), '}', ','), '"', ''),
                LOCATE(
                    CONCAT('myfield', ':'),
                    REPLACE(REPLACE(REPLACE(column, '{', ''), '}', ','), '"', '')
                ) + CHAR_LENGTH(CONCAT('myfield', ':'))
            )
        ) - 1
    )
    AS myfield
FROM mytable WHERE id = '3435'
3

Nó sẽ trả về

SELECT
    SUBSTRING(
        REPLACE(REPLACE(REPLACE(column, '{', ''), '}', ','), '"', ''),
        LOCATE(
            CONCAT('myfield', ':'),
            REPLACE(REPLACE(REPLACE(column, '{', ''), '}', ','), '"', '')
        ) + CHAR_LENGTH(CONCAT('myfield', ':')),
        LOCATE(
            ',',
            SUBSTRING(
                REPLACE(REPLACE(REPLACE(column, '{', ''), '}', ','), '"', ''),
                LOCATE(
                    CONCAT('myfield', ':'),
                    REPLACE(REPLACE(REPLACE(column, '{', ''), '}', ','), '"', '')
                ) + CHAR_LENGTH(CONCAT('myfield', ':'))
            )
        ) - 1
    )
    AS myfield
FROM mytable WHERE id = '3435'
4. Bạn có thể trả lại bất cứ thứ gì bên trong JSON bằng cách sử dụng phần tốt này là nó hỗ trợ MySQL 5.1.5.2.5.6. Và bạn không cần phải cài đặt bất kỳ nhị phân nào trên máy chủ.

Dựa trên dự án cũ

SELECT
    SUBSTRING(
        REPLACE(REPLACE(REPLACE(column, '{', ''), '}', ','), '"', ''),
        LOCATE(
            CONCAT('myfield', ':'),
            REPLACE(REPLACE(REPLACE(column, '{', ''), '}', ','), '"', '')
        ) + CHAR_LENGTH(CONCAT('myfield', ':')),
        LOCATE(
            ',',
            SUBSTRING(
                REPLACE(REPLACE(REPLACE(column, '{', ''), '}', ','), '"', ''),
                LOCATE(
                    CONCAT('myfield', ':'),
                    REPLACE(REPLACE(REPLACE(column, '{', ''), '}', ','), '"', '')
                ) + CHAR_LENGTH(CONCAT('myfield', ':'))
            )
        ) - 1
    )
    AS myfield
FROM mytable WHERE id = '3435'
5, nhưng ngày nay nó vẫn hoạt động https://code.google.com/archive/p/common-schema/

Đã trả lời ngày 12 tháng 5 năm 2016 lúc 20:58May 12, 2016 at 20:58

1

Chúng ta có thể lưu dữ liệu 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.. 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.

Có tốt không khi lưu trữ JSON trong MySQL?

MYSQL JSON Kiểu dữ liệu cho phép bạn lưu trữ dữ liệu JSON sao cho bạn có thể dễ dàng đọc hoặc tìm kiếm các giá trị trong đó bằng cách sử dụng chỉ mục khóa hoặc mảng, làm cho nó thực sự nhanh chóng.Không cần phải chuyển đổi văn bản sang JSON hoặc ngược lại để truy vấn dữ liệu.. There is no need to convert text to JSON or vice versa for querying data.

Tôi có thể lưu trữ JSON trong DB không?

Bạn có thể lưu trữ dữ liệu JSON trong cơ sở dữ liệu Oracle bằng các cột có kiểu dữ liệu là Varchar2, Clob hoặc Blob. .

Chúng ta có thể lưu trữ mảng json trong mysql không?

Lưu ý rằng bất kỳ cơ sở dữ liệu nào sẽ chấp nhận tài liệu JSON dưới dạng một chuỗi chuỗi duy nhất.Tuy nhiên, Hỗ trợ MySQL và PostgreSQL đã xác thực dữ liệu JSON được xác thực trong các cặp khóa/giá trị thực thay vì một chuỗi cơ bản.MySQL and PostgreSQL support validated JSON data in real key/value pairs rather than a basic string.