Storing UUID as base64 String

后端 未结 8 1376
青春惊慌失措
青春惊慌失措 2020-11-29 16:14

I have been experimenting with using UUIDs as database keys. I want to take up the least amount of bytes as possible, while still keeping the UUID representation human read

8条回答
  •  萌比男神i
    2020-11-29 16:46

    I have an application where I'm doing almost exactly this. 22 char encoded UUID. It works fine. However, the main reason I'm doing it this way is that the IDs are exposed in the web app's URIs, and 36 characters is really quite big for something that appears in a URI. 22 characters is still kinda long, but we make do.

    Here's the Ruby code for this:

      # Make an array of 64 URL-safe characters
      CHARS64 = ("a".."z").to_a + ("A".."Z").to_a + ("0".."9").to_a + ["-", "_"]
      # Return a 22 byte URL-safe string, encoded six bits at a time using 64 characters
      def to_s22
        integer = self.to_i # UUID as a raw integer
        rval = ""
        22.times do
          c = (integer & 0x3F)
          rval += CHARS64[c]
          integer = integer >> 6
        end
        return rval.reverse
      end
    

    It's not exactly the same as base64 encoding because base64 uses characters that would have to be escaped if they appeared in a URI path component. The Java implementation is likely to be quite different since you're more likely to have an array of raw bytes instead of a really big integer.

提交回复
热议问题