中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

mysql 報文的格式和基本類型的示例分析

發布時間:2021-10-25 09:49:47 來源:億速云 閱讀:464 作者:柒染 欄目:大數據

本篇文章給大家分享的是有關mysql 報文的格式和基本類型的示例分析,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

navicat 和 mysql 是一對好基友,每天都有非常頻繁的交流,主人在navicat上寫下每條sql語句,輕輕的點了下執行按鈕,navicat就飛快的把主人的指令傳送到mysql那里,mysql立馬把返回結果傳回navicat那里顯示給主人看。主人對他們的效率很滿意,同時主人也有點好奇:你們兩個基友是怎么通訊的呢?如果不通過navicat,我用程序直接和mysql交互該怎么做呢?

mysql 笑道:這是我們之間的秘密。。。

navicat有點不開心了:難道主人想拋棄我嗎?嗚嗚嗚。。。

主人安慰道:你想多了,我只是想更了解你們呀。

那我就給你詳細講講我們之間的小秘密吧,mysql悠悠的說道:

想要通過我的交互,就得照我規定的格式來,不能每個人過來都講自己的方言,我可聽不懂,來到我的地盤就得按我的規矩來。

1.我給你發的報文都是這種格式的:

  服務器--->客戶端的報文格式

mysql 報文的格式和基本類型的示例分析

  mysql 報文的格式和基本類型的示例分析

前面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 報文的格式和基本類型的示例分析

   第一個字節表示命令的類型

 mysql 報文的格式和基本類型的示例分析

  mysql 報文的格式和基本類型的示例分析

mysql 報文的格式和基本類型的示例分析

后面的字節表示具體的命令,例如關閉連接的報文是長這樣子滴:

 mysql 報文的格式和基本類型的示例分析 

這樣規定好后,我們就有共同語言啦,就能聽得懂對方在講什么了,所以說有共同語言是很重要滴。

主人細細的回味了下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字節的長度:

   mysql 報文的格式和基本類型的示例分析int<1>表示占1個字節的長度, int<2>表示占2個字節的長度,以此類推,比如 int<3> 表示1是這么表示的:01 00 00   

對了,mysql協議中字節是按小頭(LittileEndian)的方式表示的,低位的字節在前面,總體占3個字節,所以第一個字節是01,后面是00 00

2.變長的整數類型(Length-encoded integers)

mysql 報文的格式和基本類型的示例分析

  • 如果數字 < 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 報文的格式和基本類型的示例分析,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

邳州市| 通州区| 乐昌市| 玛多县| 增城市| 桐乡市| 深水埗区| 高要市| 锡林郭勒盟| 靖江市| 东山县| 玛沁县| 乌拉特中旗| 元氏县| 乳山市| 陆丰市| 大安市| 屏山县| 南投县| 伽师县| 昌平区| 奇台县| 柳江县| 博兴县| 龙门县| 寿阳县| 泰来县| 洛隆县| 民权县| 沈阳市| 灵台县| 连城县| 和田市| 丹棱县| 阳泉市| 临桂县| 天镇县| 商河县| 贵南县| 克东县| 遂平县|