bhylu.com

Advertisements

MySQL JSON

Store flexible metadata deliberately and project typed values when querying structured arrays.

How it works

MySQL’s JSON type validates document syntax and provides structured functions. It is not the same storage contract as every MariaDB JSON alias. Flexible metadata can be useful for optional part attributes, while stable relationships and frequently validated fields often belong in ordinary columns. This example reads a small fixed JSON array with JSON_TABLE, giving each projected value an explicit SQL type rather than relying on unstructured string slicing.

Run in a disposable MySQL lab

Use Oracle MySQL 8.4 with InnoDB, not Bhylu’s SQLite playground. The examples were reviewed on MySQL 8.4.8. XAMPP may provide MariaDB, which has different feature and collation behaviour. Check your actual server before running the script. These lessons do not require a change to Bhylu’s PHP, Apache or normal database service.

  1. On a separate lab instance, create the empty bhylu_mysql_lab schema. Stop if it already exists; do not overwrite an existing database.
  2. Select that schema and import the complete repair-parts seed once. It sets the documented session mode, utf8mb4 collation, UTC and English date-name locale.
  3. Run this lesson in a fresh copy of the seed, not after another lesson’s writes. Use the command-line client or a compatible editor. DELIMITER lines are client instructions for stored-program examples.

Download this complete lesson script. Its setup is the linked seed; review the dataset before changing it. Administrative and destructive examples are restricted to the specifically named disposable objects. Every script repeats the session settings because each new connection has its own session. No MySQL browser runner is currently available.

Example

lesson.sql

SET NAMES utf8mb4 COLLATE utf8mb4_0900_ai_ci;
SET SESSION sql_mode = 'STRICT_TRANS_TABLES,ONLY_FULL_GROUP_BY,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
SET SESSION time_zone = '+00:00';
SET SESSION lc_time_names = 'en_US';
SET @details = '[{"code":"patch","pieces":2},{"code":"hinge","pieces":1}]';
SELECT code,pieces
FROM JSON_TABLE(@details, '$[*]' COLUMNS (
  code VARCHAR(20) PATH '$.code',
  pieces INT PATH '$.pieces'
)) AS rows_from_json
ORDER BY code;
SELECT JSON_VALID('{bad') AS valid_document;

Expected result

hinge | 1
patch | 2
0

The array becomes two typed rows, and the malformed document check returns zero. Define ON EMPTY and ON ERROR behaviour when accepting external documents; missing paths and incompatible types should not become accidental defaults. JSON syntax validity does not establish that a document contains authorized IDs or sensible quantities. Apply domain validation before using projected values in writes.

Use the official MySQL 8.4 reference for statement contracts and version details.

Advertisements