Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Cara terbaik untuk mempersingkat string UTF8 berdasarkan panjang byte

Berikut adalah dua solusi yang mungkin - LINQ one-liner memproses input dari kiri ke kanan dan for tradisional -loop memproses input dari kanan ke kiri. Arah pemrosesan mana yang lebih cepat tergantung pada panjang string, panjang byte yang diizinkan, dan jumlah serta distribusi karakter multibyte dan sulit untuk memberikan saran umum. Keputusan antara LINQ dan kode tradisional Saya mungkin masalah selera (atau mungkin kecepatan).

Jika kecepatan penting, orang dapat berpikir tentang hanya mengumpulkan panjang byte dari setiap karakter hingga mencapai panjang maksimum daripada menghitung panjang byte dari seluruh string di setiap iterasi. Tetapi saya tidak yakin apakah ini akan berhasil karena saya tidak tahu pengkodean UTF-8 dengan cukup baik. Secara teoritis saya dapat membayangkan bahwa panjang byte string tidak sama dengan jumlah panjang byte semua karakter.

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. Oracle Date TO_CHAR('Bulan DD, YYYY') memiliki spasi ekstra di dalamnya

  2. Bagaimana mengubah format tanggal di database oracle

  3. Cara Mendapatkan Tanggal Dari String di Oracle

  4. Pengguna Umum Dengan hak istimewa SYSBACKUP

  5. Oracle Regexp untuk mengganti \n,\r dan \t dengan spasi