MySQL CONV()函数的下限和上限
MySQL的CONV()函数是用于将一个数值转换为指定进制的字符串。它接受两个参数,第一个参数是需要被转换的数值,第二个参数是指定的进制。如:CONV(10, 10, 2),将数字10转化为二进制。在MySQL中,CONV()函数的范围大小是固定的,不同的进制都有不同的上限和下限。那么,CONV()函数的下限和上限到底是多少呢?如果在CONV()函数中提供超出范围的基础数据,会发生什么?
阅读更多:MySQL 教程
进制范围
在MySQL中,CONV()函数将数字转换为不同进制的字符串。因为不同进制会占用不同的字符集,所以CONV()函数对数字的范围有一定的限制。下表显示了CONV()函数处理1到64位进制数字的最大值和最小值。
进制 | 下限 | 上限 |
---|---|---|
2 | -9223372036854775808 | 9223372036854775807 |
3 | -3852123406821056 | 3852123406821055 |
4 | -4611686018427387904 | 4611686018427387903 |
5 | -1909826780886464 | 1909826780886463 |
6 | -9223372036854775808 | 9223372036854775807 |
7 | -1043562167964748288 | 1043562167964748287 |
8 | -9223372036854775808 | 9223372036854775807 |
9 | -1229782938247303441 | 1229782938247303440 |
10 | -9223372036854775808 | 9223372036854775807 |
11 | -80831535893814400 | 80831535893814399 |
12 | -4611686018427387904 | 4611686018427387903 |
13 | -55340232221128654848 | 55340232221128654847 |
14 | -21334325115545600 | 21334325115545599 |
15 | -9223372036854775808 | 9223372036854775807 |
16 | -9223372036854775808 | 9223372036854775807 |
17 | -104857600 | 104857599 |
18 | -4722366482869645216 | 4722366482869645215 |
19 | -207208861412425477 | 207208861412425476 |
20 | -18446744073709551616 | 18446744073709551615 |
21 | -67034689768136448 | 67034689768136447 |
22 | -310738754734206464 | 310738754734206463 |
23 | -1042913033777451008 | 1042913033777451007 |
24 | -1729382256910270464 | 1729382256910270463 |
25 | -5902958103587057664 | 5902958103587057663 |
26 | -4318412080047719936 | 4318412080047719935 |
27 | -18490852937907228160 | 18490852937907228159 |
28 | -69793218571265664 | 69793218571265663 |
29 | -37778931862957184 | 37778931862957183 |
30 | -304888344611713792 | 304888344611713791 |
31 | -112589990684262144 | 112589990684262143 |
32 | -9223372036854775808 | 9223372036854775807 |
33 | -68630377364883 | 68630377364882 |
34 | -2884414135676224 | 2884414135676223 |
35 | -1152921504606846976 | 1152921504606846975 |
36 | -1208925819614629174706176 | 1208925819614629174706175 |
从表中可以看到,不同进制的上限和下限有很大的差别。最大值和最小值的差距会随着进制的增大而变大。因此,在使用CONV()函数时,必须格外小心,以确保提供的数字不超过所需进制的范围。
数据范围
通过上表,我们已经知道了CONV()函数可以处理不同进制下的最大值和最小值。但是如果提供的基础数据超出了范围,会发生什么呢?
我们看看下面这个例子:
SELECT CONV('99999999999999', 10, 16)
在这个例子中,我们尝试将一个超过16进制范围的数字转换为16进制,我们将得到如下错误信息:
ERROR 1690 (22003): BIGINT value is out of range in 'conv(99999999999999,10,16)'
这是因为在提供的数字是超出了16进制的数据范围。同样的,如果提供的数字超出了16进制、10进制或其他支持进制的下限和上限,则会收到类似的错误消息。
另一个例子:
SELECT CONV(-10, 10, 2)
这个例子中我们尝试将-10转换为二进制数,我们将得到如下错误信息:
ERROR 1690 (22003): BIGINT value is out of range in 'conv(-10,10,2)'
这是因为二进制不支持负数,因此-10超出了2进制的数据范围。
结论
CONV()函数具有下限和上限限制,它们与所需的进制有关。如果在CONV()函数中提供超出范围的数字,则会提示错误消息。因此,必须格外小心以确保提供的数据范围在所需进制的范围内。