FiveM MariaDB Unknown Column แก้อย่างไร? วิธีแก้ Error 1054 เมื่อ Resource กับ Database Schema คนละ Version

 FiveM MariaDB Unknown column คือ Error ที่เกิดเมื่อ SQL Query จาก Resource อ้างถึง Column ที่ MariaDB หาไม่พบใน Table หรือ Context ของ Query นั้น โดย MariaDB กำหนดเป็น Error 1054, SQLSTATE 42S22 และชื่อ ER_BAD_FIELD_ERROR.

ตัวอย่างที่พบบ่อย:

ERROR 1054 (42S22):
Unknown column 'citizenid' in 'field list'

หรือใน FiveM:

SCRIPT ERROR: oxmysql was unable to execute a query!
Unknown column 'metadata' in 'field list'

บางครั้งอาจขึ้น:

Unknown column 'status' in 'where clause'

ปัญหานี้ต่างจาก Table doesn't exist เพราะกรณี Error 1054 นั้น SQL สามารถอ้างถึง Table ได้แล้ว แต่ Column ที่ Query ต้องการกลับไม่มีหรือไม่สามารถถูกอ้างในตำแหน่งนั้นได้.

สาเหตุที่พบได้บ่อยใน FiveM คือ:

Resource ใหม่ + Database Schema เก่า
Migration SQL ไม่ได้รัน
สะกดชื่อ Column ผิด
Custom Script ใช้ Column จาก Framework คนละรุ่น
Column ถูก Rename
Column ถูก Drop
Import SQL ไม่ครบ
ต่อ Database ผิดตัว
Resource Config ระบุชื่อ Column ผิด
Query ใช้ Alias ผิด

วิธีแก้ที่ปลอดภัยคือ:

Error 1054
↓
ดูชื่อ Column
↓
ดู Table
↓
SHOW COLUMNS
↓
ดู Query จาก Resource
↓
ตรวจ Resource Version
↓
ตรวจ Migration
↓
เทียบ Official Schema
↓
แก้ Query หรือ Migration ให้ตรงกัน

① Error 1054 คืออะไร

MariaDB ระบุ Error:

1054
42S22
ER_BAD_FIELD_ERROR
Unknown column '%s' in '%s'

ดังนั้น Error:

Unknown column 'identifier' in 'field list'

หมายความว่า MariaDB กำลังประมวลผล SQL แล้วพบการอ้างถึง:

identifier

แต่ไม่สามารถ Resolve Column นั้นได้ตาม Context ของ Statement

② in field list หมายความว่าอะไร

ตัวอย่าง:

SELECT
    `identifier`,
    `firstname`,
    `lastname`
FROM `characters`;

หาก Table มี:

identifier
firstname

แต่ไม่มี:

lastname

Query อาจเกิด:

Unknown column 'lastname' in 'field list'

จุดแรกที่ควรตรวจจึงเป็น Column List ของ Table

③ in where clause หมายความว่าอะไร

ตัวอย่าง:

SELECT *
FROM `characters`
WHERE `citizenid` = ?;

แต่ Table ไม่มี:

citizenid

MariaDB อาจแจ้ง:

Unknown column 'citizenid' in 'where clause'

ดังนั้นคำท้าย Error ช่วยบอก Context ว่า Column ถูกอ้างจากส่วนใดของ SQL

④ Error 1054 ต่างจาก Error 1146 อย่างไร

จากบทความก่อน:

1146
Table doesn't exist

หมายถึง Table ไม่พบ

แต่:

1054
Unknown column

หมายถึง Column ที่ Query อ้างไม่พบใน Context ที่กำลังประมวลผล.

จำง่ายๆ:

1146
หา Table ไม่เจอ

1054
หา Column ไม่เจอ

⑤ วิธีเช็ก Columns ใน Table

ใช้:

SHOW COLUMNS
FROM `characters`;

MariaDB ระบุว่า SHOW COLUMNS ใช้แสดงข้อมูล Columns ของ Table เช่นชื่อ Field, Data Type, Nullability, Key, Default และ Extra Attributes.

ตัวอย่าง:

id
identifier
firstname
lastname
metadata
created_at

จากนั้นเปรียบเทียบกับ Column ที่ Error ระบุ

⑥ ใช้ DESCRIBE ก็ได้

MariaDB ระบุว่า:

DESCRIBE `characters`;

เป็นทางลัดที่ให้ข้อมูลใกล้เคียงกับ SHOW COLUMNS.

