MariaDB BINARY 运算符使用指南

在 MariaDB 中,BINARY 是一个内置的运算符,它将给定的字符串转换为一个二进制字符串。

在比较二进制字符串时,MariaDB 将逐个字节而不是逐个字符比较。字符串两端的空格也会参与比较。

MariaDB BINARY 语法

这里是 MariaDB BINARY 函数的语法:

BINARY str

操作数

str
将被转为二进制字符串的普通字符串。

MariaDB BINARY 示例

基本示例

下面的语句展示了如何使用 MariaDB BINARY 运算符将普通字符串转为二进制字符串:

SELECT BINARY 'Hello';

输出:

+----------------+
| BINARY 'Hello' |
+----------------+
| Hello          |
+----------------+

这个示例并不能说明太多的问题。

比较 - 尾随空格

比较普通字符串时, MariaDB 会忽略掉字符串尾随的空格:

SELECT
  'Hello' = 'Hello',
  'Hello' = 'Hello ';

输出:

+-------------------+--------------------+
| 'Hello' = 'Hello' | 'Hello' = 'Hello ' |
+-------------------+--------------------+
|                 1 |                  1 |
+-------------------+--------------------+

这里, 'Hello' = 'Hello ' 返回 1,这是因为 MariaDB 忽略了 'Hello ' 尾随的空格。

如果您认为尾随的空格很重要,想要得到一个不同的结果,请使用 BINARY 运算符:

SELECT
  'Hello' = 'Hello ',
  BINARY 'Hello' = 'Hello ',
  'Hello' = BINARY 'Hello '\G

输出:

       'Hello' = 'Hello ': 1
BINARY 'Hello' = 'Hello ': 0
'Hello' = BINARY 'Hello ': 0

或者

SELECT BINARY 'Hello' = BINARY 'Hello ';

输出:

+----------------------------------+
| BINARY 'Hello' = BINARY 'Hello ' |
+----------------------------------+
|                                0 |
+----------------------------------+

比较 - 区分大小写

如果您使用了一个不区分大小的排序规则(比如:utf8_general_ci),MariaDB 在比较字符串时会忽略大小写。 而二进制字符串则会强制区分大小写。

首先,通过以下语句查看当前的排序规则

SELECT @@collation_connection;

输出:

+------------------------+
| @@collation_connection |
+------------------------+
| utf8mb4_general_ci     |
+------------------------+

注意: ci 结尾表示不区分大小写

此时, MariaDB 认为 'hello''Hello' 是相同的:

SELECT 'hello' = 'Hello';

输出:

+-------------------+
| 'hello' = 'Hello' |
+-------------------+
|                 1 |
+-------------------+

如果你需要在比较时区分大小写,请使用 BINARY 操作符,如下:

SELECT
  BINARY 'hello' = 'Hello',
  'hello' = BINARY 'Hello',
  BINARY 'hello' = BINARY 'Hello'\G

输出:

       BINARY 'hello' = 'Hello': 0
       'hello' = BINARY 'Hello': 0
BINARY 'hello' = BINARY 'Hello': 0

结论

在 MariaDB 中,BINARY 是一个内置的运算符,它将给定的字符串转换为一个二进制字符串。