Best datatype to store hexidecimal and hex characters in the database

99封情书 提交于 2020-05-15 00:56:37

问题


I'm using the Ethereum api. I want to store the information from the api into a mysql table.

The address data looks like:

0x3f5ce5fbfe3e9af3971dd833d26ba9b5c936f0be
0x1d80982502f3bb75654df13aa32bbd5ac9cab7d6
0xaf13bbdbe1ff53c2df7109a53c217320d2d76ee2
...

I've been using just varchar column for these characters. Are there a better data type? I'm thinking maybe varbinary but I don't know if there's any advantages. The disadvantage is that the sql code will be messier as I will have to HEX() and UNHEX().


回答1:


For me no specific type exists, you need to choose between text and binary :

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

  • pros : simplicity
  • cons : you need more space disk (~+100%)
  • cons : you risk to store invalid non hexa data

BINARY(20) :

  • pros : reduce space disk
  • pros : you can't store invalid data
  • cons: you need to convert (if you need see hexa value)

For me data consistency is the most important point : I prefer binary option.

  • unhex('FF') == unhex('ff') but 'FF' <> 'ff'
  • trying to store unhex('zz') raises an error, with text no error raised)

Moreover Hex/unHex are very simple function

Hint : You can store your data in BINARY column and create an hexa view to see easily hexa value.

Here is an example to store data in binary zone http://rextester.com/SEV11235




回答2:


Advantage CHAR: simplicity.

Advantage BINARY: you save 22 bytes per row.

In my opinion, the complexity increase isn't worth the space saving unless you're looking at a minimum of million-row databases. Even then I probably wouldn't bother.

In either case, if you care that much you can save a byte or two (and possibly improve your DB structure optimization) by using a fixed-length column rather than variable.



来源:https://stackoverflow.com/questions/47166199/best-datatype-to-store-hexidecimal-and-hex-characters-in-the-database

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!