ดังนั้นเวลาต้องการตรวจเร็วๆ ใช้:

DESC `characters`;

ได้เช่นกัน

⑦ ใช้ information_schema.COLUMNS ตรวจละเอียดกว่าได้

MariaDB มี:

information_schema.COLUMNS

สำหรับดู Metadata ของ Columns ใน Tables ต่างๆ รวมถึง:

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 TABLE_SCHEMA = DATABASE()
  AND TABLE_NAME = 'characters';

เหมาะกับการตรวจ Schema หลาย Columns พร้อมกัน

⑧ วิธีค้นว่า Column นี้อยู่ Table ไหนบ้าง

สมมติ Resource ใช้:

citizenid

สามารถค้น:

SELECT
    TABLE_SCHEMA,
    TABLE_NAME,
    COLUMN_NAME
FROM information_schema.COLUMNS
WHERE COLUMN_NAME = 'citizenid';

เพราะ information_schema.COLUMNS มี Metadata ของ Columns ทุก Table ที่ Session มีสิทธิ์มองเห็น.

วิธีนี้ช่วยมากตอนเปลี่ยน Framework

⑨ สาเหตุอันดับหนึ่ง: Resource ใหม่ แต่ Schema เก่า

ตัวอย่าง:

Resource v1
characters:
id
identifier
name

แต่ Resource v3 เพิ่ม:

metadata

Script ใหม่ Query:

SELECT
    `identifier`,
    `metadata`
FROM `characters`;

แต่ Production Database ยังไม่มี:

metadata

ผล:

Error 1054
Unknown column 'metadata'

กรณีนี้ควรตรวจ Migration ของ Resource Version ที่อัปเดต ไม่ใช่แก้ Query ลบ metadata ออกแบบสุ่ม

⑩ Update Resource แต่ลืม Import Migration

นี่เป็น Pattern ที่พบบ่อย:

Download Resource ใหม่
↓
Replace Folder
↓
Restart Resource
↓
ไม่ได้รัน Database Migration
↓
Script เรียก Column ใหม่
↓
1054

ดังนั้นเมื่อ Error เกิดทันทีหลัง Update ให้ตรวจ:

migration.sql
update.sql
upgrade.sql
database migration

ก่อน

⑪ อย่า Import install.sql ทับ Production ทันที

ถ้า Server มีข้อมูลจริงแล้ว เช่น:

Characters
Vehicles
Inventory
Accounts
Properties

ไม่ควร Import Fresh-install SQL ทับ Database เพียงเพราะ Column หาย

ควรใช้ Migration ที่เปลี่ยน Schema จาก Version เดิมไป Version ใหม่โดยเฉพาะ

ไม่เช่นนั้นอาจเกิด Error เพิ่ม เช่น:

Table already exists
Duplicate entry
Duplicate column
Duplicate key

MariaDB มี Error Codes แยกสำหรับ Duplicate Column และ Duplicate Keys ด้วย.

⑫ สะกดชื่อ Column ผิด

ตัวอย่าง Database มี:

identifier

แต่ Script เขียน:

SELECT `identifer`
FROM `players`;

สังเกตว่า:

identifier

ถูกเขียนเป็น:

identifer

MariaDBจึงไม่พบ Column

กรณีนี้ไม่ต้อง ALTER Database

ให้แก้ Query

⑬ ตัวพิมพ์เล็กใหญ่ของ Column ต้องระวังไหม

ในงาน FiveM ควรใช้ชื่อ Column ให้ตรงกับ Schema อย่างสม่ำเสมอ และไม่ควรสร้าง Scripts ที่อาศัยความแตกต่างของ Environment

วิธีที่ปลอดภัยที่สุดคือ Copy ชื่อจริงจาก:

SHOW COLUMNS FROM `table_name`;

แล้วใช้ชื่อเดียวกันใน Resource.

⑭ Column ถูก Rename

สมมติเดิม:

owner

Resource Version ใหม่เปลี่ยนเป็น:

identifier

แต่ Custom Script เก่ายัง:

SELECT *
FROM `vehicles`
WHERE `owner` = ?;

หาก Migration เปลี่ยน Schema ไปแล้วและไม่มี owner อีก:

Unknown column 'owner'

จะเกิดขึ้น

นี่มักเกิดเมื่อ Framework/Resource หลักถูก Update แต่ Custom Scripts ไม่ได้ Update ตาม

⑮ Column ถูก Drop

ถ้าเมื่อวาน Resource ใช้ได้ แต่วันนี้ Error หลัง:

