บทนำ: TINYTEXT ใน SQLite
TINYTEXT เป็นคีย์เวิร์ดที่ SQLite รับเพื่อความเข้ากันได้กับ MySQL แมปไปที่ TEXT Affinity ขนาดสูงสุดใน MySQL คือ 255 ตัวอักษร
ตัวอย่าง: ใช้ TINYTEXT สำหรับคอลัมน์ name
ขั้นตอนที่ 1-3: โปรเจกต์, Layout, MainActivity
โครงสร้างเดียวกับตัวอย่าง SQLite ก่อนหน้า
ขั้นตอนที่ 4: DatabaseHelper.java - ใช้ TINYTEXT
@Override
public void onCreate(SQLiteDatabase db) {
try {
db.execSQL("CREATE TABLE " + CONTACTS_TABLE_NAME +
"(id INTEGER PRIMARY KEY, name TINYTEXT, salary BIGINT(8), datetime DEFAULT CURRENT_TIMESTAMP)");
} catch (SQLiteException e) {
try { throw new IOException(e); }
catch (IOException e1) { e1.printStackTrace(); }
}
}
TINYTEXT ใน SQLite vs MySQL
| คุณสมบัติ | MySQL | SQLite |
|---|---|---|
| ขนาดสูงสุด | 255 ตัวอักษร (255 bytes) | ไม่มีข้อจำกัด (TEXT Affinity) |
| Affinity | TEXT | TEXT |
| Performance | Optimized สำหรับข้อความสั้น | เหมือน TEXT ทุกประการ |
SQLite ไม่บังคับขนาด
- ใน MySQL: TINYTEXT จำกัด 255 ตัวอักษร จะ Error หากเกิน
- ใน SQLite: TINYTEXT = TEXT = MEDIUMTEXT = LONGTEXT (Affinity เดียวกัน)
- สามารถเก็บข้อความยาวได้ไม่จำกัด (ในขอบเขต RAM/Storage)
เมื่อไหร่ควรใช้ TINYTEXT?
- Porting จาก MySQL Schema ที่ใช้ TINYTEXT
- เอกสาร Schema: บอกว่า "คอลัมน์นี้ควรสั้น (< 255 chars)"
- ใน SQLite ใช้ TEXT ธรรมดาก็ได้
Best Practice: ใช้ CHECK Constraint จำกัดขนาด
หากต้องการจำกัดขนาดจริงใน SQLite:
db.execSQL("CREATE TABLE " + CONTACTS_TABLE_NAME + "(" +
"id INTEGER PRIMARY KEY, " +
"name TEXT CHECK(LENGTH(name) <= 255), " + // จำกัด 255 ตัวอักษร
"salary BIGINT(8), " +
"datetime DEFAULT CURRENT_TIMESTAMP)");
ข้อแนะนำ
- ใช้
TEXTแทน TINYTEXT/MEDIUMTEXT/LONGTEXT ใน SQLite Native - ใช้
CHECK(LENGTH(column) <= N)หากต้องการ Validate ขนาด - Index บน TEXT: ใช้
CREATE INDEX idx_name ON table(name)แต่ควรจำกัดความยาว
ผลลัพธ์
ListView แสดงข้อมูล TINYTEXT ได้ปกติ เหมือน TEXT ทุกประการ