一般来说,参数的数据类型是按照以下优先级顺序解析的
目标参数的预期数据类型。
基于 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 字符。支持垂直制表符转义字符
还可以定义以下字面量
undefined: 将值定义为未定义(在 CLI 中实际上不需要,因此不鼓励使用)。
true/false: 创建布尔值。
null: 定义空值。
任何未被 JSON 规范和上述规则涵盖的值将被解释为普通字符串。