亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何將GUID存儲在MySQL表中?

如何將GUID存儲在MySQL表中?

繁花如伊 2019-10-23 16:25:00
我使用varchar(36)還是有更好的方法呢?
查看完整描述

3 回答

?
胡說叔叔

TA貢獻1804條經驗 獲得超8個贊

當我問到為對象存儲GUID的最佳方法時,我的DBA問我為什么當我可以用Integer以4字節進行相同的操作時為什么需要存儲16字節。自從他向我提出挑戰以來,我認為現在是提起挑戰的好時機。話雖如此...

如果要最大程度地利用存儲空間,可以將GUId存儲為CHAR(16)二進制文件。


查看完整回答
反對 回復 2019-10-23
?
SMILET

TA貢獻1796條經驗 獲得超4個贊

通過ThaBadDawg的答案,使用這些方便的函數(由于我的聰明的同事)使36個長度的字符串返回到16個字節數組。


DELIMITER $$


CREATE FUNCTION `GuidToBinary`(

    $Data VARCHAR(36)

) RETURNS binary(16)

DETERMINISTIC

NO SQL

BEGIN

    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 utf8

DETERMINISTIC

NO SQL

BEGIN

    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-LMNOPQRSTUVW

78563412-BC9A-FGDE-HIJK-LMNOPQRSTUVW

刪除的破折號:


123456789ABCDEFGHIJKLMNOPQRSTUVW

78563412BC9AFGDEHIJKLMNOPQRSTUVW


查看完整回答
反對 回復 2019-10-23
  • 3 回答
  • 0 關注
  • 1364 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號