Manual ALTER TABLE
Database Cleanup
Migration
Plugin Update

ให้ตรวจว่ามีการ:

DROP COLUMN

หรือไม่

ถ้า Column มีข้อมูลสำคัญ อย่าเพิ่ม Empty Column ใหม่ทันทีจนกว่าจะรู้ว่า Data เดิมควรกู้จาก Backup หรือ Migration แบบใด

⑯ Error หลังเปลี่ยน Framework

ตัวอย่าง Framework A ใช้:

identifier

Framework B ใช้:

citizenid

Custom Script เดิม:

SELECT `identifier`
FROM `players`;

แต่ Table ใหม่มี:

citizenid

Resource จึงขึ้น Error 1054

ตรงนี้ปัญหาไม่ใช่ MariaDBเสีย แต่คือ Resource กับ Data Model คนละ Framework

⑰ อย่าเพิ่ม Column ชื่อเดิมเพียงเพื่อให้ Script เก่าทำงาน

สมมติ Frameworkใหม่ใช้:

citizenid

แต่ Scriptเก่าต้องการ:

identifier

อย่ารีบทำ:

ALTER TABLE `players`
ADD COLUMN `identifier` VARCHAR(100);

เพียงเพื่อให้ Errorหาย

เพราะ Column ใหม่:

identifier

จะว่างทั้งหมดและไม่สัมพันธ์กับ citizenid

Query อาจผ่านแต่หา Player ไม่พบอยู่ดี

⑱ ต้องเข้าใจ Mapping ของข้อมูล

ก่อนแก้:

identifier → citizenid

ต้องตอบให้ได้ว่าเป็นข้อมูลชนิดเดียวกันจริงหรือไม่

อาจเป็น:

license identifier

กับ:

framework character identifier

ซึ่งไม่ใช่สิ่งเดียวกัน

Schema Migration ต้องอิง Data Model ไม่ใช่ชื่อที่ดูคล้ายกัน

⑲ Database Connection ผิดตัวก็ทำให้ Unknown Column ได้

สมมติ:

fivem_prod

มี Schema ใหม่:

metadata
status

แต่ FiveM ต่อ:

fivem_old

ซึ่ง Table ชื่อเดียวกันมีอยู่ แต่เป็น Schema รุ่นเก่า

ผลจึงไม่ใช่ Error 1146 เพราะ Table มี

แต่กลายเป็น:

1054 Unknown column

ดังนั้นถ้ามีหลาย Database ให้ตรวจ Connection String ด้วย

Official oxmysql Documentation ระบุให้กำหนด mysql_connection_string ก่อน Resources และ Connection String ระบุ Database ที่ Server ใช้งาน.

⑳ ตรวจ Database ที่กำลังใช้อยู่

ใช้:

SELECT DATABASE();

แล้วตรวจ:

SHOW COLUMNS
FROM `characters`;

อย่าเปิด phpMyAdmin แล้วดู Database หนึ่ง แต่ FiveM เชื่อมอีก Database หนึ่ง

นี่เป็นสาเหตุที่ทำให้:

ฉันเห็น Column อยู่แล้ว
ทำไม FiveM ยังบอก Unknown Column?

ได้บ่อย

㉑ วิธีตรวจ Schema แบบเร็วที่สุด

สมมติ Error:

Unknown column 'metadata'
in 'field list'

ใช้:

SHOW COLUMNS
FROM `players`
LIKE 'metadata';

ถ้าไม่มีผลลัพธ์:

Column ไม่มีใน Table นี้

จากนั้นไปตรวจ:

Migration
Resource Version
Official Schema

SHOW COLUMNS รองรับ Pattern Matching เพื่อช่วยค้น Column ได้.

㉒ ตรวจหลาย Tables พร้อมกัน

ใช้:

SELECT
    TABLE_NAME,
    COLUMN_NAME,
    DATA_TYPE
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
  AND COLUMN_NAME = 'metadata';

ช่วยหาได้ว่า:

metadata อยู่ players?
metadata อยู่ characters?
metadata อยู่ users?

หรือไม่มีเลย.

㉓ Column อยู่ผิด Table

บางครั้ง Column มีจริง แต่ Query ใช้ Table ผิด

เช่น:

players
มี citizenid

แต่ Resource Query:

SELECT `citizenid`
FROM `characters`;

และ characters ไม่มี citizenid

MariaDB ยังสามารถคืน Error 1054 เพราะ Column ไม่อยู่ใน Table Context ที่ Queryใช้อยู่

