Skip to content

Instantly share code, notes, and snippets.

@jamesgmarks
Last active June 25, 2025 19:02
Show Gist options
  • Save jamesgmarks/56502e46e29a9576b0f5afea3a0f595c to your computer and use it in GitHub Desktop.
Save jamesgmarks/56502e46e29a9576b0f5afea3a0f595c to your computer and use it in GitHub Desktop.
MySQL/MariaDB BIN_TO_UUID and UUID_TO_BIN Polyfill
DELIMITER //
CREATE FUNCTION BIN_TO_UUID(b BINARY(16))
RETURNS CHAR(36)
BEGIN
DECLARE hexStr CHAR(32);
SET hexStr = HEX(b);
RETURN LOWER(CONCAT(
SUBSTR(hexStr, 1, 8), '-',
SUBSTR(hexStr, 9, 4), '-',
SUBSTR(hexStr, 13, 4), '-',
SUBSTR(hexStr, 17, 4), '-',
SUBSTR(hexStr, 21)
));
END//
CREATE FUNCTION UUID_TO_BIN(uuid CHAR(36))
RETURNS BINARY(16)
BEGIN
RETURN UNHEX(REPLACE(uuid, '-', ''));
END//
DELIMITER ;
@leiless
Copy link

leiless commented May 23, 2025

Awesome! it works!

Explicitly add the characteristic annotations

https://mariadb.com/kb/en/create-function/

USE your_db;

DELIMITER $$

CREATE FUNCTION BIN_TO_UUID(b BINARY(16)) RETURNS CHAR(36)
DETERMINISTIC NO SQL -- Added
BEGIN
    DECLARE hexStr CHAR(32);
    SET hexStr = HEX(b);
    RETURN LOWER(CONCAT(
        SUBSTR(hexStr, 1, 8), '-',
        SUBSTR(hexStr, 9, 4), '-',
        SUBSTR(hexStr, 13, 4), '-',
        SUBSTR(hexStr, 17, 4), '-',
        SUBSTR(hexStr, 21)
    ));
END$$

CREATE FUNCTION UUID_TO_BIN(uuid CHAR(36)) RETURNS BINARY(16)
DETERMINISTIC NO SQL -- Added
BEGIN
    RETURN UNHEX(REPLACE(uuid, '-', ''));
END$$

DELIMITER ;

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment