Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Android

วิธีใช้ MEDIUMTEXT ใน Android SQLite

บทนำ: SQLite Data Types และ MEDIUMTEXT

SQLite ใช้ Dynamic Typing (Type Affinity) ไม่บังคับชนิดข้อมูลอย่างเคร่งครัด แต่รับคีย์เวิร์ด MEDIUMTEXT เพื่อความเข้ากันได้กับ MySQL

ตัวอย่าง: ใช้ MEDIUMTEXT สำหรับคอลัมน์ name

ขั้นตอนที่ 1-3: โปรเจกต์, Layout, MainActivity

โครงสร้างเดียวกับตัวอย่าง SQLite ก่อนหน้า

ขั้นตอนที่ 4: DatabaseHelper.java - ใช้ MEDIUMTEXT

@Override
public void onCreate(SQLiteDatabase db) {
    try {
        // MEDIUMTEXT สำหรับ name, BIGINT(8) สำหรับ salary
        db.execSQL("CREATE TABLE " + CONTACTS_TABLE_NAME +
            "(id INTEGER PRIMARY KEY, name MEDIUMTEXT, salary BIGINT(8), datetime DEFAULT CURRENT_TIMESTAMP)");
    } catch (SQLiteException e) {
        try { throw new IOException(e); } 
        catch (IOException e1) { e1.printStackTrace(); }
    }
}

SQLite Type Affinity System

SQLite จัดกลุ่ม Type เป็น 5 Affinity:

Affinityคีย์เวิร์ดที่ตรงคำอธิบาย
TEXTTEXT, VARCHAR, CHAR, CLOB, MEDIUMTEXT, LONGTEXT, TINYTEXTข้อความ
NUMERICNUMERIC, DECIMAL, BOOLEAN, DATE, DATETIMEตัวเลข/วันที่
INTEGERINT, INTEGER, TINYINT, SMALLINT, MEDIUMINT, BIGINT, BIGINT(8)จำนวนเต็ม (64-bit)
REALREAL, DOUBLE, FLOATทศนิยม
BLOBBLOB (ไม่มีคีย์เวิร์ดอื่น)ข้อมูลไบนารี

MEDIUMTEXT ใน SQLite vs MySQL

คุณสมบัติMySQLSQLite
ขนาดสูงสุด16,777,215 ตัวอักษร (~16MB)1,000,000,000+ ตัวอักษร (ขึ้นกับหน่วยความจำ)
การจัดเก็บแยกเก็บหากใหญ่เก็บในหน้าหลัก (B-tree) จนเต็ม
Performanceมี overheadเร็วกว่าสำหรับขนาดเล็ก-ปานกลาง

เมื่อไหร่ควรใช้ MEDIUMTEXT?

  • ข้อความยาว: บทความ, คำอธิบาย, JSON ขนาดใหญ่, Log
  • ต้องการความเข้ากันได้กับ MySQL Schema
  • ใน SQLite: ใช้ TEXT ก็ได้ผลเหมือนกัน (Affinity เดียวกัน)

ตัวอย่างการ Insert ข้อมูลยาว

String longText = "ข้อความยาวมาก... ".repeat(1000); // ~10,000 ตัวอักษร
helper.insert(longText, "50000");

ผลลัพธ์

ListView แสดงข้อมูลที่ name เป็น MEDIUMTEXT (ข้อความยาว) ได้ปกติ

ข้อแนะนำ

  • ใน SQLite ใช้ TEXT แทน MEDIUMTEXT/LONGTEXT/TINYTEXT ก็ได้ (เหมือนกันทุกประการ)
  • ใช้ MEDIUMTEXT เฉพาะต้องการ port จาก MySQL หรือทีมคุ้นเคย
  • สำหรับขนาดใหญ่มาก (>1MB) ควรพิจารณาเก็บไฟล์แยก + path ใน DB