ดังนั้น:

Column มีใน Database

ยังไม่พอ

ต้อง:

Column มีใน Table ที่ Queryใช้อยู่

ด้วย

㉔ JOIN ทำให้ Debug ซับซ้อนขึ้น

ตัวอย่าง:

SELECT
    p.identifier,
    c.firstname
FROM `players` p
JOIN `characters` c
    ON c.player_id = p.id;

ถ้า:

characters.player_id

ไม่มี

Errorอาจเกิดใน Join Condition

ต้องตรวจ Columns ของทั้ง:

players
characters

ไม่ใช่ Table เดียว

㉕ Alias ผิดก็ทำให้ Query พังได้

ตัวอย่าง:

SELECT
    p.identifier
FROM `players` AS u;

กำหนด Alias ว่า:

u

แต่ Query ใช้:

p.identifier

นี่เป็น Query Reference Problem ไม่ใช่ Database Migration

ดังนั้นถ้า SHOW COLUMNS ยืนยันว่า Column มีจริง ให้ตรวจ Alias และ Query Structure ต่อ

㉖ Dynamic Query ต้องระวัง Column Name

FiveM Resource บางตัวสร้าง Query จาก Config เช่น:

local identifierColumn = Config.IdentifierColumn

ถ้า Config:

identifierColumn = citizenid

แต่ Databaseใช้:

identifier

Queryที่ Runtime สร้างอาจ Error

ดังนั้นต้องตรวจ:

Resource Config
+
Generated SQL
+
Database Schema

พร้อมกัน

㉗ อย่ารับ Column Name จาก Client

ไม่ควรออกแบบ:

Client
↓
ส่ง columnName
↓
Server ต่อเข้า SQL

Client ควรส่ง Data/Action และ Serverเลือก Column/Query จากรายการที่กำหนดไว้

นอกจากช่วยลด SQL Bugs ยังทำให้ Data Modelถูกควบคุมจาก Server

㉘ Error 1054 หลังติดตั้ง Script ใหม่

ถ้า Resource ใหม่ขึ้น:

Unknown column 'xyz'

ให้ตรวจ:

Script รองรับ Framework ของคุณหรือไม่
Database Schema ที่ผู้พัฒนาต้องการคืออะไร
มี Migration/SQL เพิ่มหรือไม่
Config Column Mapping ถูกหรือไม่

อย่าแก้ Table ก่อนอ่าน Schema Requirement ของ Resource

㉙ Error 1054 หลัง Update Framework

ถ้า FiveM Framework Update แล้ว Custom Scriptsหลายตัวขึ้น Unknown Column พร้อมกัน

มีโอกาสสูงว่า:

Column Names เปลี่ยน
Data Model เปลี่ยน
Migration เปลี่ยน Schema
Custom Resources ยังเก่า

ให้ทำ Inventory ว่า Resources ไหนอ้าง Columns เดิม

㉚ Error 1054 หลัง Restore Backup

สมมติ Resource Files เป็น Versionใหม่

แต่ Restore Database จาก Backupเก่าที่มี Schemaก่อน Migration

Tables ยังอยู่ครบ จึงไม่เกิด 1146

แต่ Columns ใหม่หาย

ผลคือ:

1054
1054
1054

หลาย Resources

กรณีนี้ต้อง Apply Migrations จาก Backup Version ไป Current Versionตามลำดับ

㉛ Error 1054 หลังย้าย VPS

เปรียบเทียบ:

Old Database Schema
New Database Schema

ไม่ใช่ดูเพียง Row Count

ใช้:

SHOW COLUMNS FROM `table_name`;

ทั้งสองฝั่ง

หรือ Query information_schema.COLUMNS เพื่อเปรียบเทียบ Columns, Types, Defaults และ Nullability.

㉜ Resource Query ไหนเป็นต้นเหตุ

oxmysql มี Debug Mode ที่สามารถ Print Queries ลง Server Console และสามารถจำกัดเฉพาะ Resources ที่ต้องการ Debugได้.

เปิด:

set mysql_debug true

หรือจำกัด Resource:

set mysql_debug [
  "my_resource"
]

จากนั้นจับ Query ที่ขึ้นก่อน Error

㉝ Debug UI ช่วยหา Resource ได้

Official oxmysql Debug UI สามารถแสดง Queries ที่ Resources Execute, Response Time และ Statistics แยกตาม Resource.

เหมาะกับ Development/Test Server

เป้าหมายคือหา:

