Creating JSON Values Updates of multiple  JSON  columns in a single  UPDATE  statement can be optimized in this fashion; MySQL can perform partial updates of only those columns whose values are updated using the three functions just listed. The update can use nested calls to any of the functions listed in the previous item, in any combination, as long as the input and target columns are the same. A possible exception to this requirement occurs when a previous partial update has left sufficient space for the larger value. You can use the function  JSON_STORAGE_FREE()  see how much space has been freed by any partial updates of a  JSON  column. Such partial updates can be written to the binary log using a compact format that saves space; this can be enabled by setting the  binlog_row_value_options  system variable to  PARTIAL_JSON . See the description of this variable for more information. The next few sections provide basic information regarding the creation and manipulation of JSON values. A JSON array contains a list of values separated by commas and enclosed within  [  and  ]  characters: A JSON object contains a set of key-value pairs separated by commas and enclosed within  {  and  } characters: As the examples illustrate, JSON arrays and objects can contain scalar values that are strings or numbers, the JSON null literal, or the JSON boolean true or false literals. Keys in JSON objects must be strings. Temporal (date, time, or datetime) scalar values are also permitted: Nesting is permitted within JSON array elements and JSON object key values: You can also obtain JSON values from a number of functions supplied by MySQL for this purpose (see Section 12.18.2, “Functions That Create JSON Values” ) as well as by casting values of other types to the JSON  type using  CAST( value  AS JSON)  (see Converting between JSON and non-JSON values). The next several paragraphs describe how MySQL handles JSON values provided as input. In MySQL, JSON values are written as strings. MySQL parses any string used in a context that requires a JSON value, and produces an error if it is not valid as JSON. These contexts include inserting a value into a column that has the  JSON  data type and passing an argument to a function that expects a JSON 2069 [99, {"id": "HK500", "cost": 75.99}, ["hot", "cold"]] {"k1": "value", "k2": [10, 20]} ["12:18:29.000000", "2015-07-29", "2015-07-29 12:18:29.000000"] {"k1": "value", "k2": 10} ["abc", 10, null, true, false] Creating JSON Values •All changes replace existing array or object values with new ones, and do not add any new elements to the parent object or array. •The value being replaced must be at least as large as the replacement value. In other words, the new value cannot be any larger than the old one. •The input column and the target column must be the same column; a statement such as  UPDATE mytable SET jcol1 = JSON_SET(jcol2, ’$.a’, 100)  cannot be performed as a partial update.