一般而言,引數的資料類型會依以下優先順序準則解析:
目標參數的預期資料類型。
基於 JSON 規格的值的資料類型。
使用者指定的資料類型。
最後一種情況是一種複雜(且罕見)的情況,僅適用於具名引數。例如,假設您有一個 MySQL Shell 外掛程式函數,例如:
def set_object_attributes(variables)
其中 variables
是一個字典,其中沒有預先定義的值集,因此它接受任何索引鍵,因此也接受任何值的資料類型。若要設定名為 streetNumber
的字串屬性,其字串值為 123,請發出:
$ mysqlsh -- plugin set-object-attributes --streetNumber=123
因為沒有預期的資料類型,因此值 123
會根據 JSON 規格解譯為數值,但我們希望將其儲存為字串,而不是數字。
目前,除非使用者如上所述建立外掛程式,否則沒有這種 API 函數的範例。
為了避免 MySQL Shell 嘗試猜測輸入資料類型時發生問題,命令列整合支援強制使用特定資料類型,方法是使用以下語法指定具名引數:
--key:type=value
其中 type
是下列其中之一:
str
int
uint
float
bool
list
dict
json
若要將值儲存為字串,請發出:
$ mysqlsh -- plugin set-object-attributes --streetNumber:str=1234
此格式允許在任何具名引數中使用,但只有在引數沒有預期資料類型時才需要。如果參數有預期的資料類型,而您指定不同的資料類型,則會引發錯誤。
當您未指定資料類型時,MySQL Shell 會嘗試使用以下邏輯解析資料類型。此資料解譯邏輯是基於 JSON 規格,但有一些 MySQL Shell 特有的新增功能和限制:
-
字串
支援雙引號和單引號字串。
支援十六進位數字,例如
\x
,其中NN
NN
是十六進位數字。這用於以十六進位格式表示 ASCII 字元。支援垂直 Tab 跳脫字元
也可以定義下列文字:
undefined:將值定義為未定義(在 CLI 中不是真的需要,因此不建議使用)。
true/false:建立布林值。
null:定義 Null 值。
未涵蓋在 JSON 規格和上述規則中的任何值都會解譯為純文字字串。