MySQL hỗ trợ chuyển đổi giữa hệ thập lục phân (hex) và thập phân (decimal) thông qua hàm CONV().
Cú pháp hàm CONV()
CONV(so_nguon, co_so_nguon, co_so_dich)
-- Chuyển hex sang decimal: CONV('hex_string', 16, 10)
-- Chuyển decimal sang hex: CONV(so_decimal, 10, 16)
Ví dụ 1: Chuyển đổi trực tiếp với SELECT
mysql> SELECT CONV('A', 16, 10) AS DecimalResult;
+---------------+
| DecimalResult |
+---------------+
| 10 |
+---------------+
mysql> SELECT CONV('AB', 16, 10) AS DecimalResult;
+---------------+
| DecimalResult |
+---------------+
| 171 |
+---------------+
mysql> SELECT CONV(255, 10, 16) AS HexResult;
+------------+
| HexResult |
+------------+
| FF |
+------------+
Ví dụ 2: Stored Procedure chuyển Hex → Decimal
Tạo stored procedure
DELIMITER //
CREATE PROCEDURE SP_HEX_TO_DEC(IN HEXVALUE VARCHAR(10))
BEGIN
DECLARE Decimalvalue INT;
SET Decimalvalue = CONV(HEXVALUE, 16, 10);
SELECT Decimalvalue;
END //
DELIMITER ;
Gọi procedure
mysql> CALL SP_HEX_TO_DEC('A');
+--------------+
| Decimalvalue |
+--------------+
| 10 |
+--------------+
Cơ sở toán học chuyển đổi Hex → Decimal
Số hex AB chuyển sang decimal:
A = 10, B = 11 (trong hex)
AB(16) = 10 × 16¹ + 11 × 16⁰ = 160 + 11 = 171(10)
Công thức chung: Giá trị = Σ (chữ_số_i × 16^vị_trí_i), vị trí tính từ phải sang trái bắt đầu từ 0.
Các hàm liên quan
| Hàm | Chức năng | Ví dụ |
|---|---|---|
CONV(N, from_base, to_base) | Chuyển đổi cơ số (2-36) | CONV('FF',16,10) = 255 |
HEX(N) | Số/chuỗi → Hex string | HEX(255) = 'FF' |
UNHEX(str) | Hex string → Binary | UNHEX('FF') = 0xFF |
| Đếm bit 1 trong binary | BIT_COUNT(7) = 3 (111) |
Ứng dụng thực tế
- Lưu trữ màu sắc:
HEX(rgb)/CONV(hex_color, 16, 10) - Xử lý hash, checksum (MD5, SHA lưu dưới hex)
- Bitmask flags:
CONV('F',16,10)= 15 (1111b) - Debug dữ liệu nhị phân
Lưu ý
CONV()trả về chuỗi, có thể CAST sang số:CAST(CONV('FF',16,10) AS UNSIGNED)- Hỗ trợ cơ số từ 2 đến 36
- Chữ cái trong hex không phân biệt hoa/thường:
CONV('ab',16,10)=CONV('AB',16,10)