SMILET
通过ThaBadDawg的答案,使用这些方便的函数(由于我的聪明的同事)使36个长度的字符串返回到16个字节数组。DELIMITER $$CREATE FUNCTION `GuidToBinary`( $Data VARCHAR(36)) RETURNS binary(16)DETERMINISTICNO SQLBEGIN DECLARE $Result BINARY(16) DEFAULT NULL; IF $Data IS NOT NULL THEN SET $Data = REPLACE($Data,'-',''); SET $Result = CONCAT( UNHEX(SUBSTRING($Data,7,2)), UNHEX(SUBSTRING($Data,5,2)), UNHEX(SUBSTRING($Data,3,2)), UNHEX(SUBSTRING($Data,1,2)), UNHEX(SUBSTRING($Data,11,2)),UNHEX(SUBSTRING($Data,9,2)), UNHEX(SUBSTRING($Data,15,2)),UNHEX(SUBSTRING($Data,13,2)), UNHEX(SUBSTRING($Data,17,16))); END IF; RETURN $Result;END$$CREATE FUNCTION `ToGuid`( $Data BINARY(16)) RETURNS char(36) CHARSET utf8DETERMINISTICNO SQLBEGIN DECLARE $Result CHAR(36) DEFAULT NULL; IF $Data IS NOT NULL THEN SET $Result = CONCAT( HEX(SUBSTRING($Data,4,1)), HEX(SUBSTRING($Data,3,1)), HEX(SUBSTRING($Data,2,1)), HEX(SUBSTRING($Data,1,1)), '-', HEX(SUBSTRING($Data,6,1)), HEX(SUBSTRING($Data,5,1)), '-', HEX(SUBSTRING($Data,8,1)), HEX(SUBSTRING($Data,7,1)), '-', HEX(SUBSTRING($Data,9,2)), '-', HEX(SUBSTRING($Data,11,6))); END IF; RETURN $Result;END$$CHAR(16)实际上是一种BINARY(16),选择您喜欢的口味为了更好地遵循代码,请使用下面给出了数字顺序GUID的示例。(非法字符用于说明目的-每个位置都有一个唯一字符。)这些函数将转换字节顺序,以实现高级索引聚类的位顺序。示例下面显示了重新排序的GUID。12345678-9ABC-DEFG-HIJK-LMNOPQRSTUVW78563412-BC9A-FGDE-HIJK-LMNOPQRSTUVW删除的破折号:123456789ABCDEFGHIJKLMNOPQRSTUVW78563412BC9AFGDEHIJKLMNOPQRSTUVW