最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL使用UUID_SHORT()的問題解決

 更新時(shí)間:2023年08月31日 11:39:46   作者:小_杭  
MySQL的UUID_SHORT()函數(shù)是一個(gè)用于生成短UUID的函數(shù),該函數(shù)返回一個(gè)64位的整數(shù),可以用于唯一標(biāo)識一條數(shù)據(jù)記錄,本文介紹了MySQL使用UUID_SHORT()的問題解決,感興趣的可以了解一下

問題說明

app_msg的主鍵id 設(shè)置的類型為:bigint 20

使用插入語句:INSERT INTOapp_msg(id,...) VALUES (UUID_SHORT(),...)

然而系統(tǒng)報(bào)錯(cuò):[Err] 1264 - Out of range value for column 'id' at row 1

在測試環(huán)境使用時(shí)沒有問題,但是在準(zhǔn)生產(chǎn)數(shù)據(jù)庫使用時(shí)報(bào)錯(cuò)了

簡單分析解決

分析

在兩個(gè)數(shù)據(jù)庫查看UUID_SHORT()生成的情況:

select UUID_SHORT()   
--結(jié)果1:26047177025388691      這里生成了17位的UUID_SHORT
--結(jié)果2:18040425909390934036   這里生成了20位的UUID_SHORT

結(jié)果1為17位沒問題,結(jié)果2位20位導(dǎo)致報(bào)錯(cuò)的時(shí)候超過最大值

解決

這里可以知道原因是在字段類型上面,bigint 20 對應(yīng)的類型是 long long 類型 【長度為:(-2^63 ~ 2^63-1) 10^18 19位數(shù)字】;

而UUID_SHORT() 返回的是 unsigned long long 類型【長度為:(0 ~ 2^64-1) 10^19 20位數(shù)字】

所以,原因是在MySQL設(shè)置的時(shí)候沒有**勾選無符號****這個(gè)選項(xiàng)導(dǎo)致的,勾選上就解決了。╮(╯▽╰)╭ 就是這么的簡單的地方。

臨時(shí)解決方式,使用時(shí)間錯(cuò)手動(dòng)生成了一個(gè)19位以內(nèi)的隨機(jī)id:

FLOOR(REPLACE(unix_timestamp(current_timestamp(3)),'.',''))*10000+FLOOR(RAND()*10000)

認(rèn)真查了一些詳細(xì)的資料

官方資料

版本:MySQL 5.7

UUID_SHORT()

將“ 短 ”通用標(biāo)識符作為64位無符號整數(shù)返回。返回的值 UUID_SHORT()與UUID()函數(shù)返回的字符串格式128位標(biāo)識符 不同,并且具有不同的唯一性屬性。UUID_SHORT()如果滿足以下條件,則保證值 是唯一的:

  • 在server_id當(dāng)前服務(wù)器的值介于0和255之間,您的設(shè)置主從服務(wù)器中是唯一的
  • 您不會(huì)在mysqld restarts 之間設(shè)置服務(wù)器主機(jī)的系統(tǒng)時(shí)間
  • UUID_SHORT()在mysqld重啟 之間, 你平均每秒調(diào)用的次數(shù)少于1600萬次

該UUID_SHORT()返回值的構(gòu)造是這樣的:

  (server_id & 255) << 56
+ (server_startup_time_in_seconds << 24)
+ incremented_variable++;
mysql> SELECT UUID_SHORT();
        -> 92395783831158784

UUID_SHORT() 不適用于基于語句的復(fù)制。

按照以上官方的說法,UUID_SHORT返回的值為64位無符號整數(shù),也就是unsigned long long類型。而且,由于使用到了時(shí)間搓,這個(gè)的初始值會(huì)很大(通常都會(huì)到17位數(shù)字)。

但是,這并不保證其不會(huì)返回18,19,20位的數(shù)據(jù),只能保證在2^64-1以內(nèi)(最大達(dá)到20位數(shù)字);

目前沒有查到說可以調(diào)整或初始設(shè)置UUID_SHORT() 的配置

補(bǔ)充BUG–Java數(shù)據(jù)接收錯(cuò)誤

在數(shù)據(jù)庫使用了無符號bigint類型之后,使用UUID_SHORT()進(jìn)行生產(chǎn)id的時(shí)候,數(shù)據(jù)庫是可以插入,沒有問題的。

**但是,**由于使用的是JAVA的Long類型進(jìn)行數(shù)據(jù)接收,這里有可能是會(huì)超出長度的?!緮?shù)據(jù)為無符號long類型這里差了1位】

因?yàn)椋琂AVA本身的基本類型是不支持無符號類型的,所以這里的轉(zhuǎn)換會(huì)有問題。

而且,由于是已經(jīng)遇到了,上面開始的那個(gè)BUG,這里是肯定是會(huì)超出的?!綰UID_SHORT的值是在mysql啟動(dòng)的時(shí)候自動(dòng)配置的,所以相當(dāng)?shù)臒o奈╮(╯_╰)╭】

所以這里,特別說明記錄一下,這個(gè)問題。

