一般而言,引數的資料類型會依照以下優先順序使用以下準則來解析
目標參數的預期資料類型。
根據 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 規格和上述規則中涵蓋的值,都會被解譯為一般字串。