跳到主要内容

IS_VALID_UTF8

描述

IS_VALID_UTF8 函数用于检查字符串是否为合法的 UTF-8 编码数据。它会验证输入中的每个字节序列,如果所有序列都符合 UTF-8 编码标准则返回 true,如果发现任何非法字节序列则返回 false

该函数在处理从外部数据源(文件、网络流等)导入的数据时非常有用,这些数据可能包含二进制或编码错误的内容,您可以在执行字符串操作之前验证数据的完整性。

别名

  • ISVALIDUTF8()

语法

IS_VALID_UTF8(<str>)

参数

参数说明
<str>需要验证的字符串。类型:VARCHAR 或 STRING

返回值

返回 BOOLEAN 类型。

  • 如果字符串是合法的 UTF-8 编码数据,返回 true
  • 如果字符串包含任何非法的 UTF-8 字节序列,返回 false

特殊情况:

  • 如果参数为 NULL,返回 NULL。
  • 空字符串被视为合法的 UTF-8,返回 true

示例

  1. 合法的 ASCII 字符串
SELECT IS_VALID_UTF8('hello');
+------------------------+
| is_valid_utf8('hello') |
+------------------------+
| 1 |
+------------------------+
  1. 合法的多字节 UTF-8 字符(中文)
SELECT IS_VALID_UTF8('Hello, 世界');
+-----------------------------+
| is_valid_utf8('Hello, 世界') |
+-----------------------------+
| 1 |
+-----------------------------+
  1. 空字符串
SELECT IS_VALID_UTF8('');
+--------------------+
| is_valid_utf8('') |
+--------------------+
| 1 |
+--------------------+
  1. 非法的 UTF-8 字节(通过 UNHEX 构造)
SELECT IS_VALID_UTF8(UNHEX('C0AF'));
+------------------------------+
| is_valid_utf8(unhex('C0AF')) |
+------------------------------+
| 0 |
+------------------------------+
  1. NULL 值处理
SELECT IS_VALID_UTF8(NULL);
+---------------------+
| is_valid_utf8(NULL) |
+---------------------+
| NULL |
+---------------------+
  1. 配合表数据使用
CREATE TABLE test_utf8 (
id INT,
val VARCHAR(200)
) DISTRIBUTED BY HASH(id) BUCKETS 1
PROPERTIES ("replication_num" = "1");

INSERT INTO test_utf8 VALUES
(1, 'hello'),
(2, ''),
(3, 'Hello, 世界'),
(4, NULL);

INSERT INTO test_utf8 VALUES (5, UNHEX('C0AF'));
INSERT INTO test_utf8 VALUES (6, UNHEX('FF'));

SELECT id, IS_VALID_UTF8(val) FROM test_utf8 ORDER BY id;
+------+--------------------+
| id | is_valid_utf8(val) |
+------+--------------------+
| 1 | 1 |
| 2 | 1 |
| 3 | 1 |
| 4 | NULL |
| 5 | 0 |
| 6 | 0 |
+------+--------------------+