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

Yad*_*ada 5 mysql varchar varbinary ethereum

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

地址数据如下:

0x3f5ce5fbfe3e9af3971dd833d26ba9b5c936f0be
0x1d80982502f3bb75654df13aa32bbd5ac9cab7d6
0xaf13bbdbe1ff53c2df7109a53c217320d2d76ee2
...
Run Code Online (Sandbox Code Playgroud)

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

Ind*_*ent 8

对我来说不存在特定类型,您需要在 text 和 binary 之间进行选择:

CHAR(40) :(字符集在这里不重要

  • 优点:简单
  • 缺点:您需要更多空间磁盘(~+100%
  • 缺点:您可能会存储无效non hexa数据

二进制(20)

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

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

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

而且Hex/unHex都是很简单的功能

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

这是将数据存储在二进制区域http://rextester.com/SEV11235的示例