官網(wǎng)地址:Protocol Basics
對于客戶端發(fā)送給服務(wù)器的大多數(shù)命令绊汹,服務(wù)器會(huì)返回其中一個(gè)數(shù)據(jù)包作為響應(yīng):
OK_Packet
一個(gè)OK數(shù)據(jù)包從服務(wù)器發(fā)送到客戶端煞烫,表示命令成功完成。
從MySQL 5.7.5開始蚯妇,OK包也用于指示EOF敷燎,且EOF包被棄用。
如果設(shè)置了CLIENT_PROTOCOL_41箩言,則數(shù)據(jù)包包含警告計(jì)數(shù)硬贯。
這些規(guī)則區(qū)分?jǐn)?shù)據(jù)包是代表OK還是EOF:
- OK: header = 0 and length of packet > 7
-
EOF: header = 0xfe and length of packet < 9
為確保舊版本(5.7.5之前版本)與新版本(5.7.5版本以上)之間的向后兼容性,新客戶端發(fā)布了CLIENT_DEPRECATE_EOF標(biāo)志:- 老客戶不知道這個(gè)標(biāo)志陨收。 因此饭豹,服務(wù)器不會(huì)發(fā)送代表EOF的OK數(shù)據(jù)包。 (舊服務(wù)器從來不會(huì)這樣做务漩,新服務(wù)器認(rèn)識(shí)到?jīng)]有標(biāo)志意味著它們不應(yīng)該這樣做拄衰。)
- 新客戶傳遞此標(biāo)志。 舊服務(wù)器不知道此標(biāo)志饵骨,也不發(fā)送代表EOF的OK數(shù)據(jù)包翘悉。 新服務(wù)器識(shí)別該標(biāo)志并可發(fā)送表示EOF的OK數(shù)據(jù)包。
舉個(gè)例子:
通過CLIENT_PROTOCOL_41確定居触。 0受影響的行妖混,last-insert-id為0,啟用AUTOCOMMIT饼煞,0警告源葫。 沒有更多信息。
07 00 00 02 00 00 00 02 00 00 00
回話狀態(tài)信息
狀態(tài)改變信息在OK數(shù)據(jù)包中作為狀態(tài)改變塊的數(shù)組發(fā)送砖瞧,它由以下部分組成:
數(shù)據(jù)字段的解釋取決于類型值:
-
SESSION_TRACK_SYSTEM_VARIABLES
屏幕快照 2018-04-14 上午11.59.42.png
舉個(gè)例子:
當(dāng)設(shè)置 autocommit = OFF 狀態(tài)時(shí):
屏幕快照 2018-04-14 下午12.00.11.png -
SESSION_TRACK_SCHEMA
屏幕快照 2018-04-14 下午12.00.54.png
舉個(gè)例子:
當(dāng) USE test 狀態(tài)后:
use test.png -
SESSION_TRACK_STATE_CHANGE
標(biāo)志字節(jié)息堂,指示是否發(fā)生會(huì)話狀態(tài)更改。 該標(biāo)志表示為ASCII值块促。
屏幕快照 2018-04-14 下午12.05.02.png
舉個(gè)例子:
在SET SESSION session_track_state_change = 1語句后:
屏幕快照 2018-04-14 下午12.07.46.png
ERR_Packet
該數(shù)據(jù)包表示發(fā)生了錯(cuò)誤
如果啟用了CLIENT_PROTOCOL_41荣堰,它將包含一個(gè)SQL狀態(tài)值。
錯(cuò)誤文本不能超過MYSQL_ERRMSG_SIZE.
舉個(gè)例子:
EOF_Packet
如果啟用CLIENT_PROTOCOL_41竭翠,則EOF數(shù)據(jù)包將包含警告計(jì)數(shù)和狀態(tài)標(biāo)志振坚。
在MySQL客戶端/服務(wù)器協(xié)議中,EOF_Packet和OK_Packet包服務(wù)于相同的目的斋扰,以標(biāo)記查詢執(zhí)行結(jié)果的結(jié)束渡八。 由于OK_Packet數(shù)據(jù)包中MySQL 5.7的變化(如會(huì)話狀態(tài)跟蹤),并為了避免重復(fù)EOF_Packet數(shù)據(jù)包中的更改传货,OK_Packet從MySQL 5.7.5開始已棄用屎鳍。
EOF_Packet數(shù)據(jù)包可能出現(xiàn)在Protocol :: LengthEncodedInteger可能出現(xiàn)的地方。 您必須檢查數(shù)據(jù)包長度是否小于9以確保它是EOF_Packet數(shù)據(jù)包问裕。
舉個(gè)例子:
一個(gè)MySQL 4.1 EOF包逮壁,包含:0個(gè)警告,啟用AUTOCOMMIT粮宛。
Character Set 字符集
MySQL具有非常靈活的字符集支持窥淆,如字符集支持中所述卖宠。
字符集列表和它們的ID可以查詢?nèi)缦拢?/p>
SELECT id, collation_name FROM information_schema.collations ORDER BY id;
下表顯示了一些常用字符集。
-
Protocol::CharacterSet
協(xié)議中的字符集被定義為整數(shù):- charset_nr (2) 字符集編號(hào)和排序規(guī)則