在SQL Server数据库中存储base64是否比存储与十六进制相同的数据有任何明显的缺点?
大多数具有哈希值性质的数据*(请参见下面的注释)都以数据类型或数据类型存储在关系数据库(如SQL Server)中 当存储在在SQL Server数据库中存储base64是否比存储与十六进制相同的数据有任何明显的缺点?,sql,sql-server,cryptography,relational-database,Sql,Sql Server,Cryptography,Relational Database,大多数具有哈希值性质的数据*(请参见下面的注释)都以数据类型或数据类型存储在关系数据库(如SQL Server)中 当存储在CHAR中而不是作为数据库实现时,它们大多存储为十六进制。也就是说,它们由数据库的用户或使用数据库的代码的作者以十六进制存储,而不是由数据库本身存储 所以,我的问题是:为什么?为什么只将其存储为十六进制?我想在CHAR字段中将这种性质的内容存储为base64 它也会占用更少的空间 存储为ASCII纯文本 例如,要在CHAR类型列中存储纯ASCII格式的文本“Hello”,假
CHAR
中而不是作为数据库实现时,它们大多存储为十六进制。也就是说,它们由数据库的用户或使用数据库的代码的作者以十六进制存储,而不是由数据库本身存储
所以,我的问题是:为什么?为什么只将其存储为十六进制?我想在CHAR
字段中将这种性质的内容存储为base64
它也会占用更少的空间
存储为ASCII纯文本
例如,要在CHAR
类型列中存储纯ASCII格式的文本“Hello”,假设字符串是我要存储的唯一字符串,因此我选择了固定长度的列,则将选择CHAR(6)
(空字符数为一个CHAR
)
以十六进制表示法存储
将其存储为十六进制将需要字符(11)
,即10个十六进制字符加1个空字符
存储在base64符号中
在base64中存储相同内容只需要字符(8)
,即5个字符+1个空字符,在ASCII编码中总共占用6个字节,等于48位,当转换为base64时,仅需要(48/6=8)8个字符来表示,包括空字符
那么,为什么十六进制表示法更受欢迎呢?更重要的是,在以base64表示法存储数据时,是否存在我可能忽略的任何缺点
*性质相似的数据:
性质为的数据具有值、消息摘要、校验和或盐(对于哈希函数或基于密码的密钥派生函数或用于加密算法的密钥),等等。Base 64通常会将二进制数据的大小增加约25%。这是一种在向数据库传输信息和从数据库传输信息时可能使用的格式,但您可能不希望实际以这种格式存储二进制数据(而是让您的应用程序担心)。可能是因为二进制数据在例如SSMS中更难处理,所以采用了基于字符的格式,选择base16是因为base64还不存在/还没有实现/还不流行,而且大多数编码人员都陷入了困境。在你的应用程序中随意使用任何对你来说最容易使用的东西谁在乎呢?只需将其存储为二进制数据,而不是任何类型的文本。@MartinSmith I实际上就是这样做的。:-)