Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

SQL सर्वर में अंग्रेजी के साथ मिश्रित उल्टे अरबी वर्णों को कैसे ठीक करें

समस्या यह है कि आपके पास डेटाबेस में कई तार हैं जो विरासत कारणों से गैर-व्याख्यात्मक क्रम में संग्रहीत हैं। संभवतः वे एक वर्ण टर्मिनल आधारित अनुप्रयोग से आए हैं जो केवल वर्णों को बाएँ से दाएँ क्रम में संग्रहीत कर सकता है।

आप संगत एप्लिकेशन को विशेष यूनिकोड वर्ण LRO U+202D: LEFT-TO-RIGHT OVERRIDE का उपयोग करके अरबी बाएं से दाएं प्रदर्शित करने के लिए बाध्य कर सकते हैं। . यह सभी वर्णों को बाएँ से दाएँ रेंडर करने के लिए बाध्य करता है, भले ही उन्हें सामान्य रूप से कैसे प्रस्तुत किया जाए।

प्रभाव स्ट्रिंग के अंत में या वर्ण पर समाप्त होता है PDF U+202C POP DIRECTIONAL FORMATTING

आपके मामले में आपको बस इतना करना है कि प्रत्येक प्रभावित स्ट्रिंग की शुरुआत में LRO वर्ण डालें:

select nchar(8237) + columnName as columnNameDisplay
from BadTable 

संख्या 8237 हेक्साडेसिमल के दशमलव समतुल्य 202D

यदि आप इन स्ट्रिंग्स को अन्य स्ट्रिंग्स के साथ जोड़ रहे हैं जो सही ढंग से संग्रहीत हैं, तो आपको अंत में पीडीएफ वर्ण का भी उपयोग करना चाहिए:

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

यह टेक्स्ट रेंडरिंग इंजन को बताता है कि ज़बरदस्ती बाएँ से दाएँ क्रम समाप्त हो गया है।

अधिक जानकारी के लिए यहां देखें:

नोट:

  • संयोजन वर्ण ठीक से संयोजित नहीं होंगे
  • पाठ से वाक् सॉफ़्टवेयर काम नहीं करेगा - यह शायद इसे वर्णानुक्रम में पढ़ेगा लेकिन मुझे यकीन नहीं है।

अधिक जानकारी

वर्णों को उसी क्रम में संग्रहित किया जाना चाहिए जिस क्रम में वे लिखे या पढ़े जाते हैं, न कि उनके प्रदर्शित होने के क्रम में। तो उदाहरण के लिए, स्ट्रिंग:

test اختبار test

. के रूप में संग्रहित किया जाना चाहिए
01  t
02  e
03  s
04  t
05   
07  ا
خ  08  
09  ت
10  ب  
11  ا
12  ر
13 
14  t
15  e
16  s
17  t

ध्यान दें कि प्रदर्शित किया गया सबसे बाईं ओर का अरबी वर्ण स्थिति 12 (substring(@var, 12, 1) पर संग्रहीत है। ), और जैसा दिखाया गया है सबसे दाहिना स्थान 7 (substring(@var, 7, 1) पर है ) यदि आप केवल स्थिति वर्णों की गणना करते हैं जैसे वे बाएं से दाएं प्रदर्शित होते हैं, अरबी भाग इसे कैसे संग्रहीत किया जाता है, इसकी तुलना में उलट दिखाई देता है। लेकिन ऐसा इसलिए है क्योंकि उस हिस्से को दाएं से बाएं पढ़ा जाना चाहिए, इसलिए इसे दाएं से बाएं दिखाया जाता है।

अपनी समस्या को ठीक करने के लिए आपको पहले यह जांचना होगा:क्या तार गलत तरीके से संग्रहीत हैं या वे सही तरीके से संग्रहीत हैं लेकिन गलत तरीके से प्रदर्शित हैं?



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एसक्यूएल का चयन करें जहां सबक्वायरी में कोई परिणाम नहीं देता है

  2. पहले विशिष्ट आईडी द्वारा आदेश फिर आराम से

  3. SQL सर्वर CRUD संचालन

  4. एक्सेल में वीबीए में एसक्यूएल सर्वर से त्रुटि संदेश पकड़ना

  5. आप TSQL का उपयोग करके डेटाबेस में सभी तालिकाओं को कैसे काटते हैं?