Introduction to MySQL JSON Data Type

The JSON data type in MySQL was introduced in MySQL version 5.7, allowing users to store and process data in JSON format. JSON is a lightweight data interchange format widely used in web applications. The JSON type in MySQL is considered a text type, and it can store and retrieve large JSON texts.


To create a column with a JSON data type in MySQL, you need to use the JSON keyword. Here is an example syntax for creating a column named json_col with a JSON data type:

CREATE TABLE table_name (json_col JSON);

Use Cases

Some use cases for using the JSON data type include:

  • Storing unstructured data: The JSON data type is a schema-less text type that can store irregular or unstructured data.
  • Storing structured data: The JSON data type can also store structured data, but since there is no enforced schema, data integrity must be handled in the application.
  • Storing dynamic data: The JSON data type is a dynamic type that allows you to add or remove JSON properties when inserting or updating data.


Here are two examples of using the JSON data type.

Example 1

Create a table named customers with a JSON column personal_info to store personal information for each customer.

CREATE TABLE customers (
  personal_info JSON

INSERT INTO customers (personal_info)
VALUES ('{"name": "John Smith", "age": 35, "address": {"city": "New York", "state": "NY"}}'),
       ('{"name": "Alice Brown", "age": 28, "address": {"city": "Los Angeles", "state": "CA"}}'),
       ('{"name": "Bob Johnson", "age": 42, "address": {"city": "Chicago", "state": "IL"}}');

Query all customer information:

SELECT * FROM customers;


| id | personal_info                                                                         |
|  1 | {"name": "John Smith", "age": 35, "address": {"city": "New York", "state": "NY"}}     |
|  2 | {"name": "Alice Brown", "age": 28, "address": {"city": "Los Angeles", "state": "CA"}} |
|  3 | {"name": "Bob Johnson", "age": 42, "address": {"city": "Chicago", "state": "IL"}}     |

Example 2

Create a table named users with a JSON column data to store user information.

  name VARCHAR(50) NOT NULL,
  data JSON,

INSERT INTO users (name, data)
VALUES ('John', '{"age": 25, "email": "[email protected]", "city": "New York"}');

INSERT INTO users (name, data)
VALUES ('Sarah', '{"age": 30, "email": "[email protected]", "city": "London", "phone": "123456789"}');

SELECT * FROM users;


| id | name  | data                                                                              |
|  1 | John  | {"age": 25, "email": "[email protected]", "city": "New York"}                      |
|  2 | Sarah | {"age": 30, "email": "[email protected]", "city": "London", "phone": "123456789"} |

As we can see, we successfully added two users in the users table, and each user has a JSON data object as the value of its data column.


MySQL’s JSON data type provides a flexible way to store and query unstructured data. The JSON type supports storing and manipulating standard JSON format data in MySQL, and provides many useful functions and operators, such as JSON_EXTRACT, JSON_ARRAY, JSON_OBJECT, etc., to facilitate the manipulation of JSON data.

When using the JSON type, it is important to ensure the validity of the data, as data that does not conform to the JSON format will not be handled correctly. In addition, columns using the JSON type require the use of specific MySQL functions for operations and do not support regular SQL statements, which may require additional coding and maintenance work.

In development, the JSON type is commonly used for storing and querying data with no fixed structure, such as application logs, JSON data returned from APIs, etc. Using the JSON type allows developers to manipulate and query this data more conveniently, improving development efficiency.

However, it should be noted that although the JSON data type is very flexible, it also has some disadvantages. Firstly, compared to traditional data types in relational databases, the query and filtering efficiency of JSON data type is lower, especially for large datasets. Secondly, since the field names and values in JSON are strings, type conversion is required for sorting and comparison, which may result in unnecessary performance losses. Finally, as JSON data type is not a standard SQL data type, it may affect the compatibility of certain tools and libraries.

In conclusion, although MySQL provides the JSON data type for convenient handling of unstructured data, its applicability and performance issues should be carefully considered when using it.