Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Cara memperbaiki karakter arab terbalik dicampur dengan bahasa inggris di SQL server

Masalahnya adalah Anda memiliki sejumlah string dalam database yang, karena alasan warisan, disimpan dalam urutan non-leksikal. Mungkin mereka berasal dari aplikasi berbasis terminal karakter yang hanya dapat menyimpan karakter dalam urutan kiri-ke-kanan.

Anda dapat memaksa aplikasi yang sesuai untuk menampilkan bahasa Arab Kiri-ke-Kanan dengan menggunakan karakter Unicode khusus LRO U+202D: LEFT-TO-RIGHT OVERRIDE . Ini memaksa semua karakter untuk dirender dari kiri ke kanan terlepas dari bagaimana mereka biasanya akan dirender.

Efeknya berakhir di akhir string atau pada karakter PDF U+202C POP DIRECTIONAL FORMATTING .

Dalam kasus Anda, yang perlu Anda lakukan adalah meletakkan karakter LRO di awal setiap string yang terpengaruh:

select nchar(8237) + columnName as columnNameDisplay
from BadTable 

Angka 8237 desimal setara dengan heksadesimal 202D .

Jika Anda mungkin menggabungkan string ini dengan string lain yang disimpan dengan benar, Anda juga harus menggunakan karakter PDF di akhir:

select nchar(8237) + columnName + nchar(8236) as columnNameDisplay
from BadTable 

Ini memberi tahu mesin rendering teks bahwa urutan Kiri-Ke-Kanan yang dipaksakan telah berakhir.

Untuk informasi lebih lanjut lihat di sini:

Catatan:

  • Penggabungan karakter tidak akan digabungkan dengan benar
  • Perangkat lunak Text-to-speech tidak akan berfungsi - mungkin akan membacanya menurut abjad, tetapi saya tidak yakin.

Informasi Lebih Lanjut

Karakter harus disimpan sesuai urutan penulisan atau pembacaannya, bukan urutan tampilannya. Jadi misalnya, string:

test اختبار test

harus disimpan sebagai

01  t
02  e
03  s
04  t
05   
07  ا
خ  08  
09  ت
10  ب  
11  ا
12  ر
13 
14  t
15  e
16  s
17  t

Perhatikan bahwa karakter Arab paling kiri seperti yang ditampilkan disimpan pada posisi 12 (substring(@var, 12, 1) ), dan yang paling kanan seperti yang ditampilkan ada di posisi 7 (substring(@var, 7, 1) ). Jika Anda hanya menghitung karakter posisi seperti yang ditampilkan dari kiri ke kanan, bagian bahasa Arab tampak terbalik dibandingkan dengan cara penyimpanannya. Tapi itu karena bagian itu seharusnya dibaca dari kanan ke kiri, jadi ditampilkan dari kanan ke kiri.

Untuk memperbaiki masalah Anda, pertama-tama Anda harus memeriksa:Apakah string disimpan dengan salah ATAU disimpan dengan benar tetapi ditampilkan dengan salah?



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara mendapatkan kompatibilitas antara C# dan SQL2k8 AES Encryption?

  2. Metode untuk Peringkat Baris di SQL Server:ROW_NUMBER(), RANK(), DENSE_RANK() dan NTILE()

  3. Desain basis data untuk pengaturan pengguna

  4. Bagaimana cara menjalankan paket SSIS 32 bit dalam paket 64bit?

  5. Melewati varchar yang penuh dengan nilai yang dibatasi koma ke fungsi SQL Server IN