Resource
↓
SQL
↓
Unknown Column

ให้ตรงกัน

㉞ อย่าเปิด Debug หนักๆ บน Server ใหญ่ตลอดเวลา

Official oxmysql Documentation ระบุว่า Debug UI ควรใช้ใน Development หรือ Server ที่มี Player Countต่ำ และสำหรับ Serverใหญ่ควรใช้ Database Logging ที่เหมาะสมแทน.

ดังนั้นเปิดเพื่อ Debug แล้วปิดเมื่อแก้เสร็จจะเหมาะกว่า

㉟ Error 1054 จาก INSERT

ตัวอย่าง:

INSERT INTO `players`
(
    `identifier`,
    `nickname`
)
VALUES
(
    ?,
    ?
);

แต่ Tableไม่มี:

nickname

จะ Error

ตรวจ:

SHOW COLUMNS
FROM `players`
LIKE 'nickname';

ถ้าไม่พบ ต้องตัดสินว่า:

Query ผิด
หรือ
Migration หาย

㊱ Error 1054 จาก UPDATE

ตัวอย่าง:

UPDATE `players`
SET `last_login` = NOW()
WHERE `identifier` = ?;

แต่ Table ไม่มี:

last_login

ถ้า Resource Versionใหม่เพิ่ม Feature Last Login และ Migrationควรเพิ่ม Columnนี้ ให้ใช้ Migration

อย่าลบ last_login ออกจาก Queryจน Featureทำงานผิดโดยไม่รู้ตัว

㊲ Error 1054 จาก SELECT

ตัวอย่าง:

SELECT
    `id`,
    `identifier`,
    `metadata`
FROM `players`;

หาก metadata ไม่มี Queryทั้ง Statementอาจ Fail

นี่อธิบายได้ว่าทำไม Resourceอาจ Load Playerไม่ได้ทั้งหมดเพียงเพราะ Columnใหม่หนึ่งตัวหาย

㊳ Error 1054 จาก WHERE

ตัวอย่าง:

DELETE FROM `sessions`
WHERE `character_id` = ?;

ถ้า Tableใช้:

player_id

แทน:

character_id

จะเกิด Unknown Column

อย่าเปลี่ยน Queryจาก character_id เป็น player_id จนกว่าจะยืนยันว่าทั้งสองหมายถึง Entityเดียวกันจริง

㊴ Error 1054 จาก ORDER BY

ตัวอย่าง:

SELECT *
FROM `players`
ORDER BY `created_at` DESC;

แต่ Databaseไม่มี:

created_at

ก็เป็น Unknown Column ได้

ดังนั้น Search Intent ของ Error 1054 ไม่ได้จำกัดเฉพาะ INSERT/UPDATE เท่านั้น

㊵ Column ไม่มีควร ADD COLUMN ได้เลยไหม

ทำได้ทาง SQL แต่ควรทำเมื่อ:

Official Resource Schema

หรือ:

Migration

ยืนยันว่าต้องมี Columnจริง

ไม่ควรดู Error:

Unknown column 'metadata'

แล้วเดา:

ALTER TABLE `players`
ADD COLUMN `metadata` TEXT;

เพราะ Type อาจต้องเป็น:

LONGTEXT
JSON
VARCHAR
INT

พร้อม Default/NULL/Index ที่เฉพาะเจาะจง

㊶ Column Type ก็ต้องตรง

แม้เพิ่ม Columnแล้ว ถ้า Type ผิด อาจต่อด้วย Errors เช่น:

Data Too Long
Incorrect Value
Out of Range
Cannot Be Null

ดังนั้น Migrationต้องสร้าง Definition ให้ครบ:

Column Name
Data Type
NULL / NOT NULL
DEFAULT
Index
Constraint

ไม่ใช่เพียงชื่อ Column

㊷ ระวัง Duplicate Column ตอน Migration

ก่อน:

ALTER TABLE
ADD COLUMN

ควรตรวจว่า Columnไม่มีจริง

เพราะ MariaDB มี Error:

1060
Duplicate column name

สำหรับการสร้าง Columnชื่อซ้ำ.

ดังนั้น Migrationไม่ควรถูกนำมารันซ้ำแบบสุ่ม

㊸ Error 1054 หลังแก้ 1146 เป็นเรื่องปกติได้

สมมติเดิม:

Table characters ไม่มี
→ 1146

Adminสร้าง/Import Table

ตอนนี้ Tableมีแล้ว แต่ Schemaเป็น Versionเก่า

