MariaDB LENGTH() 函数使用指南

在 MariaDB 中,LENGTH() 是一个内置的字符串函数。在默认模式下,它以字节为单位返回给定字符串的长度;在 Oracle 模式下,它以字符为单位返回字符串的长度。

如果您要获得字符串中字符数量,请使用 CHAR_LENGTH() 或者 CHARACTER_LENGTH() 函数。

如果您要获得字符串中的位数量,请使用 BIT_LENGTH() 函数。

LENGTHB() 是 默认模式下的 LENGTH() 的同义词,并且语义更明确, 您应该首选 LENGTHB()

MariaDB LENGTH() 语法

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

LENGTH(str)

参数

str
必需的。需要计算长度的字符串。参数可以是其他的类型,比如数字或者日期等,LENGTH() 函数会首先将其转为字符串再计算长度。

如果您未提供任何参数, MariaDB 将报告错误: ERROR 1582 (42000): Incorrect parameter count in the call to native function ‘LENGTH’。

返回值

默认模式下,MariaDB LENGTH(str) 函数返回指定字符串的以字节为单位的长度,即字节的数量。

Oracle 模式下, MariaDB LENGTH(str) 函数返回指定字符串的以字符为单位的长度,即字符的数量。

当参数为 NULL 时, LENGTH() 函数将返回 NULL

MariaDB LENGTH() 示例

基本用法

这个语句展示了 MariaDB LENGTH() 函数的各种基本用法:

SELECT
    LENGTH('Hello'),
    LENGTH(''),
    LENGTH(20),
    LENGTH(-20),
    LENGTH(+20),
    LENGTH(NOW()),
    LENGTH(CURDATE()),
    LENGTH('你好'),
    LENGTH(NULL)\G

输出:

*************************** 1. row ***************************
  LENGTH('Hello'): 5
       LENGTH(''): 0
       LENGTH(20): 2
      LENGTH(-20): 3
      LENGTH(+20): 2
    LENGTH(NOW()): 19
LENGTH(CURDATE()): 10
    LENGTH('你好'): 6
     LENGTH(NULL): NULL

注意:

  • LENGTH(-20) 的结果是 3。这是因为 -20 对应的字符串是 '-20', LENGTH('-20') 的结果为 3
  • LENGTH(+20) 的结果是 2。这是因为 +20 相当于 20,对应的字符串是 '20', LENGTH('20') 的结果为 2
  • LENGTH(NOW()) 相当于 LENGTH('2021-04-02 21:18:57')
  • LENGTH('你好') 的结果是 6。这是因为我这里用的编码是 UTF-8,其中一个中文字占用 3 个字节。

Oracle 模式

在 Oracle 模式下, LENGTH() 函数将返回给定字符串的字符数而不是字节数。下面的示例分步骤展示了这一点。

  1. 使用下面的语句将会话切换到 Oracle 模式:

    SET SESSION sql_mode='ORACLE';
    
  2. 下面的语句使用 LENGTH() 计算字符串 '你好' 的长度:

    SELECT LENGTH('你好');
    

    输出:

    +------------------+
    | LENGTH('你好')   |
    +------------------+
    |                2 |
    +------------------+

    这次它返回字符数 (2) 而不是字节数 (6)。

在 Oracle 模式下,LENGTH()CHAR_LENGTH() 或者 CHARACTER_LENGTH() 函数相同。

结论

在默认模式下,MariaDB LENGTH() 函数以字节为单位返回给定字符串的长度。在 Oracle 模式下,LENGTH() 函数返回给定字符串的字符数量。