解決辦法:目前還是使用 【自定義的ID生成】,或者 上面 的臨時(shí)解決方式【時(shí)間戳拼接】其實(shí)最好的還是使用32位的UUID比較的好

到此這篇關(guān)于MySQL使用UUID_SHORT()的問題解決的文章就介紹到這了,更多相關(guān)MySQL UUID_SHORT()內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 統(tǒng)信UOS 安裝二級制版MySQL9的圖文步驟

    統(tǒng)信UOS 安裝二級制版MySQL9的圖文步驟

    本文主要介紹了統(tǒng)信UOS 安裝二級制版MySQL9的圖文步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-02-02
  • mysql error:#1062 Duplicate entry ‘***′ for key 1問題解決方法

    mysql error:#1062 Duplicate entry ‘***′ for key 1問題解決方法

    今天公司的一個(gè)網(wǎng)站突然提示MySQL Error Duplicate entry '96624' for key 1錯(cuò)誤,經(jīng)過分析這個(gè)問題是由于mysql表中的一個(gè)id自增長字段導(dǎo)致。
    2011-09-09
  • Mysql 5.7.19 winx64 ZIP Archive 安裝及使用過程問題小結(jié)

    Mysql 5.7.19 winx64 ZIP Archive 安裝及使用過程問題小結(jié)

    本篇文章給大家介紹了mysql 5.7.19 winx64 ZIP Archive 安裝及使用過程問題小結(jié),需要的朋友可以參考下
    2017-07-07
  • zabbix監(jiān)控MySQL主從狀態(tài)的方法詳解

    zabbix監(jiān)控MySQL主從狀態(tài)的方法詳解

    這篇文章主要介紹了zabbix--監(jiān)控MySQL主從狀態(tài)的方法,本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下
    2019-06-06
  • MySQL提示表不存在的解決error:1146:Table doesn‘t exist的原因和解決方法

    MySQL提示表不存在的解決error:1146:Table doesn‘t exist的原因和解決

    在使用MySQL的過程中,有時(shí)會(huì)遇到“Table doesn't exist”(表不存在)的錯(cuò)誤,錯(cuò)誤代碼通常為1146,這個(gè)問題可能由多種原因引起,本文將幫助你診斷和解決這個(gè)問題,如果遇到同樣問題的小伙伴跟著小編一起來看看吧
    2024-12-12
  • Mysql中二進(jìn)制日志操作方法說明

    Mysql中二進(jìn)制日志操作方法說明

    這篇文章主要介紹了Mysql中二進(jìn)制日志操作方法,二進(jìn)制日志中以“事件”的形式記錄了數(shù)據(jù)庫中數(shù)據(jù)的變化情況,對于MySQL數(shù)據(jù)庫的災(zāi)難恢復(fù)起著重要的作用
    2023-03-03
  • MySQL底層數(shù)據(jù)結(jié)構(gòu)選用B+樹的原因

    MySQL底層數(shù)據(jù)結(jié)構(gòu)選用B+樹的原因

    大家好,本篇文章主要講的是MySQL底層數(shù)據(jù)結(jié)構(gòu)選用B+樹的原因,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • MySQL DELETE語法使用詳細(xì)解析

    MySQL DELETE語法使用詳細(xì)解析

    此文章主要講述的是MySQL DELETE語法的詳細(xì)解析,以及一些在實(shí)際操作中值得我們大家注意的相關(guān)事項(xiàng)的描述,以下就是正文的主要內(nèi)容
    2013-03-03
  • Mysql 中的secure_file_priv參數(shù)設(shè)置方法

    Mysql 中的secure_file_priv參數(shù)設(shè)置方法

    MySQL的secure_file_priv變量用于限制文件的讀取和寫入,在后期漏洞注入中,可以使用INTO DUMPFILE和INTO OUTFILE將數(shù)據(jù)寫入文件,或者使用LOAD_FILE下載文件,本文介紹Mysql 中的secure_file_priv參數(shù)設(shè)置,感興趣的朋友一起看看吧
    2024-11-11
  • MySQL索引失效的幾種常見場景詳解

    MySQL索引失效的幾種常見場景詳解

    索引失效指的是在進(jìn)行查詢操作時(shí),本應(yīng)該使用索引來提升查詢效率的場景下,數(shù)據(jù)庫沒有利用索引,而是采用了全表掃描的方式,這會(huì)大大增加查詢時(shí)間和系統(tǒng)負(fù)擔(dān),這篇文章主要介紹了MySQL索引失效的幾種常見場景的相關(guān)資料,需要的朋友可以參考下
    2025-09-09

最新評論

隆化县| 双峰县| 青田县| 万年县| 兴山县| 兴山县| 道孚县| 梨树县| 大邑县| 瑞安市| 洛扎县| 广德县| 绥宁县| 台中县| 洪洞县| 惠安县| 都兰县| 宁德市| 静乐县| 浦城县| 龙游县| 图木舒克市| 精河县| 木兰县| 卓资县| 疏附县| 德阳市| 宁波市| 天峻县| 南江县| 团风县| 大同市| 汕尾市| 宁强县| 嘉鱼县| 津南区| 河源市| 石景山区| 青龙| 石河子市| 万年县|