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

SQL_Latin1_General_CP1_CI_AS को UTF-8 में एन्कोड करना

मैंने पाया कि इसे कैसे हल किया जाए, इसलिए उम्मीद है कि यह किसी के लिए मददगार होगा।

सबसे पहले, SQL_Latin1_General_CP1_CI_AS CP-1252 और UTF-8 का एक अजीब मिश्रण है। मूल वर्ण CP-1252 हैं, इसलिए मुझे केवल UTF-8 करना था और सब कुछ काम कर गया। एशियाई और अन्य यूटीएफ -8 वर्ण 2 बाइट्स पर एन्कोड किए गए हैं और PHP pdo_mssql ड्राइवर अलग-अलग लंबाई वर्णों से नफरत करता है, इसलिए ऐसा लगता है कि यह वर्चर (नवर्चर के बजाए) के लिए एक कास्ट करता है और फिर सभी 2 बाइट वर्ण प्रश्न चिह्न बन जाते हैं (' ?')।

मैंने इसे बाइनरी में कास्ट करके इसे ठीक किया और फिर मैंने टेक्स्ट को php के साथ फिर से बनाया:

SELECT CAST(MY_COLUMN AS VARBINARY(MAX)) FROM MY_TABLE;

php में:

//Binary to hexadecimal
$hex = bin2hex($bin);

//And then from hex to string
$str = "";
for ($i=0;$i<strlen($hex) -1;$i+=2)
{
    $str .= chr(hexdec($hex[$i].$hex[$i+1]));
}
//And then from UCS-2LE/SQL_Latin1_General_CP1_CI_AS (that's the column format in the DB) to UTF-8
$str = iconv('UCS-2LE', 'UTF-8', $str);


  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. SQL सर्वर (sqlsrv) के लिए Laravel। [पीडीओएक्सप्शन] ड्राइवर नहीं ढूंढ सका

  3. बड़े डेटासेट से डुप्लिकेट हटाएं (>100Mio पंक्तियाँ)

  4. डिक्शनरी पास करें<स्ट्रिंग,इंट>संग्रहीत प्रक्रिया टी-एसक्यूएल

  5. MS SQL सर्वर में 24/7 IS डेटाबेस का शेड्यूल्ड रखरखाव