เมื่อต้องการแปลงค่า Hexadecimal (ฐาน 16) ให้เป็นตัวเลขขนาดใหญ่ (BigInt / UNSIGNED INTEGER) ใน MySQL ใช้ฟังก์ชัน CONV() แปลงฐาน แล้วตามด้วย CAST()
รูปแบบคำสั่ง
SELECT CAST(CONV(hex_column, 16, 10) AS UNSIGNED INTEGER) AS big_number
FROM table_name;
CONV(value, 16, 10)- แปลงจากฐาน 16 (Hex) เป็นฐาน 10 (Decimal)CAST(... AS UNSIGNED INTEGER)- แปลงผลลัพธ์สตริงเป็นตัวเลข Unsigned (0 ถึง 18446744073709551615)
ตัวอย่างการใช้งาน
1. สร้างตารางเก็บค่า Hex
CREATE TABLE castTypeToBigIntDemo (
Id INT NOT NULL AUTO_INCREMENT,
Value VARCHAR(100),
PRIMARY KEY (Id)
);
INSERT INTO castTypeToBigIntDemo (Value) VALUES
('AB5'),
('55244A5562C5566354'),
('4546575765ABD78'),
('5979787DEFAB'),
('86868686856ABD');
2. แปลง Hex → Decimal (BigInt)
SELECT CAST(CONV(Value, 16, 10) AS UNSIGNED INTEGER) AS BigNumber
FROM castTypeToBigIntDemo;
ผลลัพธ์:
+----------------------+
| BigNumber |
+----------------------+
| 2741 |
| 18446744073709551615 |
| 311985829366644088 |
| 98378247434155 |
| 37865559219858109 |
+----------------------+
หมายเหตุ: แถวที่ 2 ได้ค่าสูงสุด UNSIGNED BIGINT (2^64-1) พร้อม Warning เพราะค่า Hex เกินขอบเขต
การแปลงฐานอื่นๆ
| คำสั่ง | ความหมาย | ผลลัพธ์ |
|---|---|---|
CAST(CONV('FF', 16, 10) AS UNSIGNED) | Hex FF → Decimal | 255 |
CAST(CONV('1010', 2, 10) AS UNSIGNED) | Binary 1010 → Decimal | 10 |
CAST(CONV('123', 10, 16) AS CHAR) | Decimal 123 → Hex String | '7B' |
CAST(CONV('35', 10, 36) AS CHAR) | Decimal 35 → Base36 | 'Z' |
ข้อจำกัดของ UNSIGNED INTEGER (BIGINT)
- ช่วงค่า: 0 ถึง 18,446,744,073,709,551,615 (2^64 - 1)
- ค่าที่ใหญ่กว่า จะถูก clamp ไว้ที่ค่าสูงสุด + Warning
- หากต้องการค่ามากกว่า ต้องเก็บเป็น
DECIMAL(65,0)หรือVARCHAR
การใช้งานใน Stored Procedure / Function
DELIMITER //
CREATE FUNCTION HexToBigInt(hex_str VARCHAR(100))
RETURNS BIGINT UNSIGNED
DETERMINISTIC
BEGIN
RETURN CAST(CONV(hex_str, 16, 10) AS UNSIGNED INTEGER);
END //
DELIMITER ;
-- ใช้งาน
SELECT HexToBigInt('ABCDEF');
สรุป
ใช้ CAST(CONV(hex_col, 16, 10) AS UNSIGNED INTEGER) เพื่อแปลง Hex String เป็น BIGINT UNSIGNED ใน MySQL รองรับค่าจนถึง 2^64-1 เกินกว่านั้นต้องใช้ DECIMAL หรือ VARCHAR