通常,参数的数据类型通过以下标准解析,优先级按顺序排列
目标参数的预期数据类型。
基于 JSON 规范的值的数据类型。
用户指定的数据类型。
最后一种情况是复杂且罕见的情况,仅适用于命名参数。例如,假设您有一个 MySQL Shell 插件函数,例如
def set_object_attributes(variables)
其中 variables
是一个字典,没有预定义的值集,因此它接受任何键,因此接受任何类型的值。要使用字符串值 123 设置名为 streetNumber
的字符串属性,请执行以下操作
$ 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 规范和以上规则覆盖的值都被解释为普通字符串。