SQL Server 2005/2008 Đối chiếu / Bộ ký tự UTF-8


16

Tôi không thể tìm thấy tùy chọn (s) trực tiếp đến bộ UTF-8rellated Collations/Charsetstrong SQL Server 2005/2008, giống như có thể thiết lập trong một động cơ SQL, nhưng trong SQL Server 2005/2008 là chỉ có Latinh và SQL collations.

Có một số tùy chọn để buộc / cài đặt các collations / bộ ký tự này trong công cụ SQL Server (cho cả hai phiên bản) 2005/2008 trên HĐH Win2008

Câu trả lời:


13

Không, không có. Máy chủ SQL không hỗ trợ UTF-8.

Bạn cần xác định các cột của mình là nvarchar / nchar nếu bạn muốn dữ liệu unicode. Lưu ý, SQL Server nội bộ lưu trữ cái này dưới dạng UCS-2.

Lưu ý rằng điều này đã được yêu cầu từ MS trên Connect và có một bài viết KB cũ hơn . Và một số thông tin trên blog này cũng vậy


6
ngoài ra, nếu bạn đang thực hiện bất kỳ kết hợp văn bản nào trên một nvarchar với các ký tự nước ngoài, bạn cần khớp trên một chuỗi được định dạng bằng N trước chuỗi (ví dụ: N'ottaἰκ
swasheck

Hành vi này đã thay đổi trong bất kỳ bản phát hành máy chủ SQL nào gần đây chưa?
Seiyria

@Seiyria: không, hành vi tương tự
gbn

Bất cứ ai tìm được câu trả lời này, vui lòng truy cập trang MS Connect và bình chọn rằng MS hỗ trợ UTF-8 trên SQL Server. Cảm ơn: D
DarcyThomas

@DarcyThomas Điều này đang trở thành hiện thực trong SQL Server 2019, mặc dù nó vẫn không phải là thứ mà người ta nên sử dụng trừ khi họ có nhu cầu rõ ràng về nó. Xin vui lòng xem câu trả lời của tôi để biết chi tiết.
Solomon Rutzky

2

Bạn không thể cài đặt UTF-8 dưới dạng bộ ký tự vì nó không phải là bộ ký tự, nó là mã hóa.

Nếu bạn muốn lưu trữ văn bản Unicode, bạn sử dụng nvarcharkiểu dữ liệu.

Nếu bạn muốn lưu trữ văn bản được mã hóa bằng UTF-8, bạn lưu nó dưới dạng dữ liệu nhị phân ( varbinary).


1

Bắt đầu trong SQL Server 2019 (hiện đang ở phiên bản beta / "Bản xem trước công nghệ cộng đồng"), có hỗ trợ riêng cho UTF-8 thông qua một loạt các đối chiếu UTF-8 mới. TUY NHIÊN, có khả năng sử dụng UTF-8 không có nghĩa là bạn nên làm vậy. Có những hạn chế nhất định khi sử dụng UTF-8, chẳng hạn như:

  1. Chỉ 128 điểm mã đầu tiên là 1 byte (tức là bộ ASCII 7 bit tiêu chuẩn)
  2. Gần 2000 điểm mã tiếp theo là 2 byte, do đó không tiết kiệm dung lượng so với UTF-16 / NVARCHAR
  3. Các điểm mã 63k còn lại trong BMP (tức là phạm vi U + 0800 - U + FFFF) đều có 3 byte, do đó lớn hơn 1 byte so với cùng một ký tự trong UTF-16 / NVARCHAR.
  4. Chỉ cần nói rằng: Ký tự bổ sung có 4 byte trong cả hai bảng mã, vì vậy không có sự khác biệt về không gian ở đó
  5. Mặc dù bạn có thể tiết kiệm không gian bằng UTF-8, nhưng rất có khả năng bạn sẽ đánh mạnh vào hiệu suất để làm việc đó.

Điều thực sự xuất hiện là đây: UTF-8 là một thiết kế định dạng lưu trữ để cho phép các hệ thống 8 bit (thường được thiết kế xung quanh ASCII và ASCII Extended - Trang mã) để sử dụng Unicode mà không phá vỡ bất kỳ điều gì hoặc yêu cầu bất kỳ sửa đổi nào hiện có các tập tin để giữ cho mọi thứ chạy. UTF-8 là tuyệt vời cho các hệ thống tệp và mạng, nhưng dữ liệu được lưu trữ trong SQL Server thì không. Thực tế là dữ liệu chỉ xảy ra hầu hết (hoặc hoàn toàn) trong phạm vi ASCII tiêu chuẩn yêu cầu ít không gian hơn so với dữ liệu tương tự khi được lưu trữ dưới dạng UTF-16 / NVARCHARlà một tác dụng phụ. Chắc chắn, đó là một tác dụng phụ có thể chứng minh hữu ích, nhưng quyết định đó cần được đưa ra bởi một người hiểu cả dữ liệu hậu quả / nhược điểm của quyết định này. Đây làkhông phải là một tính năng cho sử dụng chung.

Ngoài ra, trường hợp sử dụng chính cho UTF-8 (trong SQL Server) là dành cho mã ứng dụng đã sử dụng UTF-8, có thể đã có một RDBMS khác hỗ trợ nó và không có mong muốn hoặc khả năng cập nhật lược đồ mã / DB ứng dụng để sử dụng NVARCHARkiểu dữ liệu (cho bảng, biến, tham số, v.v.) hoặc để tiền tố chuỗi ký tự có chữ hoa "N". Mục tiêu giống như lý do UTF-8 hiện có: cho phép mã ứng dụng sử dụng Unicode mà không thay đổi cấu trúc tổng thể hoặc hiển thị dữ liệu tồn tại không hợp lệ. Nếu điều này mô tả tình huống của bạn, thì hãy sử dụng UTF-8, nhưng lưu ý rằng vẫn còn một vài lỗi / vấn đề với nó.

Nếu bạn không có một nhu cầu rõ ràng cho Unicode làm việc mà không sử dụng NVARCHARhoặc chữ hoa "N" xâu tiền tố, sau đó kịch bản chỉ khác nơi UTF-8 là một lợi ích là nếu bạn có rất nhiều chủ yếu là dữ liệu ASCII chuẩn mà nhu cầu để cho phép Các ký tự Unicode và bạn đang sử dụng NVARCHAR(MAX)(điều đó có nghĩa là nén dữ liệu sẽ không hoạt động) và bảng được cập nhật thường xuyên (vì vậy, Indexed Clusterstore Index có thể sẽ không thực sự giúp ích).

Để biết chi tiết đầy đủ, xin vui lòng xem bài viết của tôi:

Hỗ trợ UTF-8 bản địa trong SQL Server 2019: Tiên tri cứu rỗi hay sai?


0

Tôi là trường hợp của tôi, tôi đã phải hiển thị các ký tự tiếng Ả Rập và cơ sở dữ liệu phát triển của tôi là vào năm 2014, ở đây mọi thứ hoạt động tốt. Ở đây, trong truy vấn tôi có thể thấy các ký tự tiếng Ả Rập và đối chiếu của tôi là SQL_Latin1_General_CP1256_CI_AS

Nhưng sản phẩm của tôi là trong máy chủ SQL 2008 và cuối cùng nó không hỗ trợ bộ ký tự UTF-8. Ở đây, tôi có thể thấy tất cả ??????????? vì UTF-8 không được hỗ trợ trong SQL 2008.

Tất cả những gì tôi đã làm là thay đổi tất cả varchar thành nvarchar và tôi có thể thấy char tiếng Ả Rập đúng cách. Ngoài ra, tôi thay đổi đối chiếu cơ sở dữ liệu 2008 của mình thành SQL_Latin1_General_CP1256_CI_AS

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.