在数据库中存储十六进制和十六进制字符的最佳数据类型

Best datatype to store hexidecimal and hex characters in the database

我正在使用以太坊api。我想将 api 中的信息存储到 mysql table.

地址数据如下:

0x3f5ce5fbfe3e9af3971dd833d26ba9b5c936f0be
0x1d80982502f3bb75654df13aa32bbd5ac9cab7d6
0xaf13bbdbe1ff53c2df7109a53c217320d2d76ee2
...

我一直只对这些字符使用 varchar 列。有更好的数据类型吗?我在想也许 varbinary 但我不知道是否有任何优势。缺点是 sql 代码会更混乱,因为我将不得不使用 HEX() 和 UNHEX()。

优点CHAR:简单。

优点BINARY:每行节省 22 个字节。

在我看来,增加的复杂性不值得 space 节省,除非您正在查看至少百万行的数据库。即使那样我可能也不会打扰。

在任何一种情况下,如果您非常在意,您可以通过使用固定长度的列而不是变量来节省一两个字节(并可能改进您的数据库结构优化)。

对我来说不存在特定类型,您需要在文本和二进制之间进行选择:

CHAR(40) : (charset is not important here)

  • 优点:简单
  • 缺点:您需要更多 space 磁盘 (~+100%)
  • 缺点:您有存储无效 non hexa 数据的风险

二进制(20) :

  • 优点:减少 space 磁盘
  • 优点:不能存储无效数据
  • 缺点:您需要转换 (如果您需要查看十六进制值)

对我来说数据一致性是最重要的一点:我更喜欢二元期权。

  • unhex('FF') == unhex('ff') 但 'FF' <> 'ff'
  • 尝试存储 unhex('zz') 会引发错误,文本不会引发错误)

而且Hex/unHex都是很简单的函数

提示:您可以将数据存储在 BINARY 列中并创建一个 hexa 视图以轻松查看十六进制值。

这里是一个在二进制区域存储数据的例子http://rextester.com/SEV11235