XML 架构 totalDigits/fractionDigits 与 SQL precision/scale
XML Schema totalDigits/fractionDigits vs. SQL precision/scale
我想找出 XML Schema totalDigits
/fractionDigits
和 SQL numeric precision/scale.
之间的对应关系
1) 假设我们有以下简单类型:
<xs:simpleType name="DecimalNumber">
<xs:restriction base="xs:decimal">
<xs:fractionDigits value="17"/>
<xs:totalDigits value="18"/>
</xs:restriction>
</xs:simpleType>
我如何在 SQL 中表示它?让我们假设 HSQL 方言(这无关紧要)。我对限制性最强的 SQL 类型感兴趣,它可以保存 XML Schema 简单类型的值 space 中的所有值。
会是numeric(18,17)
吗?或者 numeric(35,17)
?
2) 如果我们只有 totalDigits
怎么办?
<xs:simpleType name="DecimalNumber">
<xs:restriction base="xs:decimal">
<xs:totalDigits value="18"/>
</xs:restriction>
</xs:simpleType>
在 SQL 中什么是适当的表示?
3) 或者只是 fractionDigits
?
<xs:simpleType name="DecimalNumber">
<xs:restriction base="xs:decimal">
<xs:fractionDigits value="17"/>
</xs:restriction>
</xs:simpleType>
首先要牢记这一点:
scale ≡ fractionDigits
precision ≡ totalDigits
HSQL:
DECIMAL (35, 17) -- 编辑:fractionDigits 是上限;在您的情况下,从 none 到 17。因此,要表示的值域范围从左侧的 18 位数字到右侧的 17 位数字(小数点)。所以你需要一个 17 和 (18 + 17) 位的比例来表示最大值:18 位没有小数位。
对 DECIMAL (18) 的简单翻译实际上意味着没有小数点的 18 位数字,因为比例默认为 0 - 而不是 XSD 的等价物。为了允许捕获所有数字,需要对 DECIMAL (36, 18) 进行编码,就域值而言,这将超过 XSD 的 18 位总数字所代表的内容。你必须在这里打电话。
在 SQL 中,我不知道有没有精确指定比例的方法。由于 XSD 不提供上限(它要求至少为 18)...您可能只需要选择一个数字,可能会受到您的基础设施的限制(例如 MS-SQL最大 38 精度),或者根本不打扰(Apache 的 HsqlDB 使用无限精度和规模)。
我想找出 XML Schema totalDigits
/fractionDigits
和 SQL numeric precision/scale.
1) 假设我们有以下简单类型:
<xs:simpleType name="DecimalNumber">
<xs:restriction base="xs:decimal">
<xs:fractionDigits value="17"/>
<xs:totalDigits value="18"/>
</xs:restriction>
</xs:simpleType>
我如何在 SQL 中表示它?让我们假设 HSQL 方言(这无关紧要)。我对限制性最强的 SQL 类型感兴趣,它可以保存 XML Schema 简单类型的值 space 中的所有值。
会是numeric(18,17)
吗?或者 numeric(35,17)
?
2) 如果我们只有 totalDigits
怎么办?
<xs:simpleType name="DecimalNumber">
<xs:restriction base="xs:decimal">
<xs:totalDigits value="18"/>
</xs:restriction>
</xs:simpleType>
在 SQL 中什么是适当的表示?
3) 或者只是 fractionDigits
?
<xs:simpleType name="DecimalNumber">
<xs:restriction base="xs:decimal">
<xs:fractionDigits value="17"/>
</xs:restriction>
</xs:simpleType>
首先要牢记这一点:
scale ≡ fractionDigits
precision ≡ totalDigits
HSQL:
DECIMAL (35, 17) -- 编辑:fractionDigits 是上限;在您的情况下,从 none 到 17。因此,要表示的值域范围从左侧的 18 位数字到右侧的 17 位数字(小数点)。所以你需要一个 17 和 (18 + 17) 位的比例来表示最大值:18 位没有小数位。
对 DECIMAL (18) 的简单翻译实际上意味着没有小数点的 18 位数字,因为比例默认为 0 - 而不是 XSD 的等价物。为了允许捕获所有数字,需要对 DECIMAL (36, 18) 进行编码,就域值而言,这将超过 XSD 的 18 位总数字所代表的内容。你必须在这里打电话。
在 SQL 中,我不知道有没有精确指定比例的方法。由于 XSD 不提供上限(它要求至少为 18)...您可能只需要选择一个数字,可能会受到您的基础设施的限制(例如 MS-SQL最大 38 精度),或者根本不打扰(Apache 的 HsqlDB 使用无限精度和规模)。