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

Encoding SQL_Latin1_General_CP1_CI_AS ke dalam UTF-8

Saya menemukan cara menyelesaikannya, jadi semoga ini bermanfaat bagi seseorang.

Pertama, SQL_Latin1_General_CP1_CI_AS adalah campuran aneh dari CP-1252 dan UTF-8. Karakter dasarnya adalah CP-1252, jadi inilah mengapa yang harus saya lakukan adalah UTF-8 dan semuanya bekerja. Karakter Asia dan UTF-8 lainnya dikodekan pada 2 byte dan driver php pdo_mssql tampaknya membenci karakter panjang yang bervariasi sehingga tampaknya melakukan CAST ke varchar (bukan nvarchar) dan kemudian semua karakter 2 byte menjadi tanda tanya (' ?').

Saya memperbaikinya dengan mentransmisikannya ke biner dan kemudian saya membangun kembali teks dengan php:

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

Di 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. Ekspor data kueri SQL ke Excel

  2. 4 Sumber Daya Pemantauan SQL Server yang Menakjubkan untuk Administrator Basis Data

  3. 3 Cara Mengembalikan Semua Tabel TANPA Kunci Utama di SQL Server

  4. Cara Mendapatkan Definisi Kolom Terhitung di SQL Server menggunakan T-SQL

  5. Bagaimana cara memvalidasi poligon geografi di SQL server 2008?