应该可以使用以下测试来检查非utf:
MY_STRING IS NOT NULL AND TRY_HEX_DECODE_STRING(HEX_ENCODE(MY_STRING)) IS NULL
但是那时我没有数据可以测试。
要将字符串重新编码为utf-8,可以使用Javascript函数:
CREATE OR REPLACe FUNCTION TO_UTF8(BINARY_TEXT BINARY)RETURNS TEXT LANGUAGE JAVAscript STRICT IMMUTABLE AS ' var win1252 = [ 8364, 129, 8218, 402, 8222, 8230, 8224, 8225, 710, 8240, 352, 8249, 338, 141, 381, 143, 144, 8216, 8217, 8220, 8221, 8226, 8211, 8212, 732, 8482, 353, 8250, 339, 157, 382, 376 ]; return String.fromCharCode( ...Array.from(BINARY_TEXT).map(x => (x < 128 || x > 159) ? x : (win1252[x - 128])) ); ';SELECT NVL(TRY_HEX_DECODE_STRING(HEX_ENCODE(MY_STRING)),TO_UTF8(HEX_ENCODE(MY_STRING)::BINARY));



