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

时间:2017-11-07 19:42:43

标签: mysql varchar ethereum varbinary

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

地址数据如下:

0x3f5ce5fbfe3e9af3971dd833d26ba9b5c936f0be
0x1d80982502f3bb75654df13aa32bbd5ac9cab7d6
0xaf13bbdbe1ff53c2df7109a53c217320d2d76ee2
...

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

2 个答案:

答案 0 :(得分:4)

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

CHAR(40) :( charset is not important here

  • 专业:简洁
  • 缺点:您需要更多空间磁盘(〜+ 100%
  • 缺点:您存储存储无效non hexa数据的风险

BINARY(20)

  • 专业人士:减少空间磁盘
  • 专业人士:您无法存储无效数据
  • 缺点:您需要转换(如果您需要查看hexa值)

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

  • unhex(' FF')== unhex(' ff')但是' FF' <> ' FF'
  • 尝试存储unhex(' zz')会引发错误,文字没有错误提升)

此外Hex / unHex是非常简单的功能

提示:您可以将数据存储在BINARY列中,并创建hexa视图以轻松查看hexa值。

以下是在二进制区http://rextester.com/SEV11235

中存储数据的示例

答案 1 :(得分:2)

优势CHAR:简洁。

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

在我看来,复杂性的增加并不值得节省空间,除非你要查看最少的百万行数据库。即便如此,我可能也不会打扰。

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