您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關mysql 報文的格式和基本類型的示例分析,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
navicat 和 mysql 是一對好基友,每天都有非常頻繁的交流,主人在navicat上寫下每條sql語句,輕輕的點了下執行按鈕,navicat就飛快的把主人的指令傳送到mysql那里,mysql立馬把返回結果傳回navicat那里顯示給主人看。主人對他們的效率很滿意,同時主人也有點好奇:你們兩個基友是怎么通訊的呢?如果不通過navicat,我用程序直接和mysql交互該怎么做呢?
mysql 笑道:這是我們之間的秘密。。。
navicat有點不開心了:難道主人想拋棄我嗎?嗚嗚嗚。。。
主人安慰道:你想多了,我只是想更了解你們呀。
那我就給你詳細講講我們之間的小秘密吧,mysql悠悠的說道:
想要通過我的交互,就得照我規定的格式來,不能每個人過來都講自己的方言,我可聽不懂,來到我的地盤就得按我的規矩來。
1.我給你發的報文都是這種格式的:
服務器--->客戶端的報文格式
前面3個字節payload_length表示后面數據的實際長度,中間一個字節sequence_id表示報文的序號,從0開始,每次加1,最后的paylaod就是我發你的內容啦。
你可能也發現了,payload_length用3個字節表示,最大只能表示 224?1 bytes也是16M,如果報文大于或者等于16M那就要拆成2個報文了哦,
比如剛好發送16M的報文:
ff ff ff 00 (數據域16M)... 00 00 00 01 (數據域為空)
第二個報文的數據域是空的。
2.客戶端發給我的報文也是要按照一定格式的哦:
客戶端--->服務器的報文格式
第一個字節表示命令的類型
后面的字節表示具體的命令,例如關閉連接的報文是長這樣子滴:
這樣規定好后,我們就有共同語言啦,就能聽得懂對方在講什么了,所以說有共同語言是很重要滴。
主人細細的回味了下mysql剛才說的話,發現還有個地方沒弄明白問道:你發給我的報文中int<3>,string<var>表示什么意思呀?
mysql忽然意識到還忘了說一件重要的事情:哎呦,我忘了和你說基本的數據類型了。
mysql有2種基本的數據類型:
Integers(整數型) 和 String(字符串)
Integers(整數型)分為定長的整數類型(Fixed-length integers)和變長的整數類型(Length-encoded integers)
1.定長的整數類型(Fixed-length integers)分別能表示1,2,3,4,6,8字節的長度:
int<1>表示占1個字節的長度, int<2>表示占2個字節的長度,以此類推,比如 int<3> 表示1是這么表示的:01 00 00
對了,mysql協議中字節是按小頭(LittileEndian)的方式表示的,低位的字節在前面,總體占3個字節,所以第一個字節是01,后面是00 00
2.變長的整數類型(Length-encoded integers)
如果數字 < 251, 就用一個字節表示 = 1個字節
如果數字 ≥ 251 并且 < (216),就用 fc
+ 2個字節表示 = 3個字節
如果數字 ≥ (216) 并且 < (224),就用 fd
+ 3個字節表示 = 4個字節
如果數字 ≥ (224) 并且 < (264) ,就用 fe
+ 8個字節表示 = 9個字節
主人表示很奇怪:一個字節最多能表示255個數,為什么不能直接表示到255?而是只表示到250?
mysql微微一笑道:因為251,252,253,254,255已經被我征用了哦,它們表示特殊的用途:
251(fb):表示 NULL
252(fc):表示數值的大小占后面的2個字節
253(fd):表示數值的大小占后面的3個字節
254(fe):表示數值的大小占后面的8個字節
255(ff): 表示一個錯誤報文 ERR packet
下面說說String(字符串)類型:
1.變長的字符類型(LengthEncodedString):和上面變長整數類型是一樣的,根據第一個字節的值判斷所占字節的長度
2.定長的字符串類型(FixedLengthString):后面的數字表示字符串所占字節的長度
3.動態的計算長度(VariableLengthString):根據var動態的計算長度
4.包末端字符串方式(RestOfPacketString):沒搞懂
5.空結尾的字符串類型(NulTerminatedString):字符串遇到 00 結束
原來如此,主人豁然開朗,看著navicat 和 mysql都親切了許多,知道他們之間是怎么通話之后,一個邪惡的想法慢慢從心底升起,嘿嘿,那我不就可以監聽他們之間的對話了嘛,哈哈哈哈哈哈哈哈。。。
以上就是mysql 報文的格式和基本類型的示例分析,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。