" />
  • Thứ Ba, 23/09/2008 08:57 (GMT+7)

    MS SQL Server 2005 và UNICODE

    Câu hỏi :

    1. Làm thế nào để lưu Unicode trong SQL Server 2005? Tôi sử dụng VB.NET 2005 tạo một ứng dụng CSDL. Khi chạy chương trình, nhập liệu trên các textbox trong ứng dụng rất tốt (sử dụng font Times New Roman). Sau khi lưu vào CSDL đóng ứng dụng và mở lại thì dữ liệu hiển thị bị mất dấu.

    2. Dùng VB .Net để kết nối với SQL Server 2000, dùng font Unicode để hỗ trợ tiếng Việt. Trong quá trình nhập liệu từ form VB .Net và thêm vào CSDL trên SQL Server thì chuỗi dữ liệu tiếng Việt bị lỗi (thí dụ nhập vào chuỗi "Lớp" thì trên database chứa chuỗi "L?p", còn quá trình đọc ra thì không bị. Xin hướng dẫn để ép kiểu chữ tiếng Việt có dấu vào SQL Server.



    Trả lời :

    Mức độ hỗ trợ việc truy xuất chuỗi Unicode trong các bảng của database phụ thuộc đồng thời vào 3 thành phần: ngôn ngữ lập trình được dùng, version provider truy xuất database và bản thân database server. Trong trường hợp của bạn, may mắn là cả 3 thành phần đều hỗ trợ tốt việc truy xuất database, cụ thể:

     - Ngôn ngữ VB .Net là ngôn ngữ mới của Microsoft nên nó hỗ trợ rất tốt các chuỗi Unicode.
     - Các provider được hiện thực trong các đối tượng .Net là SqlConnection và odbcConnection. Đây là các đối tượng .Net rất mới nên cũng hỗ trợ rất tốt các chuỗi Unicode.
     - Microsoft SQL Server 2000 cũng hỗ trợ rất tốt các chuỗi Unicode. Bạn nên dùng các kiểu dữ liệu như ntext, nchar, nvarchar cho các field chứa chuỗi Unicode.

     Thường người ta dùng các câu lệnh truy vấn SQL để truy xuất dữ liệu trong database. Trong các lệnh truy vấn SQL này, các tham số chuỗi bình thường được hiểu như là chuỗi ANSI (dạng 1 byte). Để hệ thống có thể hiểu chuỗi Unicode, bạn phải thêm ký tự N trước từng tham số chuỗi Unicode. Thí dụ, nếu bạn dùng lệnh SQL "Insert into" như sau:

     'MyCommand là đối tượng odbcCommand hay sqlCommand
     MyCommand.CommandText = "INSERT INTO dsUsers VALUES('Nguyễn Văn Hiệp', 1959, "8A Lữ Gia")
     MyCommand.ExecuteNonQuery()
     để thêm 1 record mới có 3 field thông tin, trong đó 2 field hoten và diachi là chuỗi Unicode. Tuy nhiên nếu bạn viết lệnh SQL "Insert into" như trên thì chuỗi được lưu là "Nguy?n V?n Hi?p" và "8A L? Gia".
     Bạn phải viết lại lệnh SQL "Insert to" như sau:
     MyCommand.CommandText = "INSERT INTO dsUsers VALUES(N'Nguyễn Văn Hiệp', 1959, N'8A Lữ Gia')
     MyCommand.ExecuteNonQuery()
     thì các chuỗi Unicode mới được lưu đúng vào database.
     

    Chuyên mục: Cơ sở dữ liệu