MariaDB CRC32C() 函数使用指南

在 MariaDB 中,CRC32C() 是一个内置的数字函数,它用于计算循环冗余校验值并返回一个 32 位无符号值。

CRC32() 不同, CRC32C() 使用卡斯塔尼奥利多项式。

MariaDB CRC32C() 语法

这里是 MariaDB CRC32C() 函数的语法:

CRC32C([par,]str)

参数

str
必需的。 一个用于计算的字符串。非字符串参数将被视为字符串。
par
可选的。 一个计算循环冗余校验值。可选择参数用于分段计算校验和。

如果您不提供参数或提供了错误数量的参数,MariaDB 将报告一个错误:ERROR 1582 (42000): Incorrect parameter count in the call to native function ‘CRC32C’

返回值

MariaDB CRC32C() 函数用于计算循环冗余校验值并返回一个 32 位无符号值。

如果任一参数为 NULLCRC32C() 函数将会返回 NULL

MariaDB CRC32C() 示例

基本示例

要计算 Hello 的循环冗余校验值,请使用以下语句:

SELECT CRC32C('Hello');

输出:

+-----------------+
| CRC32C('Hello') |
+-----------------+
|      2178485787 |
+-----------------+

区分大小写

不同大小写的字符串的循环冗余校验值是不同的:

SELECT
  CRC32C('Hello'),
  CRC32C('HELLO');

输出:

+-----------------+-----------------+
| CRC32C('Hello') | CRC32C('HELLO') |
+-----------------+-----------------+
|      2178485787 |      3901656152 |
+-----------------+-----------------+

非字符串参数

MariaDB CRC32C() 的将把非字符串参数视为字符串:

SELECT
  CRC32C('1234'),
  CRC32C(1234);

输出:

+----------------+--------------+
| CRC32C('1234') | CRC32C(1234) |
+----------------+--------------+
|     4131058926 |   4131058926 |
+----------------+--------------+

分段计算

通常,CRC 是分段计算的。为了促进这一点,MariaDB 10.8.0 引入了一个 可选参数:CRC32C('HelloWorld') = CRC32C(CRC32C('Hello'),'World')

SELECT
  CRC32C('HelloWorld'),
  CRC32C(CRC32C('Hello'), 'World');

输出:

+----------------------+----------------------------------+
| CRC32C('HelloWorld') | CRC32C(CRC32C('Hello'), 'World') |
+----------------------+----------------------------------+
|           1407507230 |                       1407507230 |
+----------------------+----------------------------------+

在这个示例中,我们将 HelloWorld 分为 HelloWorld,然后分段计算。 您可以根据自己的需求任意分段,结果是相同,如下:

SELECT CRC32C(CRC32C('He'), 'lloWorld');

输出:

+----------------------------------+
| CRC32C(CRC32C('He'), 'lloWorld') |
+----------------------------------+
|                       1407507230 |
+----------------------------------+

结论

在 MariaDB 中,CRC32C() 是一个内置的数字函数,它用于计算循环冗余校验值并返回一个 32 位无符号值。