Mysql – Handling MySQL length=22 and decimals=31

datatypesfloating pointMySQL

I'm using MySQL's C api to determine the maximum possible value that can be stored in a specific field.

I have the following table:

CREATE TABLE test (
f1 double(4,2),
f2 double
)


When I get the field information for f1 and f2 using the API, here is what I see:

f1: { [...], length = 4, decimals = 2 }

f2: { [...], length = 22, decimals = 31 }

I understand that the maximum value that f1 can store is 99.99 (total length = 4, so 4-2=2 digits before the decimal and 2 digits after the decimal).

Is it safe to assume that if a column type is DOUBLE, its length is 22 and its decimal is 31, then there is no (m, d) specified? If so, then can we also assume that the maximum value this column can store is 1.7976931348623157E+308 (as per the docs)? Can this value ever change between different machines/operating systems?

Do not use (m,n) on FLOAT or DOUBLE. It is virtually useless and leads to double-roundings.
DOUBLE is an IEEE-754 "Double", which includes 53 significant bits and a range that tops out at that number given (over 1.E+308). This is universal to nearly all languages, and machines.
The "22" in information_schema.COLUMNS.numeric_precision may come from how many characters it takes to display (but even that does not make sense). I don't know where you got the "31".