MD5 là hex 32 ký tự (128 bit). Dùng CONV() chuyển hex→decimal, CAST() để ép kiểu số lớn. Vì số 128 bit vượt quá BIGINT, chia làm 2 phần 16 ký tự.
Tạo bảng:
mysql> CREATE TABLE DemoTable (Password TEXT); Query OK, 0 rows affected (0.60 sec)
Chèn 2 chuỗi MD5:
mysql> INSERT INTO DemoTable VALUES("a5391e96f8d48a62e8c85381df108e98"); Query OK, 1 row affected (0.16 sec)
mysql> INSERT INTO DemoTable VALUES("ea7a32d2dc5bb793af262dcb6ea1a54d"); Query OK, 1 row affected (0.18 sec)
Truy vấn chuyển đổi:
mysql> SELECT
CAST(CONV(SUBSTR(Password,1,16),16,10) AS DECIMAL(65)) * 18446744073709551616
+ CAST(CONV(SUBSTR(Password,17,16),16,10) AS DECIMAL(65))
AS DecimalValue FROM DemoTable;
Kết quả (số lớn 39 chữ số):
+-----------------------------------------+ | DecimalValue | +-----------------------------------------+ | 219619200658969319114298942978912194200 | | 311673842057003455136843080376797734221 | +-----------------------------------------+ 2 rows in set (0.00 sec)
Giải thích: SUBSTR(...,1,16) lấy 16 ký tự đầu (64 bit cao), SUBSTR(...,17,16) lấy 16 ký tự sau (64 bit thấp). CONV(hex,16,10) chuyển hex sang decimal. Nhân phần cao với 2^64 (18446744073709551616) rồi cộng phần thấp.