MySQL 5.6+ มีฟังก์ชัน Built-in สำหรับ Base64 Encoding/Decoding: TO_BASE64() และ FROM_BASE64()
รูปแบบคำสั่ง
Encode: ข้อความ → Base64
SELECT TO_BASE64('string_value') AS base64_encoded;
Decode: Base64 → ข้อความ
SELECT FROM_BASE64('base64_string') AS decoded_string;
ตัวอย่างพื้นฐาน
Encode
mysql> SELECT TO_BASE64('Password') AS Base64EncodeValue;
+-------------------+
| Base64EncodeValue |
+-------------------+
| UGFzc3dvcmQ= |
+-------------------+
1 row in set (0.00 sec)
Decode
mysql> SELECT FROM_BASE64('UGFzc3dvcmQ=') AS Base64DecodeValue;
+-------------------+
| Base64DecodeValue |
+-------------------+
| Password |
+-------------------+
1 row in set (0.00 sec)
ใช้กับคอลัมน์ตาราง
1. สร้างตารางและเพิ่มข้อมูล
mysql> CREATE TABLE Base64Demo (ProductId VARCHAR(100));
Query OK, 0 rows affected (0.54 sec)
mysql> INSERT INTO Base64Demo VALUES ('321Product'), ('Product456'), ('654Product');
2. Encode ทั้งคอลัมน์
mysql> SELECT TO_BASE64(ProductId) AS Base64Encode FROM Base64Demo;
+------------------+
| Base64Encode |
+------------------+
| MzIxUHJvZHVjdA== |
| UHJvZHVjdDQ1Ng== |
| NjU0UHJvZHVjdA== |
+------------------+
3 rows in set (0.00 sec)
3. Decode กลับ (Cross-check)
mysql> SELECT FROM_BASE64('MzIxUHJvZHVjdA==') AS DecodeValue;
+-------------+
| DecodeValue |
+-------------+
| 321Product |
+-------------+
1 row in set (0.00 sec)
กรณีใช้งานจริง
1. เก็บรหัสผ่าน/Token แบบ Obfuscate (ไม่ใช่ Encryption!)
INSERT INTO users (username, pwd_hash)
VALUES ('john', TO_BASE64(SHA2('secret123', 256)));
⚠️ Base64 **ไม่ใช่การเข้ารหัส** ใครก็ถอดรหัสได้ ใช้สำห Obfuscation หรือ Transport เท่านั้น
2. จัดเก็บ Binary Data ใน TEXT Column
-- เข้า
INSERT INTO files (name, data_b64) VALUES ('img.png', TO_BASE64(LOAD_FILE('/path/img.png')));
-- ออก
SELECT FROM_BASE64(data_b64) INTO DUMPFILE '/tmp/restored.png' FROM files WHERE name = 'img.png';
3. สร้าง Token/Reference ID
SELECT TO_BASE64(CONCAT(UUID(), '-', UNIX_TIMESTAMP())) AS unique_token;
ข้อจำกัดและข้อควรระวัง
- ขนาดเพิ่ม ~33% (Base64 ใช้ 4 ตัวอักษร แทน 3 Bytes)
- ไม่รองรับ NULL -
TO_BASE64(NULL)คืนค่า NULL - Character Set: ผลลัพธ์เป็น ASCII ปลอดภัยสำหรับทุก Charset
- MySQL Version: ต้อง 5.6.1+ (GA 2013) - เวอร์ชันเก่าต้องใช้ UDF หรือ Application Layer
ฟังก์ชันเข้ารหัสอื่นๆ ใน MySQL
| ฟังก์ชัน | ประเภท | คำอธิบาย |
|---|---|---|
AES_ENCRYPT()/AES_DECRYPT() | Symmetric Encryption | เข้ารหัสจริง (ต้องมี Key) |
SHA2(str, 256/512) | Hash (One-way) | Hash สำหรับ Password |
MD5(), SHA1() | Hash (Deprecated) | ไม่แนะนำสำหรับ Security ใหม่ |
TO_BASE64()/FROM_BASE64() | Encoding | Transport-safe representation |