FiveM MariaDB Unknown Column แก้อย่างไร? วิธีแก้ Error 1054 เมื่อ Resource กับ Database Schema คนละ Version
FiveM MariaDB Unknown column คือ Error ที่เกิดเมื่อ Resource ส่ง SQL Query ไปอ้างถึง Column ที่ MariaDB หาไม่พบใน 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 'garage' in 'where clause'
Unknown column 'players.job_grade' in 'field list'
Unknown column 'vehicle.owner' in 'on clause'
ปัญหานี้มักเกิดจาก:
Resource กับ Database Schema คนละ Version
Migration SQL ยังไม่ได้รัน
Column ถูก Rename
Column ถูกลบ
Resource ใช้ชื่อ Column ผิด
ติดตั้ง Script สำหรับ Framework คนละตัว
SQL ถูก Import ผิด Version
FiveM ต่อ Database ผิดตัว
Custom Script ยังใช้ Schema เก่า
Dynamic Query สร้างชื่อ Column ผิด
แนวทางตรวจที่ถูกต้องคือ:
Error 1054
↓
ดูชื่อ Column
↓
ดูว่า Error อยู่ใน field list / where / on
↓
SHOW COLUMNS
↓
SHOW CREATE TABLE
↓
ตรวจ Database ที่ FiveM ใช้
↓
ตรวจ Resource Version
↓
ตรวจ Migration
↓
แก้ Query หรือ Schema ตาม Version ที่ถูกต้อง
① Error 1054 คืออะไร
MariaDB ระบุ Error 1054 ว่า:
1054
42S22
ER_BAD_FIELD_ERROR
Unknown column '%s' in '%s'
ดังนั้น Error นี้หมายถึง MariaDB ไม่สามารถ Resolve ชื่อ Column ที่ Query อ้างถึงได้ในตำแหน่งนั้น.
ตัวอย่าง:
SELECT `citizenid`
FROM `players`;
หาก Table players ไม่มี Column:
citizenid
ก็สามารถเกิด:
Unknown column 'citizenid' in 'field list'
② Error 1054 ต่างจาก Table Doesn't Exist อย่างไร
บทความก่อนหน้า:
1146
Table doesn't exist
หมายถึง Table ที่ Query ต้องการไม่มี
แต่:
1054
Unknown column
หมายถึง MariaDB ไปถึงขั้นพยายาม Resolve Column แล้ว แต่ Column ที่อ้างถึงไม่พบ.
จำง่ายๆ:
1146
หา Table ไม่เจอ
1054
หา Column ไม่เจอ
③ Unknown Column in 'field list' คืออะไร
ตัวอย่าง:
SELECT
`id`,
`identifier`,
`citizenid`
FROM `players`;
ถ้า players มี:
id
identifier
แต่ไม่มี:
citizenid
Error สามารถชี้ว่า:
Unknown column 'citizenid' in 'field list'
คำว่า field list โดยทั่วไปหมายถึงบริเวณของ Query ที่กำลังอ้าง Columns เช่นรายการ Columns ใน SELECT, INSERT, UPDATE หรือ Expression ที่เกี่ยวข้อง
④ Unknown Column in 'where clause' คืออะไร
ตัวอย่าง:
SELECT *
FROM `vehicles`
WHERE `garage_id` = ?;
แต่ Table มีเพียง:
garage
ไม่มี:
garage_id
ก็สามารถขึ้น:
Unknown column 'garage_id' in 'where clause'
จุดสำคัญคือ Table อาจมีอยู่และ SELECT * ใช้ได้ แต่ Condition อ้าง Column ที่ไม่มี
⑤ Unknown Column in 'on clause' คืออะไร
พบได้กับ JOIN
ตัวอย่าง:
SELECT *
FROM `characters` c
JOIN `vehicles` v
ON v.character_id = c.id;
ถ้า vehicles ไม่มี:
character_id
MariaDB อาจรายงาน Unknown Column ใน Context ของ ON
ดังนั้นเมื่อ Error มี:
in 'on clause'
ให้ตรวจ Column ที่ใช้เชื่อม Tables ก่อน
⑥ สาเหตุที่พบบ่อยที่สุดใน FiveM คือ Schema คนละ Version
ตัวอย่าง:
Resource v1
ใช้ column = identifier
แต่ Resource v3:
ใช้ column = citizenid
Server Owner อัปเดต Resource Files เป็น v3 แต่ Database ยังเป็น Schema v1
Resource ใหม่ Query:
SELECT `citizenid`
FROM `players`;
Database เก่าไม่มี citizenid
ผล:
Error 1054
นี่คือ Pattern สำคัญ:
Resource ใหม่
+
Database เก่า
=
Unknown Column
⑦ อีกกรณีคือ Resource เก่า + Database ใหม่
ปัญหาเกิดกลับด้านได้เช่นกัน
สมมติ Migration ใหม่ Rename:
owner
→
player_identifier
แต่ Custom Resource เก่ายัง:
SELECT `owner`
FROM `vehicles`;
Database ใหม่ไม่มี owner
จึงเกิด Error 1054
ดังนั้นอย่าคิดว่า:
Database ใหม่กว่า
=
ต้องถูกกับ Script ทุกตัว
Custom Resources ต้อง Update ตาม Schema ด้วย
⑧ วิธีดู Columns ที่มีอยู่จริง
ใช้:
SHOW COLUMNS
FROM `players`;
MariaDB ระบุว่า SHOW COLUMNS ใช้แสดง Columns ของ Table พร้อมข้อมูลอย่าง Field, Type, Null, Key, Default และ Extra.
ตัวอย่างผล:
id
identifier
name
job
metadata
created_at
หาก Error บอก:
Unknown column 'citizenid'
แต่รายการไม่มี citizenid
ก็ยืนยันได้ทันทีว่า Schema ปัจจุบันไม่มี Column นั้น
⑨ ใช้ DESCRIBE ก็ได้
MariaDB ระบุว่า:
DESCRIBE `players`;
หรือ:
DESC `players`;
เป็น Shortcut สำหรับข้อมูล Columns ลักษณะเดียวกับ SHOW COLUMNS.
ดังนั้นในการ Debug เร็วๆ ใช้:
DESC players;
ก็ได้
⑩ แต่ SHOW CREATE TABLE ให้ข้อมูลครบกว่า
ใช้:
SHOW CREATE TABLE `players`;
MariaDB ระบุว่า SHOW CREATE TABLE แสดงคำสั่ง CREATE TABLE แบบเต็ม รวม Column Definitions และ Indexes.
ตัวอย่าง:
CREATE TABLE `players` (
`id` int NOT NULL AUTO_INCREMENT,
`identifier` varchar(100) NOT NULL,
`metadata` longtext DEFAULT NULL,
PRIMARY KEY (`id`)
);
ช่วยให้ดูพร้อมกันได้ว่า:
Column มีไหม
Type อะไร
NULL ได้ไหม
Default อะไร
Index อะไร
⑪ ลำดับตรวจที่แนะนำ
เมื่อเจอ:
Unknown column 'citizenid'
ทำ:
SHOW COLUMNS
FROM `players`;
ต่อด้วย:
SHOW CREATE TABLE `players`;
ถ้าไม่มี citizenid จริง ค่อยไปตรวจ:
Resource Version
Migration
Framework
Database ที่เชื่อมอยู่
อย่าเริ่มจาก:
ALTER TABLE ADD citizenid ...
โดยยังไม่รู้ Definition ที่ถูกต้อง
⑫ อย่าสร้าง Column เองจากชื่อ Error
ตัวอย่าง Error:
Unknown column 'metadata'
วิธีที่ไม่ควรทำทันที:
ALTER TABLE `players`
ADD COLUMN `metadata` VARCHAR(255);
เพราะ Official Resource อาจต้องการ:
LONGTEXT
JSON-like text
NOT NULL
DEFAULT
INDEX
หรือ Data Structure คนละแบบ
MariaDB รองรับ ALTER TABLE ... ADD COLUMN สำหรับเพิ่ม Column แต่ Type และ Attributes ต้องถูกกำหนดตาม Schema ที่ต้องการจริง.
⑬ ถ้าต้องเพิ่ม Column ให้ใช้ Migration ที่ถูก Version
ทางที่เหมาะกว่าคือ:
Resource v2
↓
Migration v2 → v3
↓
Resource v3
ไม่ใช่:
เห็น Column หาย
↓
เดา Type
↓
ADD COLUMN เอง
โดยเฉพาะ Production Database ที่มีข้อมูล Player จริง
⑭ Backup ก่อน ALTER TABLE
MariaDB Alter Table Guide แนะนำให้สำรองข้อมูลก่อนเปลี่ยนโครงสร้าง Table โดยเฉพาะเมื่อ Table มีข้อมูลอยู่ เพราะ Schema Changes สามารถกระทบข้อมูลได้.
ดังนั้นก่อน:
ALTER TABLE ...
ควรมี:
Backup
Migration Script
Rollback Plan
อย่างน้อย
⑮ Migration ไม่ได้หมายถึง Add Column อย่างเดียว
Migration อาจทำ:
ADD COLUMN
DROP COLUMN
CHANGE COLUMN
MODIFY COLUMN
ADD INDEX
DROP INDEX
UPDATE Existing Data
MariaDB ALTER TABLE รองรับ Operations สำหรับเพิ่ม เปลี่ยน และลบ Columns รวมถึงโครงสร้างอื่นของ Table.
ดังนั้น Import เพียง:
ADD column ที่ Error ฟ้อง
อาจยังไม่ทำให้ Schemaตรง Resource Version
⑯ Column ถูก Rename หลัง Update
สมมติเดิม:
steam
เปลี่ยนเป็น:
identifier
Custom Script ยัง:
SELECT `steam`
FROM `players`;
ก็จะเกิด:
Unknown column 'steam'
MariaDB รองรับการเปลี่ยนชื่อ/Definition ของ Columns ผ่าน ALTER TABLE และ CHANGE/Operations ที่เกี่ยวข้อง.
ปัญหาคือ Script ทุกตัวที่อ้างชื่อเดิมต้องถูก Update ด้วย
⑰ อย่า Rename Database Column เพื่อเอาใจ Resource ตัวเดียว
สมมติ 20 Resources ใช้:
identifier
แต่ Script เก่าตัวเดียวใช้:
steam
อย่ารีบ Rename:
identifier → steam
เพราะ 20 Resources อื่นจะพัง
ทางที่เหมาะกว่าคือแก้ Custom Script ตัวเก่าให้ใช้ Current Schema
⑱ ตรวจ Framework ให้ถูกก่อน
FiveM Servers อาจใช้ Framework/Data Model ต่างกัน
Resource ที่ออกแบบมาสำหรับ Schema แบบหนึ่งอาจ Query:
citizenid
ขณะที่อีก Framework ใช้:
identifier
ถ้าติดตั้ง Resource คนละ Framework แล้วเปลี่ยนเพียง Config บางส่วน อาจยังเกิด Unknown Column
จึงต้องตรวจ:
Resource รองรับ Framework นี้จริงหรือไม่
Table Mapping ถูกไหม
Column Mapping ถูกไหม
⑲ Custom Framework ต้องระวังมากขึ้น
ถ้า Resource มี Config เช่น:
Config.PlayerTable = 'players'
Config.IdentifierColumn = 'identifier'
ต้องตรวจว่า Database จริงมี:
players.identifier
ไม่ใช่:
users.citizenid
หรือ Schema อื่น
เมื่อทำ Custom Mapping ควรตรวจทั้ง Table และ Column
⑳ FiveM ต่อ Database ผิดตัวก็ทำ Unknown Column ได้
สมมติ Server มี:
fivem
fivem_old
fivem_test
ใน fivem:
players มี citizenid
แต่ใน fivem_old:
players ไม่มี citizenid
หาก FiveM เชื่อม fivem_old
Table players ยังมีอยู่ จึงไม่เกิด 1146
แต่ Query citizenid จะกลายเป็น:
1054 Unknown column
㉑ ตรวจ Database ที่กำลังใช้อยู่
ใช้:
SELECT DATABASE();
MariaDB ระบุว่า DATABASE() คืนชื่อ Default Database ปัจจุบันของ Connection.
ตัวอย่างผล:
fivem_old
ถ้าคุณคิดว่า Server ใช้:
fivem
นี่คือ Root Cause ที่ต้องแก้ก่อน Schema
㉒ ตรวจ mysql_connection_string
Official oxmysql Documentation ระบุให้ตั้ง mysql_connection_string ก่อน Resources ที่ใช้ Database และ Connection String จะระบุ Database ที่ FXServer เชื่อมต่อ.
ตัวอย่าง:
set mysql_connection_string "mysql://user:password@localhost:3306/fivem"
ต้องตรวจส่วน:
/fivem
ว่าเป็น Database ที่มี Schema ปัจจุบันจริง
㉓ phpMyAdmin เห็น Column แต่ FiveM ยัง Error
นี่เป็นเคสที่เจอแล้วต้องตรวจ Database ก่อน
คุณอาจเปิดใน phpMyAdmin:
fivem_new.players
และเห็น:
citizenid
แต่ FiveM Connection String ใช้:
fivem_old
ซึ่ง players ไม่มี Column นี้
ดังนั้น:
SELECT DATABASE();
สำคัญมากก่อน ALTER Schema.
㉔ ใช้ information_schema.COLUMNS หา Column ได้
MariaDB มี information_schema.COLUMNS ซึ่งให้ Metadata ของ Columns ทั้ง Server เช่น:
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 = 'citizenid';
ช่วยดูว่า citizenid อยู่ใน Database/Table ใดบ้าง
㉕ ตรวจ Column ใน Table เฉพาะ Database
ตัวอย่าง:
SELECT
COLUMN_NAME,
DATA_TYPE,
IS_NULLABLE,
COLUMN_DEFAULT
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'players';
เหมาะเมื่ออยากตรวจ Schema ด้วย Query เดียว
MariaDB ระบุว่า information_schema.COLUMNS เก็บข้อมูล Column ของ Tables บน Server.
㉖ Error หลัง Restore Backup
สมมติ Resource ปัจจุบันต้องการ:
players.metadata
players.last_login
players.status
แต่ Backup ที่ Restore เป็น Version เก่า มีเพียง:
players.id
players.identifier
players.name
หลัง Restore:
Table มี
↓
แต่ Columns รุ่นใหม่หาย
↓
Error 1054
ดังนั้นหลัง Restore ควรตรวจ Schema Version ไม่ใช่ดูเพียงจำนวน Tables
㉗ Error หลัง Import install.sql เก่า
หากคุณ Download Resource Version ใหม่ แต่ Import SQL จาก Backup/Folder Version เก่า:
Code v5
Schema v2
คุณอาจเจอ Error 1054 หลาย Columns ต่อเนื่อง
เช่น:
แก้ metadata
↓
เจอ citizenid
↓
แก้ citizenid
↓
เจอ last_seen
นี่เป็นสัญญาณว่าไม่ควร Add Column ทีละ Error
ควร Migration Schema ทั้งชุดให้ตรง Version
㉘ Unknown Column หลายตัวพร้อมกันหมายถึงอะไร
ถ้า Consoleขึ้น:
Unknown column 'citizenid'
Unknown column 'metadata'
Unknown column 'last_seen'
Unknown column 'status'
พร้อมกันหลัง Update
ให้สงสัย:
Migration ไม่ได้รัน
Database ผิดตัว
Schema คนละ Framework
ก่อนสมมติว่า Developer สะกดผิดสี่ Columnsพร้อมกัน
㉙ Unknown Column ตัวเดียวอาจเป็น Typo
ตัวอย่าง Database มี:
identifier
แต่ Code:
SELECT `identifer`
FROM `players`;
ขาด:
i
นี่คือ Error 1054 แบบตรงไปตรงมา
ดังนั้นขั้นแรกยังควรเทียบ:
Error Column
vs
SHOW COLUMNS
vs
Source Query
ก่อนหาสาเหตุซับซ้อน
㉚ Dynamic SQL สร้าง Column ผิดได้
ตัวอย่าง:
local column = Config.IdentifierColumn
local query =
('SELECT `%s` FROM `players`'):format(column)
ถ้า Config เป็น:
identifer
แทน:
identifier
Query Runtime จะอ้าง Column ที่ไม่มี
การเปิด Source Codeอย่างเดียวอาจไม่เห็นปัญหาถ้าชื่อ Columnมาจาก Config
ต้องดูค่าที่ใช้จริง
㉛ mysql_debug ช่วยหา Query ต้นเหตุ
oxmysql มี Debug/Query Information สำหรับช่วยดู Queries ที่ Resources Execute และ Documentation ระบุให้ตั้ง oxmysql ก่อน Resources ที่ต้องใช้ Database.
เมื่อเกิด Error 1054 ให้จับ:
Resource
SQL Query
Column
เวลาเกิด
แล้วเปิด Source Code Resource ตัวนั้น
㉜ Resource ไหนยิง Query สำคัญมาก
ตัวอย่าง:
framework
ใช้งานได้
inventory
ใช้งานได้
garage_custom
Unknown column 'garage_id'
ถ้า Errorเกิดเฉพาะ garage_custom
ควรตรวจ:
garage_custom
ก่อน Alter Framework Tables ทั้ง Server
อย่าแก้ Schema Global จาก Error ของ Custom Script ตัวเดียวโดยไม่ตรวจ Compatibility
㉝ INSERT ก็เกิด Unknown Column ได้
ตัวอย่าง:
INSERT INTO `players`
(
`identifier`,
`citizenid`
)
VALUES
(
?,
?
);
ถ้า citizenid ไม่มีใน Table ก็เกิด Error 1054 ได้
ไม่ใช่เฉพาะ SELECT เท่านั้น
㉞ UPDATE ก็เกิดได้
ตัวอย่าง:
UPDATE `players`
SET `last_seen` = NOW()
WHERE `id` = ?;
ถ้า last_seen ไม่มี:
Unknown column 'last_seen'
ต้องดู Official Migration ว่า Column นี้ควรถูกเพิ่มหรือ Query มาจาก Script คนละ Version
㉟ DELETE ก็เกิดได้จาก WHERE
ตัวอย่าง:
DELETE FROM `player_sessions`
WHERE `citizenid` = ?;
หาก Table ใช้:
identifier
แทน
ก็ Error 1054 ได้ใน WHERE Clause
ดังนั้นอย่าคิดว่า DELETE ไม่มี Column List แล้วจะไม่เจอ Unknown Column
㊱ JOIN Alias ผิดก็ต้องตรวจ
ตัวอย่าง:
SELECT
p.identifier,
v.plate
FROM players p
JOIN vehicles v
ON vehicles.owner = p.identifier;
แต่ Query ใช้ Alias:
v
แล้วอ้าง Table/Column Context ไม่สอดคล้องกัน
เมื่อ Errorเกี่ยวกับ Queryซับซ้อน ต้องตรวจทั้ง:
Table alias
Column
JOIN
ไม่ใช่ Database Schema อย่างเดียว
㊲ Column Alias กับ Column จริงต้องแยก
ตัวอย่าง:
SELECT
`identifier` AS `player_id`
FROM `players`;
ตรงนี้:
player_id
อาจเป็นเพียง Alias ของ Result
ไม่ได้หมายความว่า Table มี Columnจริงชื่อ:
player_id
Custom Query อีกตัวที่ไปใช้ player_id เป็น Physical Column อาจ Error
㊳ อย่าเพิ่ม Column จาก Result Alias
หากเห็น Resource Code:
SELECT identifier AS player_id
แล้วอีก Query Error:
Unknown column 'player_id'
อย่ารีบเพิ่ม player_id ลง Table
อาจเป็น Developer ใช้ Alias จาก Query หนึ่งเหมือนกับเป็น Physical Column ในอีก Query
ต้องดู Query Context
㊴ Schema Diff ช่วยมากเมื่อ Error หลัง Update
ถ้ามี Database Test หรือ SQL Schema Official สามารถเปรียบเทียบ:
Production Columns
vs
Official Current Columns
หา:
Missing Columns
Extra Columns
Renamed Columns
Type Differences
Defaults
แทนแก้ Consoleทีละ Error
สำหรับ Serverใหญ่ วิธีนี้แม่นกว่ามาก
㊵ ALTER TABLE เพิ่ม Column ทำอย่างไร
ถ้า Official Migration ยืนยันว่าต้องเพิ่มจริง ตัวอย่าง Syntax:
ALTER TABLE `players`
ADD COLUMN `last_seen` DATETIME NULL;
MariaDB รองรับ ADD COLUMN ผ่าน ALTER TABLE.
แต่ Type:
DATETIME NULL
ในตัวอย่างเป็นเพียงโครงสร้างตัวอย่าง
Production ต้องใช้ Definition ตาม Resource ที่ติดตั้งจริง
㊶ Column Definition ต้องตรงทั้งชุด
ไม่ใช่แค่:
ชื่อ Column
ต้องตรวจ:
Data Type
Length
NULL / NOT NULL
DEFAULT
AUTO_INCREMENT
Generated
Index
Constraint
SHOW CREATE TABLE เป็นเครื่องมือสำคัญสำหรับตรวจ Definition เหล่านี้.
㊷ อย่าใช้ VARCHAR(255) เป็นคำตอบทุก Unknown Column
ตัวอย่าง:
Unknown column 'balance'
อาจควรเป็น:
BIGINT
DECIMAL
INT
ไม่ใช่ VARCHAR(255)
ส่วน:
metadata
อาจต้องเป็น Text Type
การเดา Typeผิดสามารถสร้าง Errorsใหม่ เช่น:
Incorrect value
Data too long
Out of range
ภายหลัง
㊸ Column ถูกลบโดย Migration ผิด
หากก่อนหน้านี้ Scriptทำงานได้ แต่หลัง Adminรัน SQL แล้ว Columnหาย
ตรวจ Migration ว่ามี:
DROP COLUMN ...
หรือไม่
MariaDB ALTER TABLE รองรับ DROP COLUMN และการลบ Columnจะลบข้อมูลใน Columnนั้นด้วย.
ดังนั้นก่อน Restore/Recreate ต้องดู Backup
㊹ อย่าเพิ่ม Column ใหม่ถ้าของเดิมถูก Rename
สมมติ Migration ตั้งใจ:
steam
→
identifier
แต่ Scriptเก่า Query:
steam
ไม่ควรสร้าง:
steam
กลับมาเพิ่มอีก Fieldโดยอัตโนมัติ
เพราะ Databaseจะมี:
steam
identifier
สอง Columnsที่อาจเก็บ Identity คนละชุดและเกิด Data Drift
แก้ Scriptเก่าให้ใช้ Current Column
㊺ Unknown Column หลัง Framework Migration
ถ้าย้าย Framework ควรทำรายการ:
Player Table
Player Identifier Column
Character Identifier
Vehicle Owner Column
Job Columns
Inventory Tables
Account Columns
แล้วตรวจ Custom Resources ทั้งหมด
เพราะชื่อ Columns มีโอกาสเปลี่ยนหลายจุดพร้อมกัน
㊻ Unknown Column หลังย้าย VPS
ถ้า Server Files เหมือนเดิม แต่ย้าย VPS แล้ว Error 1054 เริ่มเกิด ให้ตรวจ:
Database Backup ที่ Restore
Database Name
mysql_connection_string
Schema Version
ก่อน
เพราะ Connection อาจชี้ Database Old/Test ที่ Tableเหมือนกันแต่ Columnsไม่ครบ
oxmysql Connection String เป็นตัวกำหนด Database ที่ FXServer ใช้งาน.
㊼ Restart MariaDB ช่วยไหม
ถ้า:
SHOW COLUMNS FROM players;
ยืนยันว่า Columnไม่มี
การ Restart:
MariaDB
oxmysql
FXServer
Resource
ไม่ได้สร้าง Columnใหม่ให้เอง เว้นแต่ Resource มี Migration System ที่ทำตอน Startup
ต้องแก้ Schema/Version ต้นเหตุ
㊽ Restart Resource ช่วยไหม
เช่นเดียวกัน
ถ้า Query:
SELECT `citizenid`
FROM `players`;
แต่ Columnไม่มีจริง
Restart Resourceจะส่ง Queryเดิมอีกครั้งและ Errorเดิมยังอยู่
ดังนั้นอย่าใช้ Restartวนแทน Schema Diagnosis
㊾ วิธี Debug แบบ 5 นาที
เมื่อเห็น:
Unknown column 'citizenid' in 'field list'
ทำ:
① จด Table จาก Query
② จด Column = citizenid
③ SHOW COLUMNS FROM table
④ SHOW CREATE TABLE table
⑤ SELECT DATABASE()
⑥ ตรวจ mysql_connection_string
⑦ หา Resource ที่ยิง Query
⑧ ตรวจ Resource Version
⑨ ตรวจ Migration
⑩ อย่า ADD COLUMN จนกว่าจะรู้ Definition ที่ถูกต้อง
㊿ ตัวอย่าง Case 1 — Migration ไม่ครบ
Error:
Unknown column 'last_seen'
Schema ปัจจุบัน:
id
identifier
name
Official Migration เพิ่ม:
last_seen
กรณีนี้ Root Cause:
Migration ไม่ได้รัน
ทำ Migration ตาม Version แล้วตรวจ:
SHOW COLUMNS
FROM `players`;
อีกครั้ง.
51. ตัวอย่าง Case 2 — Resource ใช้ชื่อเก่า
Database:
identifier
Resource:
SELECT `steam`
FROM `players`;
Official Current Schemaไม่มี steam
Root Cause:
Custom Resource เก่า
แก้ Resource ให้ใช้ Current Column
ไม่ควรเพิ่ม steam กลับมาโดยไม่มีเหตุผล
52. ตัวอย่าง Case 3 — ต่อ Database ผิด
Database fivem_new:
players.citizenid
Database fivem_old:
players ไม่มี citizenid
Connection Stringใช้:
fivem_old
ผล:
Table players มี
แต่ citizenid ไม่มี
จึงเกิด 1054 แทน 1146
ตรวจ:
SELECT DATABASE();
ก่อน ALTER.
53. ตัวอย่าง Case 4 — Config Column Name ผิด
Config:
Config.IdentifierColumn = 'citzenid'
สะกดผิด
Dynamic Query:
SELECT `citzenid`
FROM `players`;
Databaseจริงมี:
citizenid
กรณีนี้ไม่ต้อง Migration
แก้ Config
54. ตัวอย่าง Case 5 — Framework คนละตัว
Resourceคิดว่า Player Table มี:
citizenid
แต่ Framework Serverใช้:
identifier
หาก Resourceไม่ได้รองรับ Schemaนี้โดยตรง ต้องใช้ Compatibility Layer/Configuration ที่ Resourceกำหนด หรือเลือก Resourceที่รองรับ Frameworkนั้น
อย่าสร้าง Columnsปลอมให้ Framework Tableเพียงเพื่อผ่าน Startup
55. Checklist FiveM Error 1054
ตรวจทั้งหมดนี้:
Error Code เป็น 1054 หรือไม่
SQLSTATE เป็น 42S22 หรือไม่
Column ชื่ออะไร
Error อยู่
field listหรือไม่อยู่
where clauseหรือไม่อยู่
on clauseหรือไม่Query Table ไหน
Table มีอยู่หรือไม่
SHOW COLUMNSพบ Columnหรือไม่SHOW CREATE TABLEมี Columnหรือไม่Database ปัจจุบันคืออะไร
SELECT DATABASE()ถูกไหมmysql_connection_string ถูก Databaseไหม
Resource ไหนยิง Query
Queryสะกดชื่อ Columnถูกไหม
Configสร้างชื่อ Columnหรือไม่
Resource Versionอะไร
Framework Versionอะไร
Schema Versionอะไร
Migrationรันครบหรือไม่
Columnถูก Renameหรือไม่
Columnถูก Dropหรือไม่
SQL Importมาจาก Versionไหน
Restore Backupมาจาก Versionไหน
Custom Scriptเก่าหรือไม่
Resourceรองรับ Frameworkนี้หรือไม่
Columnเป็น Aliasหรือ Physical Column
Related Resourcesใช้ชื่อไหน
Official Migrationกำหนด Typeอะไร
Backupก่อน ALTERแล้วหรือไม่
Test Databaseมีหรือไม่
Verifyหลัง Migrationแล้วหรือไม่
Errorอื่นตามมาหลังแก้หรือไม่
ตาราง Error ที่ควรแยกให้ออก
| Error | ความหมายหลัก |
|---|---|
1048 | Column ไม่รับ NULL |
1049 | Unknown Database |
1054 | Unknown Column |
1058 | จำนวน Column/Value ไม่ตรง |
1060 | Duplicate Column Name |
1064 | SQL Syntax Error |
1146 | Table Doesn't Exist |
1364 | Field ไม่มี Default |
1366 | Incorrect Value |
1406 | Data Too Long |
MariaDB Error Code Reference แยก Error 1054 เป็น ER_BAD_FIELD_ERROR อย่างชัดเจน.
FiveM Unknown Column แก้อย่างไร
เริ่มด้วย:
SHOW COLUMNS
FROM `table_name`;
แล้วตรวจว่า Columnที่ Errorบอกมีจริงหรือไม่
MariaDB SHOW COLUMNS ใช้ดูชื่อและคุณสมบัติ Columns ของ Tableโดยตรง.
ถ้า Columnไม่มี ให้ตรวจ:
Migration
Resource Version
Framework
Database
ก่อนใช้ ALTER TABLE
FiveM Error 1054 คืออะไร
MariaDB Error 1054 คือ:
ER_BAD_FIELD_ERROR
SQLSTATE:
42S22
และข้อความ:
Unknown column '...' in '...'
FiveM Unknown Column in Field List แก้อย่างไร
ตรวจ Columns ที่ SELECT, INSERT หรือ UPDATE อ้างถึง
เช่น:
SELECT `identifier`, `citizenid`
FROM `players`;
ใช้:
SHOW COLUMNS FROM `players`;
เพื่อยืนยันว่าทั้งสอง Columns มีจริงหรือไม่.
FiveM Unknown Column in WHERE Clause แก้อย่างไร
ตรวจ Column หลัง:
WHERE
เช่น:
WHERE `garage_id` = ?
แล้วเทียบกับ Schemaจริง
หาก Tableใช้:
garage
ต้องแก้ Queryให้ตรง Current Schema หรือ Migrationตาม Resource Version
FiveM Unknown Column หลัง Update Script แก้อย่างไร
ตรวจ:
Resource Version
Migration
SHOW COLUMNS
SHOW CREATE TABLE
ก่อน
หาก Resourceใหม่ต้องการ Columnใหม่ ให้ใช้ Official Migration แทนสร้าง Columnจากการเดา
FiveM Unknown Column หลัง Restore Database แก้อย่างไร
ตรวจว่า Backupที่ Restoreเป็น Schema Versionเดียวกับ Resourcesปัจจุบันหรือไม่
หาก Backupเก่ากว่า ให้ Apply Migrations ตามลำดับ Version
อย่า Import Fresh-install SQLทับ Production Databaseโดยไม่ตรวจข้อมูลเดิม
FiveM Unknown Column ทั้งที่ Column มีอยู่
ตรวจ:
SELECT DATABASE();
และ mysql_connection_string
เพราะ FiveMอาจเชื่อม Databaseคนละตัวกับที่คุณกำลังดูอยู่.
FiveM ดู Columns ใน Table ยังไง
ใช้:
SHOW COLUMNS
FROM `players`;
หรือ:
DESCRIBE `players`;
MariaDB ระบุว่า DESCRIBE เป็น Shortcut ของ SHOW COLUMNS.
FiveM ดู Schema เต็มยังไง
ใช้:
SHOW CREATE TABLE `players`;
เพื่อดู Definition ทั้ง Table รวม Columns และ Indexes.
FiveM เพิ่ม Column ยังไง
ถ้า Migrationยืนยันว่าต้องเพิ่มจริง MariaDB ใช้:
ALTER TABLE `table_name`
ADD COLUMN `column_name` DATA_TYPE;
ALTER TABLE รองรับ ADD COLUMN.
แต่ต้องใช้ Data Type/Default/Nullability ตาม Resource Schemaจริง
FiveM Rename Column ยังไง
MariaDB รองรับการเปลี่ยน Column Definition/Name ผ่าน ALTER TABLE Operations.
แต่ก่อน Rename Production Column ให้ค้น Resourcesทั้งหมดที่ใช้งานชื่อเดิม
ไม่เช่นนั้นแก้ Resourceหนึ่งแล้วอีกหลายตัวอาจพัง
FiveM Unknown Column เกิดจาก oxmysql ไหม
Error 1054 เป็น Error ที่ MariaDBคืนเมื่อ SQLอ้าง Column ที่ Resolveไม่ได้ ส่วน oxmysqlเป็น Layerที่ส่ง Queryจาก FXServer ไป Database
จึงควรตรวจ:
Query
Schema
Migration
Database Connection
ก่อนสรุปว่า oxmysqlเสีย
Official oxmysql Documentationระบุให้กำหนด Connection Stringและ Start oxmysqlก่อน Resourcesที่ต้องใช้ Database.
FiveM Restart Server แก้ Unknown Column ได้ไหม
ถ้า Columnไม่มีจริง:
ไม่
Restartไม่ได้เพิ่ม Column
ต้อง:
แก้ Query
หรือ
Migration Schema
ตาม Root Cause
FAQ FiveM MariaDB Unknown Column
Error 1054 คืออะไร?
คือ MariaDB ER_BAD_FIELD_ERROR เมื่อ Queryอ้าง Column ที่ MariaDBหาไม่พบ.
SQLSTATE 42S22 คืออะไร?
เป็น SQLSTATE ที่ MariaDBใช้กับ Error 1054 Unknown column.
Unknown Column แปลว่า Table ไม่มีไหม?
ไม่จำเป็น ถ้า Tableไม่มีมักเป็น Error 1146 ส่วน 1054เน้น Columnที่ไม่พบ.
ดู Column ทั้งหมดได้อย่างไร?
ใช้:
SHOW COLUMNS FROM `table_name`;
หรือ:
DESCRIBE `table_name`;
ดู Schema ทั้ง Table ได้อย่างไร?
ใช้:
SHOW CREATE TABLE `table_name`;
Column ไม่มีควร ADD เองเลยไหม?
ไม่ควรจนกว่าจะรู้ว่า Resource Versionนั้นต้องการ Column Definitionอะไร ควรใช้ Official Migrationถ้ามี
Error หลัง Update Script เกิดจาก Migration ได้ไหม?
ได้ เป็นหนึ่งในสาเหตุสำคัญเมื่อ Resourceใหม่เริ่ม Query Columnsที่ Schemaเก่ายังไม่มี
Error หลัง Restore Backup เกิดได้ไหม?
ได้ หาก Backupเป็น Schemaเก่ากว่า Resource Filesปัจจุบัน
Column มีใน phpMyAdmin แต่ FiveM บอกไม่มีเพราะอะไร?
หนึ่งในสาเหตุสำคัญคือ FiveMเชื่อม Databaseคนละตัว ตรวจ:
SELECT DATABASE();
และ mysql_connection_string.
information_schema.COLUMNS ใช้ทำอะไร?
ใช้ดู Metadataของ Columns เช่น Database, Table, Column, Data Type, Default และ Nullability.
เพิ่ม Column แล้ว Error หายถือว่าจบไหม?
ยังไม่ควรถือว่าจบ ต้องตรวจว่า Type, Default, Index และ Definitionตรง Resource Schema และทดสอบ Workflowที่อ่าน/เขียน Columnนั้น
Restart oxmysql ช่วยไหม?
ไม่หาก Root Causeคือ Columnไม่มีหรือ Queryใช้ชื่อผิด ต้องแก้ Schema/Queryก่อน
ประเด็นสำคัญ
เมื่อ FiveM Console ขึ้น:
ERROR 1054
Unknown column '...' in '...'
ให้ใช้ Flow นี้:
1054
↓
ดูชื่อ Column
↓
ดู Query + Table
↓
SHOW COLUMNS
↓
SHOW CREATE TABLE
↓
SELECT DATABASE()
↓
ตรวจ mysql_connection_string
↓
ตรวจ Resource Version
↓
ตรวจ Migration
↓
ตรวจว่า Column ถูก Rename หรือไม่
↓
แก้ Query หรือ Schema ตาม Version ที่ถูกต้อง
MariaDB ระบุ Error 1054 ว่าเป็น ER_BAD_FIELD_ERROR และมีเครื่องมืออย่าง SHOW COLUMNS, DESCRIBE, SHOW CREATE TABLE และ information_schema.COLUMNS สำหรับตรวจว่าคอลัมน์มีอยู่จริงหรือไม่และมี Definition อย่างไร.
จุดที่ต้องระวังที่สุดคือ อย่าสร้าง Column ตามชื่อ Error แบบเดา Data Type เพราะ Unknown Column จำนวนมากไม่ได้แปลว่า Database “ลืมสร้าง Column” เสมอไป แต่อาจหมายถึง Resourceเก่า, Migrationไม่ครบ, Configสะกดผิด หรือ FiveMเชื่อม Databaseคนละ Version
สำหรับผู้อ่าน comsiam ให้จำสูตร “1054 = เช็ก Column ก่อน ADD Column” และ comsiam แนะนำให้เทียบสามอย่างพร้อมกันคือ Query ของ Resource + Schema จริง + Migration ของ Version ปัจจุบัน เพราะเมื่อสามจุดนี้ตรงกัน ปัญหา Unknown Column ส่วนใหญ่จะหาต้นเหตุได้โดยไม่ต้อง ALTER Database แบบลองผิดลองถูก
Comments
Post a Comment