Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Cách tốt nhất để rút ngắn chuỗi UTF8 dựa trên độ dài byte

Đây là hai giải pháp khả thi - một lớp lót LINQ xử lý đầu vào từ trái sang phải và for -loop xử lý đầu vào từ phải sang trái. Hướng xử lý nào nhanh hơn phụ thuộc vào độ dài chuỗi, độ dài byte cho phép, số lượng và sự phân bố của các ký tự multibyte và khó có thể đưa ra gợi ý chung. Tôi có lẽ quyết định giữa LINQ và mã truyền thống là do sở thích (hoặc có thể là tốc độ).

Nếu tốc độ là vấn đề, người ta có thể nghĩ đến việc chỉ tích lũy độ dài byte của mỗi ký tự cho đến khi đạt đến độ dài tối đa thay vì tính độ dài byte của toàn bộ chuỗi trong mỗi lần lặp. Nhưng tôi không chắc liệu điều này có hiệu quả hay không vì tôi không biết rõ về mã hóa UTF-8. Về mặt lý thuyết, tôi có thể tưởng tượng rằng độ dài byte của một chuỗi không bằng tổng độ dài byte của tất cả các ký tự.

public static String LimitByteLength(String input, Int32 maxLength)
{
    return new String(input
        .TakeWhile((c, i) =>
            Encoding.UTF8.GetByteCount(input.Substring(0, i + 1)) <= maxLength)
        .ToArray());
}

public static String LimitByteLength2(String input, Int32 maxLength)
{
    for (Int32 i = input.Length - 1; i >= 0; i--)
    {
        if (Encoding.UTF8.GetByteCount(input.Substring(0, i + 1)) <= maxLength)
        {
            return input.Substring(0, i + 1);
        }
    }

    return String.Empty;
}


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Khu vực phục hồi nhanh của Oracle

  2. Xuất kết quả truy vấn Oracle sang tệp HTML khi sử dụng SQLcl

  3. ORA-4031 lỗi với Direct NFS

  4. Kết nối CSDL Oracle TLS1.2 / SSL sử dụng JDBC thin và JKS

  5. Oracle - Tại sao số 0 đứng đầu của một số biến mất khi chuyển đổi nó thành TO_CHAR