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 ;
@guss77
Copy link

guss77 commented Mar 11, 2024

@theking2 - yes, this is more or less what I use. I came here looking for an implementation and after I found it lacking, I just wanted to warn people away (assuming they are looking for a correct implementation). If you continue looking elsewhere, you'd find the implementation that you posted, posted in many other places - hopefully with a good explanation of what it does and why it is good, which I saw no need to duplicate again.

@theking2
Copy link

excellent. I just happened to stumble on your gist first. Hence my two cents.

@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