MySQL String Concatenation
Choose concatenation behaviour deliberately instead of turning missing data into accidental blank reports.
How it works
CONCAT joins its arguments but returns NULL when an argument is NULL. CONCAT_WS uses a separator and skips NULL value arguments, while empty strings still participate. This difference matters when an optional note becomes part of a display label. SPACE and REPEAT can construct controlled formatting text, but should not be used to manufacture huge unbounded values from untrusted input. The examples keep their output short and visible.
Choose the function from its contract
- CONCAT: Combines known fields in a label.
- CONCAT_WS: Skips the absent value rather than nulling the label.
- SPACE: Checks the generated spaces without invisible output.
- REPEAT: Repeats a small known fragment.
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.
- On a separate lab instance, create the empty bhylu_mysql_lab schema. Stop if it already exists; do not overwrite an existing database.
- 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.
- 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
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';
SELECT 'CONCAT' AS operation, CONCAT('North', ': ', 'patch') AS result;
SELECT 'CONCAT_WS' AS operation, CONCAT_WS(' / ','North',NULL,'patch') AS result;
SELECT 'SPACE' AS operation, CHAR_LENGTH(SPACE(3)) AS result;
SELECT 'REPEAT' AS operation, REPEAT('-',3) AS result;
Expected result
CONCAT | North: patch CONCAT_WS | North / patch SPACE | 3 REPEAT | ---
Keep the assembled label as a display result, not as a replacement for separate searchable columns. An application should still know which part is a depot and which is an item. A separator does not create a robust serialization format when values themselves may contain that separator. Use structured formats when another program must parse the result.
Use the official MySQL 8.4 reference for statement contracts and version details.