สรุป
โปรแกรมประยุกต์บางโปรแกรม (โดยเฉพาะอย่างยิ่งที่ที่อยู่เว็บที่ยึด) ต้องจัดการกับข้อมูล Unicode ที่มีการเข้ารหัส ด้วยวิธีการเข้ารหัส UTF-8 SQL Server 7.0 และ SQL Server 2000 ใช้ Unicode เข้ารหัสอื่น (UCS-2) และไม่รู้จัก UTF-8 เป็นข้อมูลอักขระที่ถูกต้อง บทความนี้กล่าวถึงตัวเลือกบางอย่างสำหรับจัดการกับสถานการณ์นี้
ข้อมูลเพิ่มเติม
สามารถจะเข้ารหัสข้อมูล Unicode ในหลากหลายแบบ UCS 2 และ utf-8 มีสองวิธีในการจัดเก็บรูปแบบบิตที่แทนอักขระ Unicode ทั่วไป Microsoft Windows NT, SQL Server จาวา COM และโปรแกรมควบคุม ODBC ของ SQL Server และตัวให้บริการ OLEDB ทั้งหมดแสดงข้อมูล Unicode ภายในเป็น UCS 2
ตัวเลือกสำหรับการใช้ SQL Server 7.0 หรือ SQL Server 2000 เป็นเซิร์ฟเวอร์ backend สำหรับโปรแกรมประยุกต์ที่ใช้ส่ง และรับข้อมูล Unicode ที่มีการเข้ารหัสเป็น UTF-8 รวม:
-
ถ้าโปรแกรมประยุกต์ของคุณใช้ Active Server Page (ASP) และคุณกำลังใช้ Internet Information Server (IIS) 5.0 และ Microsoft Windows 2000 คุณสามารถเพิ่ม "<% Session.Codepage=65001% >" สคริปต์การ ASP ฝั่งเซิร์ฟเวอร์ของคุณ นี้บอกให้ IIS เมื่อต้องการแปลงสายอักขระทั้งหมดที่สร้างขึ้นแบบไดนามิก (ตัวอย่าง: Response.Write) จาก 2 UCS ถึง UTF-8 โดยอัตโนมัติก่อนที่จะส่งออกไปยังไคลเอนต์
ถ้าคุณไม่ต้องการเปิดใช้งานเซสชัน อีกวิธีหนึ่งคือคุณสามารถใช้คำสั่งฝั่งเซิร์ฟเวอร์ " < %@เพจรหัส 65001% = > " ได้
UTF-8 ข้อมูลใด ๆ ที่ส่งจากไคลเอนต์ไปยังเซิร์ฟเวอร์ผ่านการรับหรือการลงรายการบัญชีจะยังถูกแปลงเป็น UCS 2 โดยอัตโนมัติ คุณสมบัติ Session.Codepage เป็นวิธีการแนะนำจะจัดการกับข้อมูล UTF-8 ภายในโปรแกรมประยุกต์เว็บ การตั้งค่าเพจรหัสนี้ไม่พร้อมใช้งานบน IIS 4.0 และ Windows NT 4.0 สำหรับข้อมูลเพิ่มเติม ดูบทความในฐานความรู้ของ Microsoft ต่อไปนี้:ข้อความแสดงข้อผิดพลาด254313 : เซิร์ฟเวอร์ที่ใช้งานอยู่หน้าข้อผิดพลาด ' ASP 0203' รหัสไม่ถูกต้อง
-
แปลไปยัง และ จาก UCS 2 หรือ utf-8 ตามความเหมาะสมภายในแอพลิเคชัน ตัวอย่างรหัสสำหรับชนิดของการแปลงนี้จะอยู่ที่ไซต์ของ Unicode Consortium:
ftp://ftp.unicode.org/Public/PROGRAMS/CVTUTF/สามารถพบคำอธิบายระดับสูงของอัลกอริทึมการแปลง UCS 2 เป็น UTF-8 ในอินเทอร์เน็ตคำร้องขอสำหรับข้อคิดเห็นเอกสาร RFC2279
บน Windows NT หรือ Windows 2000 คุณอาจใช้ฟังก์ชัน Win32 MultiByteToWideCharและWideCharToMultiByteเมื่อต้องการแปลงไปยัง และ จาก UCS 2 UTF-8 โดยส่ง CP_UTF8 คง (65001) เป็นพารามิเตอร์แรกกับฟังก์ชันได้ -
ปรับเปลี่ยนแอพลิเคชันเพื่อใช้ UCS 2 แทนการเข้ารหัส UTF-8
-
เก็บข้อมูล UTF 8 จริงบนเซิร์ฟเวอร์โดยใช้คอลัมน์ไบ นารี/VARBINARY/รูป เก็บข้อมูล UTF 8 บน SQL Server หมายความ ว่า คุณไม่สามารถใช้ SQL Server เพื่อเรียงลำดับ หรือค้นหาช่วงของค่าเหล่านี้ราวกับว่าข้อมูลมีข้อมูลที่มีอักขระที่ถูกต้อง รวมชนิดของการดำเนินการบนคอลัมน์ที่ประกอบด้วยข้อมูล UTF 8 ที่จะส่งกลับผลลัพธ์ที่คาดไว้ "ORDER BY" มากกว่า-กว่า " > " และน้อย-กว่า " < " เปรียบเทียบ และฟังก์ชันการจัดการสายอักขระ SQL Server เช่น SUBSTRING() อยู่แล้วภายใน
อย่างไรก็ตาม การเปรียบเทียบเท่ากัน จะทำงานตราบเท่าที่สายอักขระถูกเปรียบเทียบเท่ากันในระดับไบต์ หมายเหตุว่า ถ้าคุณเก็บข้อมูล UTF-8 ใน SQL Server คุณไม่ควรใช้อักขระคอลัมน์ (อักขระ/NCHAR/VARCHAR และอื่น ๆ) UTF-8 ไม่ใช่ข้อมูลอักขระที่ถูกต้อง กับ SQL Server และ ด้วยการจัดเก็บข้อมูลที่ไม่ใช่อักขระในคอลัมน์อักขระคุณย่อมเสี่ยงต่อการพบกับปัญหาต่าง ๆ เช่นปัญหากล่าวถึงในบทความฐานความรู้ของ Microsoft ต่อไปนี้:155723 INF: การตัดคำของเซิร์ฟเวอร์ SQL ของสายอักขระ DBCS
234748 PRB: โปรแกรมควบคุม ODBC ของ SQL Server แปลงภาษาเหตุการณ์เป็น Unicode
ถ้าคุณกำลังพิจารณาตัวเลือกนี้ โปรดระลึกว่า ถ้าคุณเคยต้องเข้าถึง UTF-8 ข้อมูลที่เก็บอยู่ภายใน SQL Server จากโปรแกรมประยุกต์อื่นที่ไม่ใช่เว็บเบราว์เซอร์ (ตัวอย่างเช่น จากคำที่ไม่ใช่เว็บ ODBC โปรแกรมประยุกต์) คุณจะต้องทำการแปลงจาก utf-8 เป็น UCS 2 ภายในแอพลิเคชันนี้เป็น ODBC, OLEDB, COM, Win32 API เรียก VB และ C ฟังก์ชันการจัดการสตริรันไทม์ไม่ทำงานกับข้อมูล UTF-8 นี้ย้ายค่าโสหุ้ยของการแปลไปยังโปรแกรมประยุกต์ที่แตกต่างกัน -
ถ้าความต้องการของคุณไม่มีความจำเป็นในการเก็บข้อมูลจากการรวมกันของภาษาที่ไม่สามารถตอบสนอง โดยโค้ดเพ คุณอาจไม่จำเป็นต้องใช้ Unicode
สนับสนุน Unicode ถูกนำมาใช้เพื่อเริ่มการทำงานกับ SQL Server 7.0 SQL Server เนื่องจาก SQL Server 6.5 ไม่สนับสนุนการจัดเก็บข้อมูล Unicode ตัวเลือกเฉพาะสำหรับ SQL Server 6.5 จะกำหนดเค้าร่างในขั้นตอนที่ 4 และ 5