FiveM MariaDB Unknown Column แก้อย่างไร? วิธีแก้ Error 1054 เมื่อ Resource กับ Database Schema คนละ Version
FiveM MariaDB Unknown column คือ Error ที่เกิดเมื่อ Resource ส่ง SQL Query ไปเรียกชื่อ Column ที่ MariaDB หาไม่พบใน Table หรือ Context ที่ Query กำลังใช้งาน โดย MariaDB กำหนดเป็น Error 1054, SQLSTATE 42S22 และชื่อ ER_BAD_FIELD_ERROR พร้อมข้อความ Unknown column '...' in '...'.
ตัวอย่างที่พบบ่อยใน FiveM:
ERROR 1054 (42S22): Unknown column 'citizenid' in 'field list'
หรือ:
SCRIPT ERROR: oxmysql was unable to execute a query! Unknown column 'metadata' in 'field list'
หรือ:
Unknown column 'identifier' in 'where clause'
ปัญหานี้มักเกิดหลัง:
อัปเดต Resource เปลี่ยน Framework Migration Database ไม่ครบ Import SQL คนละ Version Restore Database เก่า เปลี่ยนชื่อ Column ลบ Column ใช้ Custom Script รุ่นเก่า Query สะกดชื่อ Column ผิด Resource สองตัวใช้ Schema คนละแบบ
จุดสำคัญคือ Table อาจมีอยู่ครบแล้ว แต่ Column ภายใน Table ไม่ตรงกับสิ่งที่ Resource คาดหวัง
① Error 1054 คืออะไร
MariaDB ระบุ:
Error Code: 1054 SQLSTATE: 42S22 ER_BAD_FIELD_ERROR Unknown column '%s' in '%s'
ตัวอย่าง Query:
SELECT `identifier`, `firstname`, `lastname` FROM `characters`;
แต่ Table จริงมีเพียง:
id identifier firstname
ไม่มี:
lastname
MariaDB จึงไม่สามารถ Execute Query นี้ได้และคืน Error 1054
② Error 1054 ต่างจาก Error 1146 อย่างไร
บทความก่อนหน้า:
1146 Table doesn't exist
หมายถึง Table ที่ Resource เรียกไม่มีอยู่
แต่:
1054 Unknown column
หมายถึง Query อ้าง Column ที่ MariaDB ไม่รู้จักใน Context นั้น.
จำง่าย:
1146 Table หาย 1054 Table มี แต่ Column หายหรือชื่อผิด
③ ตัวอย่าง FiveM ที่พบจริงบ่อย
สมมติ Resource ใช้:
local player = MySQL.query.await([[ SELECT `citizenid`, `firstname`, `lastname` FROM `players` WHERE `license` = ? ]], { license })
แต่ Database จริง:
players id license name
ไม่มี:
citizenid firstname lastname
SQL Syntax อาจถูกทั้งหมด แต่ Schema ไม่ตรง Resource
ผล:
Unknown column 'citizenid' in 'field list'
④ in 'field list' หมายถึงอะไร
ถ้า Error เป็น:
Unknown column 'metadata' in 'field list'
โดยทั่วไปให้เริ่มตรวจ Column ที่อยู่ในส่วนอย่าง:
SELECT `metadata`
หรือ:
INSERT INTO table (`metadata`)
หรือ:
UPDATE table SET `metadata` = ?
Error 1054 ระบุว่า Identifier ที่ Queryพยายามใช้เป็น Column ไม่พบใน Context ที่กำลัง Parse/Execute.
⑤ in 'where clause' หมายถึงอะไร
ตัวอย่าง:
SELECT * FROM `players` WHERE `citizenid` = ?;
ถ้า Table ไม่มี:
citizenid
อาจเห็น:
Unknown column 'citizenid' in 'where clause'
ดังนั้นต้องตรวจ Column ใน:
WHERE JOIN ORDER BY GROUP BY SELECT UPDATE INSERT
ตามข้อความ Error จริง
⑥ ขั้นแรกใช้ SHOW COLUMNS
MariaDB มีคำสั่ง:
SHOW COLUMNS FROM `players`;
สำหรับแสดง Columns ของ Table รวมถึงชื่อ Field, Type, Key, Default และ Attributes อื่นๆ.
ตัวอย่างผล:
id license name job metadata
จากนั้นเปรียบเทียบกับ Column ที่ Error ระบุ
⑦ ค้นหา Column แบบเจาะจง
ใช้:
SHOW COLUMNS FROM `players` LIKE 'citizenid';
ถ้าไม่มีผลลัพธ์:
Column นี้ไม่มีใน Table ปัจจุบัน
SHOW COLUMNS รองรับการกรองด้วย LIKE ตาม MariaDB Documentation.
⑧ ใช้ DESCRIBE ได้เหมือนกัน
MariaDB ระบุว่า:
DESCRIBE `players`;
หรือ:
DESC `players`;
เป็น Shortcut สำหรับดูข้อมูล Columns ลักษณะเดียวกับ SHOW COLUMNS.
ดังนั้น Debug แบบเร็วใช้:
DESC `players`;
ได้
⑨ แต่ควรดู SHOW CREATE TABLE ด้วย
เมื่อ Debug FiveM Production แนะนำให้ดู:
SHOW CREATE TABLE `players`;
เพราะจะเห็น Schema โดยรวม เช่น:
Column Data Type NOT NULL DEFAULT PRIMARY KEY UNIQUE KEY Indexes Generated Columns
ซึ่งช่วยตรวจได้มากกว่าดูเพียงชื่อ Column
⑩ สาเหตุอันดับหนึ่ง: Migration ไม่ได้รัน
ตัวอย่าง:
Resource Version 1
ใช้:
id identifier name
Resource Version 2
เพิ่ม:
metadata
Code ใหม่:
SELECT `metadata` FROM `players` WHERE `identifier` = ?;
แต่ Admin Update แค่ Folder Resource
ไม่ได้รัน:
ALTER TABLE `players` ADD COLUMN `metadata` ...;
ผล:
Unknown column 'metadata'
นี่คือ Pattern สำคัญ:
Resource ใหม่ + Database Schema เก่า = Error 1054
⑪ อย่าแก้ด้วยการ ADD COLUMN แบบเดาเองทันที
ถ้า Error:
Unknown column 'metadata'
อย่ารีบทำ:
ALTER TABLE `players` ADD COLUMN `metadata` TEXT;
เพียงเพราะคิดว่า Metadata น่าจะเป็น TEXT
Official Resource อาจกำหนดจริงเป็น:
LONGTEXT JSON VARCHAR NOT NULL DEFAULT
หรืออาจมี Index/Constraint เพิ่มเติม
MariaDB รองรับ ALTER TABLE ... ADD COLUMN แต่ Definition ที่เพิ่มต้องถูกต้องตาม Schema ที่ Application ต้องการ.
⑫ ใช้ Migration ของ Resource ก่อน
แนวทางที่ควรทำ:
ดู Resource Version ↓ หา Migration ของ Version นั้น ↓ Backup Database ↓ ตรวจ Existing Schema ↓ รัน Migration ที่ถูกต้อง ↓ Verify Column
ไม่ใช่:
เห็นชื่อ Column ใน Error ↓ เดา Data Type ↓ ADD COLUMN
เพราะ Error อาจหาย แต่ปัญหา Data Model ตามมา
⑬ ตัวอย่าง Resource รุ่นใหม่เพิ่ม Column
สมมติ Official Migration กำหนด:
ALTER TABLE `characters` ADD COLUMN `last_seen` DATETIME NULL;
หลังรันแล้วตรวจ:
SHOW COLUMNS FROM `characters` LIKE 'last_seen';
ถ้าพบ Column ก็ยืนยันว่าการเปลี่ยน Schema ถูกนำมาใช้แล้ว.
⑭ Database ใหม่แต่ Resource เก่าก็เกิดได้
ไม่ใช่แค่:
Resource ใหม่ + Schema เก่า
อีกกรณีคือ:
Resource เก่า + Schema ใหม่
สมมติ Schema รุ่นใหม่ Rename:
steam → identifier
แต่ Custom Resource เก่ายัง Query:
SELECT `steam` FROM `players`;
Database มี:
identifier
แต่ไม่มี:
steam
จึงเกิด Error 1054
⑮ เปลี่ยน Framework แล้ว Unknown Column
นี่เป็นกรณีที่เจอบ่อยมากใน Custom FiveM Server
Framework A อาจใช้:
identifier
Framework B ใช้:
citizenid
หรือ Custom Framework ใช้:
player_id
Resource ที่ออกแบบสำหรับ Framework A แล้วนำไปใช้กับ Framework B โดยไม่แก้ Query อาจขึ้น:
Unknown column 'identifier'
ทันที
⑯ อย่า Rename Database Column เพื่อเอาใจ Script ตัวเดียว
ถ้า Databaseทั้งระบบใช้:
citizenid
แต่ Custom Script ตัวเดียว Query:
identifier
อย่ารีบ Rename:
citizenid → identifier
เพราะ Resources อื่นอาจพังทั้งหมด
ควรตรวจ:
Framework Data Model Resource Compatibility Config Mapping Query ของ Custom Resource
ก่อน
⑰ Resource Config อาจมี Column Mapping
บาง Scripts รองรับ Config เช่น:
Config.IdentifierColumn = 'citizenid'
หรือแนวคิดคล้าย:
PlayerTable IdentifierColumn VehicleTable OwnerColumn
ถ้ามี Configuration แบบนี้ควรแก้ Mapping ให้ตรง Schema แทน ALTER Table โดยไม่จำเป็น
⑱ วิธีตรวจ Columns ทั้ง Database
MariaDB มี:
information_schema.COLUMNS
ซึ่งเก็บ Metadata ของ Columns ทุก Table เช่น:
TABLE_SCHEMA TABLE_NAME COLUMN_NAME DATA_TYPE COLUMN_DEFAULT IS_NULLABLE
ตัวอย่าง:
SELECT TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, DATA_TYPE FROM information_schema.COLUMNS WHERE COLUMN_NAME = 'identifier';
ช่วยดูว่า Column ชื่อนี้อยู่ใน Tables ไหนบ้าง
⑲ หา Column ใน Database ปัจจุบัน
ใช้:
SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND COLUMN_NAME = 'identifier';
ถ้าได้:
players identifier varchar
แปลว่ามี Columnนี้ใน players
แต่ถ้าไม่มีผลลัพธ์เลย ให้ตรวจ Migration/Schema ต่อ
information_schema.COLUMNS ถูกออกแบบมาให้ดู Metadata ของ Columns โดยตรง.
⑳ Column อยู่ผิด Table
Resource อาจ Query:
SELECT `job` FROM `characters`;
แต่ Databaseใหม่ย้าย:
job
ไปไว้:
character_jobs
ดังนั้น Column ไม่ได้ “หาย”
แต่:
Data Model เปลี่ยน
กรณีนี้ ADD job กลับเข้า characters อาจผิด Architecture
ต้องแก้ Resource Query ให้ตรง Schema ใหม่
㉑ Column ถูก Rename
สมมติ:
Resource รุ่นเก่า firstname Resource รุ่นใหม่ first_name
Custom Script ยัง:
SELECT `firstname` FROM `characters`;
Databaseปัจจุบัน:
first_name
ก็เกิด 1054
ต้องดู Migration History ว่า Columnถูก Rename หรือถูกลบจริง
㉒ Column ถูก Drop
ถ้าเมื่อวานใช้ได้แต่วันนี้ Error 1054 เริ่มขึ้นหลัง:
Database Cleanup ALTER TABLE Resource Update Migration
ให้ตรวจว่า Column ถูก:
DROP COLUMN
หรือไม่
MariaDB ALTER TABLE รองรับทั้งการเพิ่ม แก้ และลบ Columns.
หาก Column เคยมีข้อมูลสำคัญ อย่า ADD Empty Columnกลับทันทีโดยไม่ตรวจ Backup
㉓ Column หายพร้อมข้อมูลต้องคิดเรื่อง Recovery
สมมติ:
characters.metadata
เคยเก็บ Metadata ของผู้เล่น
แล้วถูก Drop
การทำ:
ALTER TABLE `characters` ADD COLUMN `metadata` LONGTEXT;
จะสร้าง Column ใหม่
แต่:
ข้อมูล Metadata เดิมไม่ได้กลับมา
ดังนั้นต้องแยก:
Schema Recovery
กับ:
Data Recovery
ออกจากกัน
㉔ Restore Database เก่าทำให้ 1054 ได้
ตัวอย่าง:
Resource Version = 5 Backup Database = Version 3
Resource v5 Query:
metadata last_seen settings
แต่ Backup v3 ไม่มี Columns เหล่านี้
หลัง Restore:
Table มีครบ แต่ Columns ใหม่หาย
จึงได้ Error 1054 แทน 1146
㉕ หลัง Restore ต้องรัน Migration ต่อ
Workflow ที่ถูกต้องอาจเป็น:
Restore Backup Version 3 ↓ Migration 3 → 4 ↓ Migration 4 → 5 ↓ Verify Schema ↓ Start Resources
ไม่ใช่:
Restore Version 3 ↓ Start Resource Version 5 ทันที
โดยเฉพาะ Production Server
㉖ Import install.sql ใหม่ไม่ใช่คำตอบเสมอ
ถ้า Database มีข้อมูลจริงแล้ว:
players characters vehicles inventory
อย่า Import Fresh-install SQL ทั้งก้อนเพียงเพื่อเพิ่ม Column ที่หาย
เพราะ Installation Script อาจมี:
CREATE TABLE INSERT Default Data CREATE INDEX
และอาจชน Schema/Data ที่มีอยู่
ใช้ Migration ที่ออกแบบสำหรับ Upgrade ดีกว่า
㉗ Query สะกด Column ผิด
กรณีง่ายมากแต่พบบ่อย
Database:
identifier
Resource:
SELECT `identifer` FROM `players`;
สังเกต:
identifer
ขาด:
i
MariaDBจะมองเป็น Column คนละชื่อและคืน Error 1054
ดังนั้นก่อน Migration:
Copy ชื่อจาก Error ↓ SHOW COLUMNS ↓ เทียบตัวอักษรทีละตัว
㉘ Singular กับ Plural
ตัวอย่าง:
vehicle vehicles
หรือ:
job jobs
แม้ปัญหานี้มักเกี่ยวกับ Table Name แต่ Columns ก็มี Patternคล้ายกัน:
item items
อย่าเดาชื่อจากความหมาย
ใช้ Schema จริงเป็น Source of Truth
㉙ underscore ต่างกันก็เป็นคนละชื่อ
Database:
character_id
Resource:
characterid
MariaDB ไม่ถือว่าเป็น Column เดียวกัน
ดังนั้น:
character_id characterId characterid
ต้องใช้ชื่อที่ Schemaกำหนดจริง
㉚ Column Alias ก็ทำให้สับสนได้
ตัวอย่าง:
SELECT `identifier` AS `player_id` FROM `players`;
Alias:
player_id
ใช้เฉพาะ Result Context ที่กำหนด
ไม่ได้แปลว่า Database มี Columnจริงชื่อ:
player_id
ถ้า Queryต่อมาทำ:
SELECT `player_id` FROM `players`;
ก็อาจเกิด 1054 หาก Table ไม่มี Columnดังกล่าว
㉛ JOIN แล้ว Column อยู่ผิด Table
ตัวอย่าง:
SELECT `players`.`identifier`, `characters`.`job` FROM `players` JOIN `characters` ON `characters`.`player_id` = `players`.`id`;
ถ้า:
characters.player_id
ไม่มี
ก็เกิด Unknown Column
ดังนั้น Debug JOIN ต้องตรวจแต่ละ:
table.column
ไม่ใช่เพียงชื่อ Column
㉜ Error 1052 กับ 1054 ต่างกัน
MariaDB Error List แยก:
1052 Column is ambiguous
ออกจาก:
1054 Unknown column
1054
หา Column ไม่เจอ
1052
พบ Columnชื่อเดียวกันหลาย Table แต่ Queryไม่ได้ระบุว่าจะใช้ของ Tableไหน
อย่าสับสนกัน
㉝ Error 1060 ก็คนละเรื่อง
MariaDB ยังมี:
1060 Duplicate column name
หมายถึงพยายามสร้าง Columnชื่อซ้ำ
ไม่ใช่:
1054 Column หาย
ดังนั้นถ้าคุณพยายาม ADD Columnเพื่อแก้ 1054 แล้วกลับเจอ 1060 ต้องหยุดและตรวจว่า:
กำลังแก้ Database ถูกตัวหรือไม่? Query ใช้ Table ไหน? ชื่อจริงต่าง Case หรือไม่?
㉞ Error 1072 ต่างจาก 1054
MariaDB Error 1072 คือ:
Key column doesn't exist in table
มักเกี่ยวกับการสร้าง Index/Constraint โดยอ้าง Column ที่ไม่มี
ส่วน Error 1054 เกิดจาก Query/Expression ที่อ้าง Columnไม่พบ
ทั้งคู่บอกถึง Schema Mismatch ได้ แต่ Context ต่างกัน
㉟ String Quote ผิดอาจถูกมองเป็น Column ได้
Queryต้องแยก:
Column Identifier
กับ:
String Value
ให้ถูก
ตัวอย่างที่ควรใช้:
SELECT * FROM `players` WHERE `job` = 'police';
job คือ Identifier
police คือ String Value
หาก Quote/SQL Construction ผิด MariaDBอาจตีความ Token เป็น Identifier และส่งผลให้เกิด Unknown Column ได้ในบาง Query Context
㊱ ใช้ Parameters กับ Values
ใน oxmysql ตัวอย่าง Query ใช้:
WHERE `identifier` = ?
แล้วส่ง Value แยก:
{ identifier }
Official oxmysql Documentation แสดงการใช้ Parameter Placeholder ลักษณะนี้.
ตัวอย่าง:
local response = MySQL.query.await( 'SELECT `firstname`, `lastname` FROM `users` WHERE `identifier` = ?', { identifier } )
วิธีนี้ช่วยแยก:
SQL Structure
ออกจาก:
Value
㊲ แต่ Placeholder ใช้แทนชื่อ Column ไม่ได้ตามอำเภอใจ
oxmysql prepare ปัจจุบันรองรับ ? สำหรับ Value Placeholder และระบุว่า Column Placeholder ?? กับ Named Placeholders ไม่รองรับใน API นี้.
ดังนั้นไม่ควรเขียน:
SELECT ? FROM `players`;
แล้วหวังว่า Parameter:
identifier
จะกลายเป็น Column Identifier แบบเดียวกับการเขียน:
SELECT `identifier`
Dynamic Column Names ต้องจัดการใน Applicationอย่างระมัดระวัง
㊳ Dynamic Column ต้อง Whitelist
ถ้าต้องเลือก Column จาก Config:
local columns = { name = '`name`', identifier = '`identifier`', job = '`job`' }
แล้วรับเฉพาะ Key ที่ Developerกำหนด
ไม่ควรเอา Input จาก Clientมาต่อ:
'SELECT ' .. clientColumn .. ' FROM players'
โดยตรง
นอกจากเสี่ยง Queryผิดแล้ว ยังเป็นแนวทางที่ไม่เหมาะสมด้าน Security
㊴ mysql_debug ช่วยหา Resource ที่ยิง Query
Official oxmysql Documentation ระบุว่าเปิด:
set mysql_debug true
จะ Print Queries ใน Server Console และสามารถจำกัดรายชื่อ Resources ที่ต้อง Debug ได้.
ตัวอย่าง:
set mysql_debug [ "my_resource" ]
เมื่อ Error 1054 เกิด ให้หา:
Resource ไหน Query อะไร Table ไหน Column ไหน
㊵ Debug UI ช่วยได้
oxmysql Debug UI สามารถแสดง Queries ที่ Resources Execute, Response Time และ Statistics แยกตาม Resource โดยเอกสารแนะนำให้ใช้ใน Development หรือ Server ที่มี Player Count ต่ำ.
เหมาะเมื่อ Serverมี Custom Resources จำนวนมากและไม่รู้ว่า Query 1054 มาจากตัวไหน
㊶ Error หลังอัปเดต Resource ตัวเดียว
ถ้า:
Database Resources อื่นปกติ
แต่หลัง Update:
inventory_resource
ตัวเดียวขึ้น 1054
ให้เริ่มจาก Resourceนั้น:
Migration Release Version Config Column Mapping Dependencies
ไม่ต้องรีบแก้ MariaDBทั้ง Server
㊷ Error หลาย Resource พร้อมกัน
ถ้า 10 Resources เริ่ม:
Unknown column
หลัง:
Restore Database เปลี่ยน Framework ย้าย Server
ให้สงสัย:
Database Backup คนละ Version Migration ไม่ครบทั้งชุด Framework Schema เปลี่ยน
ก่อนตรวจ Resources ทีละตัว
㊸ FiveM Server ใหม่แต่เอา Resources เก่ามา
ตัวอย่าง:
Database = Framework รุ่นใหม่ Resources = Server เก่า
Custom Scripts อาจ Query Columns ที่ Frameworkใหม่ลบแล้ว
จะเห็น 1054หลายตัว เช่น:
Unknown column 'steam' Unknown column 'money' Unknown column 'job_grade'
นี่คือ Compatibility Problem
ไม่ใช่ MariaDBเสีย
㊹ เพิ่ม Column ด้วย ALTER TABLE
ถ้า Official Migrationยืนยันว่าต้องเพิ่มจริง MariaDBรองรับ:
ALTER TABLE `players` ADD COLUMN `metadata` LONGTEXT;
รวมถึงกำหนดตำแหน่งด้วย FIRST หรือ AFTER ได้หากจำเป็น แม้ MariaDBระบุว่าตำแหน่งทางกายภาพของ Columnมักไม่มีความสำคัญในงานสมัยใหม่.
แต่ต้องใช้ Definition ตาม Official Migration
㊺ ADD COLUMN แล้วต้องตรวจอะไรต่อ
หลัง Migration:
SHOW COLUMNS FROM `players` LIKE 'metadata';
จากนั้น:
SHOW CREATE TABLE `players`;
ตรวจ:
Data Type NULL DEFAULT Indexes
อย่าหยุดเพียง:
Column มีชื่อแล้ว
㊻ อย่าลืม Existing Data
ถ้าเพิ่ม:
account_id
เป็น Required Column
ต้องถามว่า Existing Rows จะมีค่าอะไร
ถ้าเพียง:
ADD COLUMN `account_id` INT;
แล้วปล่อย Existing Recordsเป็น NULL อาจสร้าง Errorใหม่เมื่อ Resourceคาดว่า Columnนี้ต้องมีค่า
Migrationที่ดีต้องพิจารณา Data Backfillด้วย
㊼ Backup ก่อน ALTER Production
Schema Change เช่น:
ADD COLUMN DROP COLUMN CHANGE COLUMN MODIFY COLUMN
ควรมี:
Backup Migration Script Rollback Plan Test Database
ก่อน Production
MariaDB ALTER TABLE เป็นคำสั่งสำหรับแก้ Table Structureโดยตรง.
㊽ อย่าแก้ Production ด้วยการทดลองทีละ Column
Pattern ที่ควรหลีกเลี่ยง:
Error metadata → ADD metadata Error last_seen → ADD last_seen Error settings → ADD settings Error account_id → ADD account_id
หาก Errorมาเป็นชุดแบบนี้ มีโอกาสสูงว่า:
Migration ทั้ง Versionไม่ได้รัน
ควรหา Migration ที่ถูกต้องแทนการ Patchทีละ Column
㊾ Unknown Column หลังเปลี่ยนชื่อ Table
บางครั้งดูเหมือน Columnหาย แต่ Resourceกำลัง Query Tableคนละตัว
เช่น:
SELECT `citizenid` FROM `users`;
แต่ citizenid อยู่:
players
ไม่ใช่:
users
ดังนั้นต้องตรวจทั้ง:
Table Name + Column Name
พร้อมกัน
㊿ วิธี Debug แบบ 5 นาที
เมื่อ Console ขึ้น:
Unknown column 'metadata' in 'field list'
ทำ:
① จด Error 1054 ② จด Column = metadata ③ จด Table ④ SHOW COLUMNS FROM table ⑤ SHOW CREATE TABLE table ⑥ Copy Query จาก Resource ⑦ ตรวจชื่อ Column ⑧ ตรวจ Table ถูกตัวหรือไม่ ⑨ ตรวจ Resource Version ⑩ ตรวจ Migration ⑪ ตรวจ Framework Compatibility ⑫ Backup ก่อน ALTER
MariaDB มีทั้ง SHOW COLUMNS และ information_schema.COLUMNS สำหรับตรวจ Metadata ของ Columns โดยตรง.
ตัวอย่างสถานการณ์จริง
51. Case 1 — Migration ไม่ได้รัน
Console:
Unknown column 'last_seen' in 'field list'
ตรวจ:
SHOW COLUMNS FROM `players` LIKE 'last_seen';
ไม่พบ
ตรวจ Resource Migration พบ:
ALTER TABLE `players` ADD COLUMN `last_seen` DATETIME NULL;
Root Cause:
Resource Update แล้ว Database ยังไม่ Update
ให้ Backup และใช้ Migrationที่ตรง Version
52. Case 2 — Resource ใช้ชื่อ Column เก่า
Database:
citizenid
Resource:
SELECT `identifier` FROM `players`;
ถ้า Frameworkปัจจุบันใช้ citizenid จริง วิธีแก้อาจเป็น:
แก้ Resource Configuration หรือ แก้ Query
ไม่ใช่เพิ่ม Column identifier ซ้ำ
53. Case 3 — Backup เก่า
Resourceปัจจุบันต้องการ:
metadata last_seen status
แต่ Backupที่ Restore มี:
identifier name job
Root Cause:
Database Version ต่ำกว่า Resource Version
ต้อง Apply Migrations ตามลำดับ
54. Case 4 — Typo
Error:
Unknown column 'identifer'
Database:
identifier
Root Cause:
สะกดผิด
ไม่ต้อง Migration
แก้ Query:
SELECT `identifier` FROM `players`;
55. Case 5 — Column อยู่ Table อื่น
Resource:
SELECT `job` FROM `players`;
แต่ Frameworkใหม่เก็บ Job ใน:
player_jobs
Root Cause:
Data Model เปลี่ยน
ไม่ควร ADD job กลับเข้า players โดยเดา
Checklist FiveM MariaDB Error 1054
ก่อนแก้ ให้ตรวจ:
-
Error Code เป็น
1054หรือไม่ -
SQLSTATE เป็น
42S22หรือไม่ - Column ที่ Error ชื่ออะไร
-
Error ระบุ
field list,where clauseหรือ Context ไหน - Query มาจาก Resource ไหน
- Query ใช้ Table ไหน
-
SHOW COLUMNSพบ Columnหรือไม่ -
SHOW CREATE TABLEเป็น Schema Versionไหน - Columnสะกดถูกหรือไม่
- underscore ถูกหรือไม่
- Singular/Plural ถูกหรือไม่
- Tableถูกตัวหรือไม่
- Columnถูก Renameหรือไม่
- Columnถูก Dropหรือไม่
- Columnย้ายไป Tableอื่นหรือไม่
- Resource Versionอะไร
- Database Versionอะไร
- Migrationรันครบหรือไม่
- Frameworkเปลี่ยนหรือไม่
- Custom Resourceรองรับ Frameworkนี้หรือไม่
- Configมี Column Mappingหรือไม่
- Restore Backupเก่าหรือไม่
- Install SQL คนละ Versionหรือไม่
- Resourceเก่ากว่า Schemaหรือไม่
- Schemaเก่ากว่า Resourceหรือไม่
- มีหลาย Resources ขึ้น Errorพร้อมกันหรือไม่
-
information_schema.COLUMNSพบ Columnที่ไหนบ้าง - mysql_debug จับ Queryได้หรือไม่
- Backupก่อน ALTERแล้วหรือไม่
- Migration Official กำหนด Data Typeอะไร
ตาราง Error ที่ควรแยกให้ออก
| Error | ความหมาย |
|---|---|
1048 | Column Cannot Be Null |
1052 | Column Ambiguous |
1054 | Unknown Column |
1060 | Duplicate Column Name |
1062 | Duplicate Entry |
1064 | SQL Syntax Error |
1072 | Key Column ไม่มีใน Table |
1146 | Table Doesn't Exist |
1364 | Field ไม่มี Default |
1366 | Incorrect Value |
1406 | Data Too Long |
MariaDB แยก Errorเหล่านี้ออกเป็นคนละ Codes จึงต้องแก้ตาม Errorจริง ไม่ใช่ใช้ Schema Patchแบบเดียวทั้งหมด.
FiveM Unknown Column แก้อย่างไร
เริ่มจาก:
SHOW COLUMNS FROM `table_name`;
แล้วดูว่า Columnใน Errorมีจริงหรือไม่.
ถ้าไม่มี:
ตรวจ Migration ตรวจ Resource Version ตรวจ Framework ตรวจชื่อ Column
ถ้ามี:
ตรวจว่า Resource Query ใช้ Database/Table ถูกตัวหรือไม่ ตรวจ Alias และ JOIN Context
FiveM Error 1054 คืออะไร
MariaDB Error 1054 คือ:
ER_BAD_FIELD_ERROR
SQLSTATE:
42S22
และข้อความ:
Unknown column '...' in '...'
FiveM Unknown Column in Field List แก้อย่างไร
ตรวจ Column ที่อยู่ใน:
SELECT INSERT Column List UPDATE SET
จากนั้นใช้:
SHOW COLUMNS FROM `table_name`;
เปรียบเทียบชื่อจริง
ถ้า Resourceเรียก Columnที่ไม่มี ให้ตรวจ Migrationก่อน ADD Column เอง
FiveM Unknown Column in Where Clause แก้อย่างไร
ตัวอย่าง:
SELECT * FROM `players` WHERE `citizenid` = ?;
ถ้า players ไม่มี citizenid จะเกิด Unknown Column
ตรวจ:
SHOW COLUMNS FROM `players` LIKE 'citizenid';
หาก Frameworkใช้ชื่ออื่น ให้แก้ Query/Mappingให้ตรง
FiveM Unknown Column หลัง Update Script แก้อย่างไร
ให้ตรวจลำดับนี้:
Resource Version ↓ Release Migration ↓ Current Database Schema ↓ SHOW COLUMNS ↓ SHOW CREATE TABLE
หาก Migrationเพิ่ม Columnใหม่ ให้ใช้ Migrationที่ตรง Version ไม่ควร Import Fresh-install SQLทับ Production
FiveM Unknown Column หลัง Restore Database แก้อย่างไร
ถ้า Backupเก่ากว่า Resourceปัจจุบัน:
Restore ↓ Apply Migrations ↓ Verify Columns ↓ Start Resources
อย่า Start Resourceรุ่นใหม่บน Schemaเก่าโดยไม่ Migration
FiveM Unknown Column หลังเปลี่ยน Framework แก้อย่างไร
ตรวจ Data Model ของ Frameworkใหม่ เช่น:
identifier citizenid player_id license
อาจหมายถึงข้อมูลประเภทเดียวกันแต่ชื่อ Columnไม่เหมือนกัน
Custom Resources ต้องถูกปรับให้ตรง Frameworkปัจจุบัน
FiveM เพิ่ม Column ด้วย SQL ได้ไหม
ได้ MariaDB รองรับ:
ALTER TABLE `table_name` ADD COLUMN `column_name` VARCHAR(100);
แต่ควรทำเฉพาะเมื่อ Migration/Official Schema ยืนยัน Definition นั้น
ไม่ควรเดา Data Type จากชื่อ Column
FiveM ดู Column ทั้งหมดอย่างไร
ใช้:
SHOW COLUMNS FROM `table_name`;
หรือ:
DESCRIBE `table_name`;
MariaDB ระบุว่า DESCRIBE เป็น Shortcut สำหรับข้อมูล Columns.
FiveM หา Column ทุก Table อย่างไร
ใช้:
SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND COLUMN_NAME = 'identifier';
information_schema.COLUMNS เก็บ Metadata ของ Columns บน MariaDB Server.
FiveM mysql_debug ช่วย Unknown Column ได้ไหม
ได้
Official oxmysql Documentation ระบุว่า:
set mysql_debug true
สามารถ Print Queries ไปยัง Server Console และยังจำกัด Debug เฉพาะ Resourcesที่เลือกได้.
เหมาะมากเมื่อไม่รู้ว่า Resourceใดส่ง Query 1054
FiveM Restart oxmysql แก้ Unknown Column ไหม
หาก Columnไม่มีจริง:
ไม่แก้
เพราะ Restart Database Layerไม่ได้เพิ่ม Columnให้ Schema
ต้อง:
แก้ Query หรือ Migration Database
ตาม Root Cause
FAQ FiveM MariaDB Unknown Column
Error 1054 คืออะไร?
คือ MariaDB ER_BAD_FIELD_ERROR เมื่อ SQLอ้าง Columnที่ Databaseหาไม่พบใน Contextนั้น.
Error 1054 กับ 1146 เหมือนกันไหม?
ไม่
1054 = Column ไม่พบ 1146 = Table ไม่พบ
วิธีดูว่า Column มีหรือไม่?
ใช้:
SHOW COLUMNS FROM `table_name`;
ใช้ DESCRIBE ได้ไหม?
ได้:
DESCRIBE `table_name`;
MariaDB ระบุว่า DESCRIBE ใช้ดูข้อมูล Columns ได้.
Unknown Column หลัง Update Script เกิดจากอะไร?
สาเหตุสำคัญคือ Resource Code ถูก Update แต่ Database Migration ที่เพิ่ม/เปลี่ยน Columnยังไม่ได้รัน
ต้อง ADD COLUMN เองไหม?
ไม่ควรทำทันที ให้หา Official Migration/Schemaก่อน เพราะต้องรู้ Data Type, Default, NULL และ Constraints ที่ถูกต้อง
Unknown Column หลัง Restore Backup เกิดได้ไหม?
ได้ หาก Backup Schemaเก่ากว่า Resource Versionปัจจุบัน
Unknown Column หลังเปลี่ยน Framework เกิดได้ไหม?
ได้มาก เพราะ Frameworkแต่ละตัวอาจใช้ชื่อ Table/Columnและ Data Modelต่างกัน
Column มีอยู่แต่ยัง Error ทำไม?
ตรวจว่า Queryใช้ Tableหรือ Databaseถูกตัวหรือไม่ รวมถึง JOIN, Alias และ Schema Context
Parameter ? ใช้แทนชื่อ Column ได้ไหม?
ใน oxmysql prepare เอกสารปัจจุบันระบุ ? สำหรับ Value Placeholders และไม่รองรับ Column Placeholder ?? ใน APIนี้.
mysql_debug ช่วยได้ไหม?
ได้ สามารถดู Queries ที่ Resources Execute ใน Server Consoleได้.
ต้อง Backup ก่อน ALTER TABLE ไหม?
ควรทำ โดยเฉพาะ Production Database เพราะ Schema Change อาจกระทบข้อมูลและ Resourcesอื่น
ประเด็นสำคัญ
เมื่อ FiveM ขึ้น:
ERROR 1054 Unknown column '...' in '...'
ให้ใช้ Flow นี้:
1054 ↓ จดชื่อ Column ↓ ดู Table จาก Query ↓ SHOW COLUMNS ↓ SHOW CREATE TABLE ↓ ตรวจชื่อสะกด ↓ ตรวจ Resource Version ↓ ตรวจ Database Migration ↓ ตรวจ Framework Compatibility ↓ ตรวจว่า Columnถูก Rename/ย้าย/Drop หรือไม่ ↓ ค่อยแก้ Query หรือ Schema
MariaDB กำหนด Error 1054 เป็น Unknown column โดยตรง และมีทั้ง SHOW COLUMNS, DESCRIBE และ information_schema.COLUMNS สำหรับตรวจ Schemaจริงของ Database.
สิ่งที่ไม่ควรทำคือเห็น:
Unknown column 'metadata'
แล้วสร้าง:
metadata TEXT
ทันที เพราะ Resourceอาจต้องการ LONGTEXT, JSON-compatible structure, NOT NULL, Default หรือ Migrationอื่นร่วมด้วย
สำหรับผู้อ่าน comsiam ให้จำสูตร “1054 = Table มี แต่ชื่อ Column กับ Script ไม่ตรงกัน” และ comsiam แนะนำให้เปรียบเทียบ Query → SHOW COLUMNS → Resource Migration ก่อน ALTER Database ทุกครั้ง เพราะ Errorนี้จำนวนมากเกิดจาก Resource กับ Schema คนละ Version มากกว่าปัญหาที่ MariaDB เอง
Comments
Post a Comment