Site icon PlusMagi's Blog By Pitt Phunsanit

MariaDB: เช็ค Character Set และ Collation

คุณสามารถใช้ SQL Query ตรวจสอบผ่านตาราง information_schema ซึ่งเป็นสารบัญรวมข้อมูลทั้งหมดของ Database ในเครื่อง เพื่อหาว่ามี Table หรือ Column ไหนบ้างที่ยังไม่ได้ใช้ utf8mb4 ครับ


ตรวจสอบระดับ Table ( ดูภาพรวม )

Script นี้จะแสดงรายชื่อตารางทั้งหมดใน Database ที่คุณระบุ ซึ่งยังไม่ได้ตั้งค่าเป็น utf8mb4_unicode_ci

SELECT 
    TABLE_SCHEMA AS 'Database', 
    TABLE_NAME AS 'Table', 
    TABLE_COLLATION AS 'Current_Collation'
FROM 
    information_schema.TABLES 
WHERE 
    TABLE_SCHEMA = 'ชื่อ_database_ของคุณ' -- เปลี่ยนตรงนี้เป็นชื่อ DB
    AND TABLE_COLLATION != 'utf8mb4_unicode_ci';

ตรวจสอบระดับ Column ( ละเอียดที่สุด )

บางครั้งตัว Table เป็น utf8mb4 แล้ว แต่บาง Column อาจจะยังหลงเหลือเป็น latin1 หรือ tis620 อยู่ ( ซึ่งเป็นตัวการที่ทำให้ภาษาไทยพังบ่อยที่สุด ) ใช้ Script นี้เช็คครับ

SELECT 
    TABLE_NAME AS 'Table', 
    COLUMN_NAME AS 'Column', 
    CHARACTER_SET_NAME AS 'Char_Set', 
    COLLATION_NAME AS 'Collation',
    DATA_TYPE AS 'Data_Type'
FROM 
    information_schema.COLUMNS 
WHERE 
    TABLE_SCHEMA = 'ชื่อ_database_ของคุณ' -- เปลี่ยนตรงนี้เป็นชื่อ DB
    AND CHARACTER_SET_NAME IS NOT NULL -- กรองเฉพาะพวก Text/Varchar
    AND (CHARACTER_SET_NAME != 'utf8mb4' OR COLLATION_NAME != 'utf8mb4_unicode_ci');

Script ช่วยสร้างคำสั่ง ALTER ( สำหรับคนขี้เกียจพิมพ์ )

ถ้าคุณมีหลายตารางที่ต้องแก้ Script นี้จะช่วย Generate คำสั่ง SQL ออกมาให้คุณก๊อปปี้ไปรันได้เลยครับ

SELECT 
    CONCAT('ALTER TABLE ', TABLE_SCHEMA, '.', TABLE_NAME, 
    ' CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;') AS Execute_This_SQL
FROM 
    information_schema.TABLES 
WHERE 
    TABLE_SCHEMA = 'ชื่อ_database_ของคุณ' 
    AND TABLE_COLLATION != 'utf8mb4_unicode_ci';

ข้อควรระวังก่อนรันคำสั่งที่ได้จาก Script


อ่านเพิ่มเติม

Exit mobile version