sql >> データベース >  >> RDS >> Sqlserver

SQLサーバーで英語と混ざった逆アラビア文字を修正する方法

    問題は、データベースに多数の文字列があり、レガシーな理由から、非語彙的な順序で格納されていることです。おそらく、文字を左から右の順序でしか格納できない文字端末ベースのアプリケーションからのものでしょう。

    特殊な Unicode 文字 LRO U+202D: LEFT-TO-RIGHT OVERRIDE を使用して、準拠アプリケーションにアラビア語の左から右への表示を強制できます。 .これにより、通常のレンダリング方法に関係なく、すべての文字が強制的に左から右にレンダリングされます。

    効果は、文字列の末尾または文字 PDF U+202C POP DIRECTIONAL FORMATTING で終了します。 .

    あなたの場合、影響を受けるすべての文字列の先頭に LRO 文字を配置するだけです:

    select nchar(8237) + columnName as columnNameDisplay
    from BadTable 
      

    数値 8237 は、16 進数の 202D に相当する 10 進数です。 .

    これらの文字列を、正しく保存されている他の文字列と連結する可能性がある場合は、最後に PDF 文字も使用する必要があります:

    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. ActiveRecordエラー:SAVEPOINTactive_record_1が存在しません

    2. MySQLセッション/ユーザーに対するFILE特権

    3. 複数のJOINがクエリに適していない、またはオプティマイザの邪魔にならない理由

    4. Openshift:MySQLにリモートアクセスする方法は?