Resourceจึงเปลี่ยนเป็น:

Unknown column metadata
→ 1054

นี่บอกว่า Debugเดินไปอีกชั้น:

Table Exists
แต่ Schema ยังไม่ครบ

ไม่ใช่ว่า MariaDBสร้าง Errorใหม่แบบสุ่ม

㊹ Error 1054 หลังแก้แล้วเจอ 1364

อีก Flow:

1054
Column ไม่มี
↓
Migration เพิ่ม Column
↓
Column เป็น NOT NULL ไม่มี Default
↓
INSERT เก่าไม่ส่งค่า
↓
1364

แสดงว่า Resource และ Migrationยังไม่ตรงกันทั้งชุด

อย่าแก้ Error ทีละตัวโดยไม่มี Version Mapping

㊺ Error 1054 หลังแก้แล้วเจอ 1048

เช่น:

เพิ่ม identifier Column
↓
Resourceส่ง identifier
↓
ค่ากลับเป็น nil
↓
1048

หมายความว่า Schemaพร้อมขึ้นแล้ว แต่ Resource Logic ยังหา Value ไม่ได้

ต้อง Debug Application Layer ต่อ

㊻ วิธีแก้แบบ 5 นาที

เมื่อ Console ขึ้น:

Unknown column 'metadata'
in 'field list'

ทำตามนี้:

① จดชื่อ Column
② จด Table จาก Query
③ SHOW COLUMNS FROM table
④ ดูว่า Column มีจริงหรือไม่
⑤ เปิด oxmysql debug หา Query
⑥ ตรวจสะกด Column
⑦ ตรวจ Resource Version
⑧ ตรวจ Migration
⑨ ตรวจ Database ที่ Connection String ใช้
⑩ เทียบ Official Schema
⑪ Backup
⑫ ค่อย Migration หรือแก้ Query

㊼ ตัวอย่าง Case 1 — Migration ไม่ครบ

Error:

Unknown column 'metadata'
in 'field list'

ตรวจ:

SHOW COLUMNS
FROM `players`
LIKE 'metadata';

ไม่มีผลลัพธ์

Resource Versionใหม่มี Migrationเพิ่ม metadata

Root Cause:

Resource ใหม่
+
Schema เก่า

แก้ด้วย Migration ที่ตรง Version

㊽ ตัวอย่าง Case 2 — สะกดผิด

Database:

identifier

Query:

identifer

Root Cause:

Typo

ไม่ต้องแก้ Database

แก้ Source Code/Config

㊾ ตัวอย่าง Case 3 — ต่อ Database ผิด

Database Production:

players
  id
  identifier
  metadata

Database Test:

players
  id
  identifier

FiveM Connection String ชี้ Test Database

Resource Query:

metadata

จึงขึ้น 1054

แก้ Connection/Database Mapping ไม่ใช่ ALTER Production

Official oxmysql Setup ระบุว่า Connection Stringต้องถูกกำหนดก่อน Resources และระบุ Database ที่จะใช้.

㊿ ตัวอย่าง Case 4 — Framework เปลี่ยน Column

Databaseใหม่:

citizenid

Custom Scriptเก่า:

identifier

ต้องตรวจ Framework Migration/API ก่อน

อย่าสร้างทั้งสอง Columns แล้วหวังว่าจะ Sync กันเอง

51. ตารางเปรียบเทียบ Error ที่เกี่ยวข้อง

Errorความหมาย
1048Column Cannot Be Null
1050Table Already Exists
1054Unknown Column
1060Duplicate Column Name
1062Duplicate Entry
1146Table Doesn't Exist
1364Field Doesn't Have Default
1366Incorrect Value
1406Data Too Long

MariaDB แยก Error Codes เหล่านี้ชัดเจน จึงควรใช้ Error Code เป็นตัวนำ Debug แทนการเดาจากข้อความสั้นๆ.

