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

ตรวจทั้งหมดนี้:

  1. Error Code เป็น 1054 หรือไม่

  2. SQLSTATE เป็น 42S22 หรือไม่

  3. Column ชื่ออะไร

  4. Error อยู่ field list หรือไม่

  5. อยู่ where clause หรือไม่

  6. อยู่ on clause หรือไม่

  7. Query Table ไหน

  8. Table มีอยู่หรือไม่

  9. SHOW COLUMNS พบ Columnหรือไม่

  10. SHOW CREATE TABLE มี Columnหรือไม่

  11. Database ปัจจุบันคืออะไร

  12. SELECT DATABASE() ถูกไหม

  13. mysql_connection_string ถูก Databaseไหม

  14. Resource ไหนยิง Query

  15. Queryสะกดชื่อ Columnถูกไหม

  16. Configสร้างชื่อ Columnหรือไม่

  17. Resource Versionอะไร

  18. Framework Versionอะไร

  19. Schema Versionอะไร

  20. Migrationรันครบหรือไม่

  21. Columnถูก Renameหรือไม่

  22. Columnถูก Dropหรือไม่

  23. SQL Importมาจาก Versionไหน

  24. Restore Backupมาจาก Versionไหน

  25. Custom Scriptเก่าหรือไม่

  26. Resourceรองรับ Frameworkนี้หรือไม่

  27. Columnเป็น Aliasหรือ Physical Column

  28. Related Resourcesใช้ชื่อไหน

  29. Official Migrationกำหนด Typeอะไร

  30. Backupก่อน ALTERแล้วหรือไม่

  31. Test Databaseมีหรือไม่

  32. Verifyหลัง Migrationแล้วหรือไม่

  33. Errorอื่นตามมาหลังแก้หรือไม่

ตาราง Error ที่ควรแยกให้ออก

Errorความหมายหลัก
1048Column ไม่รับ NULL
1049Unknown Database
1054Unknown Column
1058จำนวน Column/Value ไม่ตรง
1060Duplicate Column Name
1064SQL Syntax Error
1146Table Doesn't Exist
1364Field ไม่มี Default
1366Incorrect Value
1406Data 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

Popular posts from this blog

FiveM ยังน่าเล่นไหม? Enhanced เปลี่ยน FiveM แค่ไหน

FiveM คืออะไร เล่นอย่างไร สำหรับมือใหม่ เริ่มต้นตั้งแต่ศูนย์

วิธีตั้ง Admin Permission ด้วย add_ace และ add_principal FiveM แบบละเอียด