MariaDB 中 TRIM() 和 TRIM_ORACLE() 之间的区别

发布于

MariaDB有一个函数和一个函数。这两个函数基本上做同样的事情。但有一个细微的区别。TRIM()TRIM_ORACLE()

区别

区别在于每个函数如何处理空字符串:

  • TRIM()从字符串的开头或结尾删除字符。传递空字符串时,结果将取决于您是否处于 Oracle 模式。如果在 Oracle 模式下,它将返回 .否则,它将返回一个空字符串。null
  • TRIM_ORACLE()是 的 Oracle 模式版本的同义词。它的行为类似于在 Oracle 模式下(它在传递空字符串时返回),即使不在 Oracle 模式下也是如此。TRIM()``TRIM()``null

因此,其工作原理与在 Oracle 模式下完全相同。但是,当不在 Oracle 模式下时,唯一的区别是每个函数如何处理空字符串。TRIM_ORACLE()``TRIM()

示例

最好用一个例子来解释这一点。

默认模式

以下是默认模式下这些函数的比较:

SET SQL_MODE=DEFAULT;
SELECT
    TRIM(''),
    TRIM_ORACLE('');

输出:

+----------+-----------------+
| TRIM('') | TRIM_ORACLE('') |
+----------+-----------------+
|          | NULL            |
+----------+-----------------+

首先,我将系统设置为默认模式(即使它可能已经处于默认模式),然后我使用空字符串运行这两个函数。

我们可以看到返回一个空字符串,而返回 .TRIM()``TRIM_ORACLE()``null

甲骨文模式

现在让我们将其设置为 Oracle 模式并再次运行代码:

SET SQL_MODE=ORACLE;
SELECT
    TRIM(''),
    TRIM_ORACLE('');

输出:

+----------+-----------------+
| TRIM('') | TRIM_ORACLE('') |
+----------+-----------------+
| NULL     | NULL            |
+----------+-----------------+

我们可以看到现在的行为类似于 .TRIM()``TRIM_ORACLE()

因此,对于 ,我们需要显式切换到 Oracle 模式,然后才能让它的行为类似于 Oracle 版本的 。TRIM()``TRIM()

TRIM_ORACLE()另一方面,在所有模式下都可用,因此它使我们不必切换到 Oracle 模式。