52. Checklist FiveM Error 1054

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

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

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

  3. Unknown Column ชื่ออะไร

  4. Error อยู่ field list, where clause หรือส่วนอื่น

  5. Query ใช้ Table ไหน

  6. Table มีจริงหรือไม่

  7. Column มีใน Tableนั้นหรือไม่

  8. Column สะกดถูกหรือไม่

  9. Config ระบุ Columnถูกหรือไม่

  10. Alias ถูกหรือไม่

  11. JOIN ใช้ Columnถูก Tableหรือไม่

  12. Resource Version อะไร

  13. Framework Version อะไร

  14. Database Schema Version อะไร

  15. Migrationล่าสุดรันหรือยัง

  16. Databaseที่ FiveMต่ออยู่ถูกหรือไม่

  17. Backupที่ Restoreเก่าเกินไปหรือไม่

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

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

  20. Custom Scriptยังอ้างชื่อเก่าหรือไม่

  21. Dynamic Queryสร้างชื่อ Columnผิดหรือไม่

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

  23. Column Typeตาม Official Schemaคืออะไร

  24. NULL/DEFAULTต้องเป็นอย่างไร

  25. Index/Constraintต้องมีหรือไม่

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

  27. Migrationเคยรันไปบางส่วนหรือไม่

  28. มี Duplicate Columnก่อนรันซ้ำหรือไม่

  29. Test Resourceหลังแก้แล้วหรือไม่

  30. Monitor Consoleหลัง Restartแล้วหรือไม่

FiveM Unknown Column แก้อย่างไร

เริ่มจาก:

SHOW COLUMNS
FROM `table_name`;

MariaDB ระบุว่า Statement นี้แสดงข้อมูล Columns ของ Table และ DESCRIBE สามารถใช้เป็นทางลัดสำหรับข้อมูลลักษณะเดียวกัน.

ถ้า Column ไม่มีจริง:

ตรวจ Migration
ตรวจ Resource Version

ถ้า Column มี:

ตรวจ Query
Alias
Table Context
Database Connection

ต่อ

FiveM Error 1054 คืออะไร

คือ MariaDB:

ER_BAD_FIELD_ERROR

SQLSTATE:

42S22

พร้อมข้อความ:

Unknown column '...' in '...'

FiveM Unknown Column in Field List แก้อย่างไร

ตรวจ Columns ที่อยู่ใน:

SELECT list
INSERT column list
UPDATE SET expression

แล้วเปรียบเทียบกับ:

SHOW COLUMNS FROM `table_name`;

อย่าคิดว่า Tableมีแล้วแปลว่า Schemaต้องตรงกับ Resource

FiveM Unknown Column in Where Clause แก้อย่างไร

ตรวจ Column ใน:

WHERE ...

รวมถึง Table Alias

ตัวอย่าง:

WHERE `citizenid` = ?

แต่ Databaseใช้:

identifier

ต้องตรวจ Data Modelก่อนเปลี่ยนชื่อ Query

FiveM Unknown Column หลัง Update Script แก้อย่างไร

ตรวจ:

Resource Version
Migration Files
Current Columns
Official Schema

ถ้า Columnใหม่อยู่ใน Resource Versionใหม่แต่ Databaseไม่มี นี่เป็นสัญญาณ Migrationไม่ครบ

FiveM Unknown Column หลังย้าย VPS แก้อย่างไร

ตรวจ:

Database Connection
Schema
Restore Version

โดยใช้:

SHOW COLUMNS FROM `table_name`;

หรือ information_schema.COLUMNS เพื่อเทียบ Schema.

FiveM Unknown Column หลัง Restore Backup แก้อย่างไร

ถ้า Restore Backupเก่าเข้า Serverที่ใช้ Resourcesใหม่ ตารางอาจยังมีอยู่ครบแต่ Columnsรุ่นใหม่หาย

ให้ Apply Database Migrations จาก Backup Version ไปยัง Current Versionตามลำดับ

อย่า Import Fresh-install SQL ทับ Productionโดยไม่ตรวจข้อมูลเดิม

FiveM เพิ่ม Column เองได้ไหม

ทำได้ด้วย SQL หาก Schemaที่ถูกต้องยืนยันว่าต้องเพิ่ม แต่ควรใช้ Migrationของ Resource

อย่าเดาเพียง:

ALTER TABLE
ADD COLUMN metadata TEXT;

เพราะ Official Schemaอาจต้องการ Type/Default/Constraintต่างจากนี้

FiveM oxmysql Unknown Column เกิดจาก oxmysql ไหม

Error 1054 เป็น MariaDB Error ที่เกี่ยวกับ Column Reference ส่วน oxmysql ทำหน้าที่ Execute Queriesจาก FiveM Resource

ควรใช้ oxmysql Debug เพื่อจับ Queryจริง แล้วตรวจ Queryเทียบ Database Schema. Official oxmysql ระบุว่าสามารถเปิด mysql_debug เพื่อ Print Queriesลง Server Consoleได้.

FiveM mysql_debug เปิดอย่างไร

ใช้:

set mysql_debug true

