Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Best datatype to store hexidecimal and hex characters in the database

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().

like image 516
Yada Avatar asked Nov 07 '17 19:11

Yada


People also ask

How to store Hexadecimal value in sql?

You can use varbinary type of column to store the hexa values. You can cast/convert them to integer as and when required using the cast/convert functions.

What is hex in MySQL?

HEX() : This function in MySQL is used to return an equivalent hexadecimal string value of a string or numeric Input. If the input is a string then each byte of each character in the string is converted to two hexadecimal digits.


2 Answers

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

like image 131
Indent Avatar answered Sep 19 '22 04:09

Indent


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.

like image 35
James K Avatar answered Sep 20 '22 04:09

James K