通常,参数的数据类型按优先级顺序使用以下标准来解析:
目标参数的预期数据类型。
基于 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
之一在哪里:
海峡
整数
单位
漂浮
布尔值
列表
字典
JSON
要将值存储为字符串,请发出:
$ mysqlsh -- plugin set-object-attributes --streetNumber:str=1234
任何命名参数都允许使用此格式,但仅当参数没有预期的数据类型时才需要。如果参数有预期的数据类型,而您指定了不同的数据类型,则会引发错误。
当您不指定数据类型时,MySQL Shell 会尝试使用以下逻辑解析数据类型。此数据解释逻辑基于 JSON 规范,但有一些 MySQL Shell 特定的添加和限制:
-
字符串:
支持双引号和单引号字符串。
支持十六进制,例如 where是十六进制数字。这用于以十六进制格式表示 ASCII 字符。
\x
NN
NN
支持垂直制表符转义字符
还可以定义以下文字:
undefined:将值定义为 undefined(在 CLI 中并不真正需要,因此不鼓励使用)。
true/false:创建一个布尔值。
null:定义一个空值。
JSON 规范和上述规则未涵盖的任何值都被解释为纯字符串。