Функция
CONV(str, from, to) преобразует систему счисления.
Проверка для большого десятичного:
mysql> SELECT CONV(18446744073709551615, 10, 36);
+------------------------------------+
| CONV(18446744073709551615, 10, 36) |
+------------------------------------+
| 3W5E11264SGSF |
+------------------------------------+
1 row in set (0.00 sec)
mysql> SELECT CONV('3W5E11264SGSF', 36, 10);
+-------------------------------+
| CONV('3W5E11264SGSF', 36, 10) |
+-------------------------------+
| 18446744073709551615 |
+-------------------------------+
1 row in set (0.00 sec)
Прекрасно справляется. Ведь внутри себя MySQL работает с 128-битными целыми (long long в Си и BIGINT в SQL). Но вот с шестнадцатеричными почему-то ограничивается 64-мя битами:
mysql> SELECT CONV(18446744073709551615, 10, 16);
+------------------------------------+
| CONV(18446744073709551615, 10, 16) |
+------------------------------------+
| FFFFFFFFFFFFFFFF |
+------------------------------------+
1 row in set (0.00 sec)
mysql> SELECT CONV('3W5E11264SGSF', 36, 16);
+-------------------------------+
| CONV('3W5E11264SGSF', 36, 16) |
+-------------------------------+
| FFFFFFFFFFFFFFFF |
+-------------------------------+
1 row in set (0.00 sec)
У меня версия 5.5.24.
В документации сказано:
CONV() works with 64-bit precision.
Но тогда как объяснить первую часть поста?