🏷️ #dev database (4 บทความ)

← แท็กทั้งหมด

Timezone ใน database — 7 ชั่วโมงที่หายไป กับความปวดหัวที่ไม่มีวันจบ

เวลาเราเก็บ DATETIME ใน MySQL แล้วตั้งเป็น UTC เพราะ "มันเป็น standard"
แต่ user ใช้เวลาไทย UTC+7 — ทุกอย่างที่ insert เวลา 09:00 น.
กลายเป็น 02:00 UTC ในฐานข้อมูล

จากนั้นเวลาจะ SELECT ออกมาแสดงผล
ต้อง CONVERT_TZ() หรือใช้ PHP...

เมื่อ INSERT emoji แล้วเจอ Incorrect string value — utf8mb4 ตัวดีที่ชอบถูกลืม

ใครที่เคย insert ข้อความที่มี emoji ลง MySQL แล้วเจอ Error "Incorrect string value" ขอยืนยันว่าคุณไม่ได้อยู่คนเดียว 😭

ปัญหาคือ MySQL ก่อน version 5.5.3 ใช้ utf8mb3 รองรับแค่ 3-byte character ทำให้ emoji (4-byte) ลงไม่ได้ ต้องเปลี่ยน charset เป็น...

Backup ดาต้าเบสก่อน migration — รู้ว่าต้องทำ แต่บางทีก็ลืม

ทุกคนที่ Dev เคยผ่านจุดนี้มาแล้วใช่ไหม? กำลังจะรัน migration, คิดว่า "เดี๋ยวก็ไม่เป็นไรหรอก แค่เพิ่ม column เอง" — แล้วก็กดรันเลย

ผลลัพธ์? SQL syntax error, คอลัมน์ชน, foreign key ร้องไห้, data loss ไปสองสามแถว แล้วถึงได้นั่งถอนใจ: "กูไม่ backup...

MySQL strict mode ปิด — เมื่อ legacy code สร้างนิสัยไม่ดีไว้

เวลาไปเจอระบบเก่าที่ปิด MySQL strict mode ไว้

ตอนแรกก็ไม่คิดอะไร จนเจอวันที่ต้องย้าย Data ไป server ใหม่ที่เปิด strict mode ไว้...

เจอ `0000-00-00` ใน DATE field
เจอ empty string `''` ใน INT column
เจอ NULL ใน column ที่ตั้ง NOT NULL แต่ default...