Перейти к содержимому
Последнее обновление

IS_VALID_UTF8

Описание​

Функция IS_VALID_UTF8 проверяет, содержит ли строка корректные данные в кодировке UTF-8. Она проверяет каждую последовательность байтов во входных данных и возвращает true, если все последовательности соответствуют стандарту кодировки UTF-8, или false, если обнаружена хотя бы одна недопустимая последовательность байтов.

Это полезно при работе с данными, импортированными из внешних источников (файлов, сетевых потоков и т. д.), которые могут содержать двоичные данные или содержимое с некорректной кодировкой, когда необходимо проверить целостность данных перед выполнением операций со строками.

Псевдоним​

  • ISVALIDUTF8()

Синтаксис​

IS_VALID_UTF8(<str>)

Параметры​

ПараметрОписание
<str>Строка для проверки. Тип: VARCHAR или STRING

Возвращаемое значение​

Возвращает значение типа BOOLEAN.

  • Возвращает true, если строка содержит корректные данные в кодировке UTF-8.
  • Возвращает false, если строка содержит хотя бы одну недопустимую последовательность байтов UTF-8.

Особые случаи:

  • Если параметр равен 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 |
+------+--------------------+