2012-11-15 14 views
56

Chúng tôi đang sử dụng UUID làm khóa chính cho DB oracle, và cố gắng xác định độ dài ký tự tối đa thích hợp cho VARCHAR. Rõ ràng đây là 36 ký tự nhưng chúng tôi đã nhận thấy UUID'S được tạo dài hơn này - dài tới 60 ký tự. Có ai biết độ dài tối đa phù hợp cho UUID không?Độ dài ký tự tối đa UUID

+2

Khi UUID là số 128 bit, tôi thực sự tò mò muốn biết mã hóa nào sẽ chuyển đổi nó thành chuỗi ký tự 60 char. Có vẻ như mã hóa cực kỳ kém hoặc một số vấn đề khác, không thực tế với tôi. – fvu

+0

RDBMS của bạn là gì? MS SQL có một loại dành riêng cho UUID, và những người khác chỉ đơn giản có thể lưu trữ các byte. Có lý do nào bạn muốn lưu trữ chúng như 'VARCHAR' không? –

Trả lời

97

Section 3 of RFC4122 cung cấp định nghĩa chính thức về biểu diễn chuỗi UUID. Đó là 36 ký tự - 32 chữ số hex + 4 dấu gạch ngang.

Có vẻ như bạn cần tìm ra nơi ID không hợp lệ 60 xuất phát và quyết định 1) nếu bạn muốn chấp nhận chúng và 2) độ dài tối đa của các ID đó có thể dựa trên bất kỳ API nào được sử dụng để tạo ra chúng.

40

Đây là loại trường hoàn hảo để xác định là CHAR 36, nhân tiện, không phải VARCHAR 36, vì mỗi giá trị sẽ có cùng độ dài chính xác. Và bạn sẽ sử dụng ít dung lượng bộ nhớ hơn vì bạn không cần lưu trữ độ dài dữ liệu cho giá trị phạm vi tiếp cận, chỉ là giá trị.

+5

CHAR có thể sử dụng nhiều không gian hơn VARCHAR nếu ký tự của bạn được đặt trên cột là nhiều byte (xem phần dưới cùng trên http://stackoverflow.com/a/59686/1691446) – David

+2

Khá chắc chắn UUIDv4 chỉ sử dụng bộ ký tự latin-1 của UTF-8, trong trường hợp này sẽ không bị ảnh hưởng. Chắc chắn kiểm tra nếu bạn đang sử dụng một bộ ký tự khác nhau mặc dù. –

+0

UUID ở định dạng chuỗi chỉ có thể sử dụng bộ ký tự này (regex): '[0-9A-Fa-f-]', là 23 octet riêng biệt trong ASCII. – cowbert