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

ก่อนแก้ ให้ตรวจ:

  1. Error Code เป็น 1054 หรือไม่
  2. SQLSTATE เป็น 42S22 หรือไม่
  3. Column ที่ Error ชื่ออะไร
  4. Error ระบุ field list, where clause หรือ Context ไหน
  5. Query มาจาก Resource ไหน
  6. Query ใช้ Table ไหน
  7. SHOW COLUMNS พบ Columnหรือไม่
  8. SHOW CREATE TABLE เป็น Schema Versionไหน
  9. Columnสะกดถูกหรือไม่
  10. underscore ถูกหรือไม่
  11. Singular/Plural ถูกหรือไม่
  12. Tableถูกตัวหรือไม่
  13. Columnถูก Renameหรือไม่
  14. Columnถูก Dropหรือไม่
  15. Columnย้ายไป Tableอื่นหรือไม่
  16. Resource Versionอะไร
  17. Database Versionอะไร
  18. Migrationรันครบหรือไม่
  19. Frameworkเปลี่ยนหรือไม่
  20. Custom Resourceรองรับ Frameworkนี้หรือไม่
  21. Configมี Column Mappingหรือไม่
  22. Restore Backupเก่าหรือไม่
  23. Install SQL คนละ Versionหรือไม่
  24. Resourceเก่ากว่า Schemaหรือไม่
  25. Schemaเก่ากว่า Resourceหรือไม่
  26. มีหลาย Resources ขึ้น Errorพร้อมกันหรือไม่
  27. information_schema.COLUMNS พบ Columnที่ไหนบ้าง
  28. mysql_debug จับ Queryได้หรือไม่
  29. Backupก่อน ALTERแล้วหรือไม่
  30. Migration Official กำหนด Data Typeอะไร

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

Errorความหมาย
1048Column Cannot Be Null
1052Column Ambiguous
1054Unknown Column
1060Duplicate Column Name
1062Duplicate Entry
1064SQL Syntax Error
1072Key Column ไม่มีใน Table
1146Table Doesn't Exist
1364Field ไม่มี Default
1366Incorrect Value
1406Data 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

Popular posts from this blog

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

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

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