2013-09-06 40 views
5

Tôi đang tranh luận kiểu dữ liệu nào sẽ sử dụng khi lưu trữ giá trị băm SHA256 trong SQL Server. Nếu nó là CHAR (64) hoặc BINARY (32) ... Cột này sẽ là một phần của chỉ mục nhóm duy nhất. Tôi biết rằng tôi có thể tách lông vào thời điểm này, tuy nhiên tôi muốn làm điều này ngay lần đầu tiên và tôi biết rằng đôi khi các kiểu dữ liệu nguyên thủy nhanh hơn và các lần các kiểu mới kỳ lạ hơn hoạt động tốt hơn. (có tôi biết char (64) không phải là tất cả những gì mới, nhưng nó mới hơn so với lưu trữ byte)CHAR (64) hoặc BINARY (32) Để lưu trữ SHA256 Hash trong SQL SERVER

Tôi đã xem xét và không thể tìm thấy bất kỳ điều gì về hiệu suất của một so với khác về mặt tìm kiếm , v.v.

+2

Điều này có hữu ích không? http://stackoverflow.com/questions/252156/sql-server-2005-what-data-type-to-use-to-store-passwords-hashed-by-sha-256-algo – dcaswell

+1

Tôi sẽ sử dụng nhị phân (32) đơn giản vì không có lý do gì tôi có thể tranh luận về char (64) - lý do duy nhất tại sao tôi tranh luận sau này là tất cả công việc được thực hiện hầu như chỉ qua CLI (nhưng sau đó chức năng chuyển đổi có thể được sử dụng để tương tác với con người) . Lập trình, xử lý dữ liệu thô dễ dàng, nếu không dễ dàng hơn. Nó cũng cho kết quả trong không gian hơi ít hơn (-> bao giờ để chỉ số nhỏ hơn/bao giờ so sánh nhanh hơn như vậy) và kể từ khi tôi không thể tranh luận cho char (64), cũng có thể chỉ mất lợi ích miễn phí. – user2246674

+0

Từ những gì tôi thấy nhị phân (32) có một chút của một cạnh trên char (64) và tôi sẽ chỉ sử dụng cột đó ở phía SQL. Mặt khác của phương trình như đã được đề cập ở đây là khả năng sử dụng trong mã, tuy nhiên tôi muốn đạt được rằng cạnh nhỏ và chỉ ăn phức tạp dev thêm nếu bất kỳ thực sự tồn tại. Vì vậy .. Tôi sẽ sử dụng BINARY (32). http://stackoverflow.com/a/16993150/128795 – kroolk

Trả lời

0

bạn biết rằng bằng cách sử dụng CHAR (64), mỗi hàng sẽ chiếm 64 bit ngay cả khi khóa của bạn là "A"? Tôi sẽ không thảo luận về thực tế rằng bạn đang sử dụng một chuỗi như một chỉ số nhóm, tôi chỉ cho rằng bạn có một lý do chính đáng cho điều đó, nhưng sử dụng CHAR thay vì VARCHAR? Bạn có dự định cập nhật giá trị không? Bởi vì đó sẽ là lý do duy nhất tôi thấy sử dụng char thay vì varchar

+1

Hàm băm SHA256 sẽ luôn chiếm 64 ký tự. Như vậy CHAR vs VARCHAR. Từ các ý kiến ​​ở trên tôi tin rằng BINARY (32) là con đường để đi. Lý do tôi sử dụng băm đó là vì tôi có bit văn bản cần phải là duy nhất (2048 in len) và tôi có thể so sánh nhanh hơn băm so với biểu diễn chuỗi và cho xác suất thấp của vụ va chạm SHA256 tôi nhận được tăng hiệu suất. Bảng này không mang tính giao dịch cao, hoặc sẽ không theo sau số liệu dữ liệu ban đầu, nhưng sẽ được đọc thường xuyên. Suy nghĩ của bạn được đánh giá cao nên cảm thấy tự do để trả lời/phê bình. – kroolk

+1

@kroolk SHA256 là quá mức cần thiết cho mục đích của bạn sau đó. Bạn có thể đi với một băm không mã hóa nhanh hơn thay vì nếu bạn không nhớ tìm kiếm xung quanh cho một cái gì đó không được xây dựng. (Có một thư viện .NET CityHash trên GitHub nhưng nó liên quan đến một DLL gốc: https://github.com/gmarz/CityHash) – millimoose