2009-02-23 13 views
16

Tôi đã tạo một bảng trong SQL Server CE và nhận ra nó không hỗ trợ varchar.Tại sao SQL Server CE không hỗ trợ VARCHAR?

Nhìn này, tôi thấy rằng "các cột văn bản không phải Unicode (varchar, char, text) và smallmoney không được hỗ trợ; mặc dù nvarchar, nchar, ntext và tiền được hỗ trợ" là stated at MSDN.

Điều này có đúng không? Tại sao điều này, chính xác? Có vẻ như một cơ sở dữ liệu nhỏ gọn sẽ hỗ trợ các loại dữ liệu mất ít byte hơn để lưu trữ ... Tôi cho rằng phải mất nhiều không gian hơn để lưu các ký tự Unicode.

Lý do đằng sau điều này là gì?

Trả lời

11

Có thể vì Windows CE hoàn toàn dựa trên Unicode và tất cả các chuỗi của nó đều được lưu trữ theo cách đó.

10

Tôi nghĩ rằng họ đang cố gắng giảm dấu chân triển khai và đơn giản hóa giao diện. Điều đó và có lẽ cố gắng tránh phải triển khai nhiều phiên bản của các tệp DLL (unicode so với các phiên bản không phải unicode).

Và có đúng là chúng chỉ hỗ trợ Unicode.

Nhưng điều đó không có nghĩa là phải mất 2 byte để lưu trữ. Bạn có thể mã hóa nó ở lớp cơ sở dữ liệu để cơ bản loại bỏ byte đầu tiên khi nó không cần thiết. Nhiều công cụ cơ sở dữ liệu làm điều này như một phương tiện nén trên Unicode. Nó chỉ có nghĩa là bất kỳ mục nào sử dụng bộ hai byte có một chi phí nhỏ của một điểm đánh dấu bổ sung cho động cơ biết rằng trình tự đang sử dụng hai byte. Nếu không, một byte đơn vẫn có thể được lưu trữ vào đĩa và được mở rộng như một phần của đọc RowData.

Hầu hết các cơ sở dữ liệu nhỏ gọn luôn sử dụng dạng nén runlength khi chúng thực sự đặt byte vào đĩa để tiết kiệm dung lượng. Các định dạng bạn xảy ra để nhìn thấy nó trong khi nó đi ra từ động cơ hiếm khi phù hợp với những gì thực sự được lưu trữ trên đĩa.

+0

Câu trả lời hay. Tôi đã tò mò, (nhưng không thực sự quan tâm) về cách thể chất của nó được lưu trữ bản thân mình. – enorl76