หรือจำกัดเฉพาะ Resource เช่น:

set mysql_debug [
  "my_resource"
]

Official oxmysql รองรับทั้งสองรูปแบบ.

FAQ FiveM MariaDB Unknown Column

Error 1054 คืออะไร?

คือ MariaDB ER_BAD_FIELD_ERROR หรือ Unknown column ใช้ SQLSTATE 42S22.

Unknown Column กับ Table Doesn't Exist เหมือนกันไหม?

ไม่ 1054 คือ Column ไม่พบ ส่วน 1146 คือ Table ไม่พบ.

เช็ก Column ยังไง?

ใช้:

SHOW COLUMNS
FROM `table_name`;

หรือ:

DESCRIBE `table_name`;

ตรวจ Column ทุก Table ได้ไหม?

ได้ผ่าน information_schema.COLUMNS ซึ่งมี Metadata ของ Columns บน Server.

Error หลัง Update Script เกี่ยวกับ Migration ไหม?

เป็นสาเหตุสำคัญที่ควรตรวจ โดยเฉพาะเมื่อ Resourceใหม่อ้าง Columnที่ Schemaปัจจุบันไม่มี

Column มีอยู่แต่ยัง Error ทำไม?

ตรวจว่า FiveMต่อ Databaseเดียวกับที่คุณกำลังดูหรือไม่ รวมถึงตรวจ Table Alias, JOIN และ Table Context ของ Query

ควร ADD COLUMN เองไหม?

ควรทำเฉพาะเมื่อทราบ Definition ที่ถูกต้องจาก Schema/Migration ของ Resource ไม่ควรเดา Typeจากชื่อ Column

Unknown Column หลังเปลี่ยน Framework เกิดได้ไหม?

ได้ เพราะ Frameworkต่างกันอาจใช้ชื่อ Columnและ Data Modelต่างกัน Custom Scriptsจึงต้องถูกปรับตาม Frameworkใหม่

Restart MariaDB แก้ได้ไหม?

ไม่ หาก Queryอ้าง Columnที่ไม่มีจริง Restartไม่ได้สร้าง Columnให้ ต้องแก้ Schemaหรือ Query

Restart oxmysql แก้ได้ไหม?

ไม่แก้ Missing Column แต่ oxmysql Debug ช่วยจับ Queryต้นเหตุได้.

mysql_debug ควรเปิดตลอดไหม?

Official Debug UI Guidance แนะนำให้ใช้ Debugหนักๆ ใน Developmentหรือ Serverขนาดเล็กมากกว่าการเปิดตลอดบน Serverใหญ่.

ประเด็นสำคัญ

เมื่อ FiveM Console ขึ้น:

ERROR 1054
Unknown column '...' in '...'

ให้ใช้ Flow นี้:

1054
↓
Column อะไร
↓
Table อะไร
↓
SHOW COLUMNS
↓
Column มีไหม
├─ ไม่มี → Migration / Schema / Resource Version
└─ มี → Query / Alias / Database / Config
↓
เปิด mysql_debug
↓
ดู Queryจริง
↓
แก้ Root Cause

MariaDB ระบุ Error 1054 เป็น Unknown column โดยตรง และมีทั้ง SHOW COLUMNS, DESCRIBE และ information_schema.COLUMNS สำหรับตรวจโครงสร้าง Columnsจริงของ Database.

สิ่งที่ไม่ควรทำคือเห็น:

Unknown column 'metadata'

แล้วสร้าง Column metadata ขึ้นมาเองทันที เพราะชื่อถูกอย่างเดียวไม่พอ—Data Type, NULL/NOT NULL, Default, Index และวิธีที่ Resourceใช้ข้อมูลต้องตรงกับ Schema Versionด้วย

สำหรับผู้อ่าน comsiam ให้จำสูตร “1054 = Table มีแล้ว แต่ Script กับ Column ไม่ตรงกัน” และเมื่อแก้บน Production ควร Backupก่อน Migrationทุกครั้ง

อีกจุดที่ comsiam แนะนำให้ตรวจเป็นอันดับต้นๆ คือ Resource Version + Database Schema Version + Queryจริงจาก oxmysql Debug เพราะสามอย่างนี้ช่วยแยกได้เร็วว่า Errorเกิดจาก Migrationหาย, Queryสะกดผิด หรือ FiveMกำลังต่อ Databaseคนละตัวกับที่ Adminกำลังตรวจอยู่

Comments

Popular posts from this blog

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

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

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