FiveM MariaDB Unknown Column แก้อย่างไร? วิธีแก้ Error 1054 เมื่อ Resource กับ Database Schema คนละ Version
FiveM MariaDB Unknown column คือ Error ที่เกิดเมื่อ Resource ส่ง SQL Query ไปอ้างถึง Column ที่ MariaDB หาไม่พบใน Table หรือ Query Context นั้น โดย MariaDB กำหนดเป็น Error 1054, SQLSTATE 42S22 และชื่อ ER_BAD_FIELD_ERROR.
ตัวอย่างที่พบได้ใน FiveM Console:
ERROR 1054 (42S22): Unknown column 'citizenid' in 'field list'
หรือ:
Unknown column 'garage' in 'where clause'
หรือจาก Resource ที่ใช้ oxmysql:
SCRIPT ERROR: oxmysql was unable to execute a query! Unknown column 'metadata' in 'field list'
ปัญหานี้มักเกิดหลังอัปเดต Script, เปลี่ยน Framework, Import SQL ไม่ครบ, Migration ไม่ได้รัน หรือ Query ใช้ชื่อ Column ไม่ตรงกับ Schema ปัจจุบัน
วิธีตรวจที่ควรใช้คือ:
Error 1054 ↓ ดูชื่อ Column ↓ ดู Table ↓ SHOW COLUMNS ↓ SHOW CREATE TABLE ↓ ดู Query จาก Resource ↓ เทียบ Resource Version กับ Schema ↓ ตรวจ Migration ↓ แก้ Column หรือ Query ที่ต้นเหตุ
① Error 1054 คืออะไร
MariaDB ระบุ:
Error Code: 1054 SQLSTATE: 42S22 ER_BAD_FIELD_ERROR Unknown column '%s' in '%s'
ดังนั้น Error:
Unknown column 'citizenid' in 'field list'
แปลอย่างง่ายว่า MariaDB กำลังประมวลผล Query ที่อ้าง citizenid แต่ไม่พบ Column ดังกล่าวในตำแหน่งที่ Query ใช้งานอยู่
② Unknown Column ไม่ได้แปลว่า Table หาย
ถ้า Table ไม่มี จะเป็นปัญหาคนละประเภท เช่น:
Error 1146 Table doesn't exist
แต่:
Error 1054 Unknown column
หมายถึงต้องตรวจ ชื่อ Column และ Query Context เป็นหลัก ไม่ใช่เริ่มจากสร้าง Table ใหม่.
③ ข้อความ in field list หมายถึงอะไร
ตัวอย่าง:
Unknown column 'citizenid' in 'field list'
มักพบเมื่อ Query พยายามใช้ Column ในส่วนอย่าง:
SELECT `citizenid` FROM `players`;
หรือ:
INSERT INTO `players` ( `citizenid` ) VALUES ( ? );
หรือ:
UPDATE `players` SET `citizenid` = ? WHERE `id` = ?;
ถ้า Table ไม่มี citizenid Query ก็ไม่สามารถทำงานตามที่ Resource ต้องการได้
④ in where clause หมายถึงอะไร
ตัวอย่าง:
Unknown column 'identifier' in 'where clause'
Query อาจเป็น:
SELECT * FROM `players` WHERE `identifier` = ?;
แต่ Table จริงอาจมีเพียง:
license citizenid player_id
ดังนั้นต้องตรวจ Schema จริงก่อนเปลี่ยน Query
⑤ in order clause ก็เกิดได้
ตัวอย่าง:
SELECT * FROM `characters` ORDER BY `created_at` DESC;
แต่ Table ไม่มี:
created_at
MariaDB ก็สามารถรายงาน Unknown Column ตามตำแหน่งที่ Column ถูกนำไปใช้ได้.
⑥ ขั้นแรกใช้ SHOW COLUMNS
ใช้:
SHOW COLUMNS FROM `players`;
MariaDB ระบุว่า SHOW COLUMNS ใช้แสดงข้อมูล Column ของ Table รวมถึง Field Name, Type, Key และข้อมูลประกอบอื่นๆ.
ตัวอย่างผล:
id license name money job
ถ้า Error บอก:
Unknown column 'citizenid'
แต่รายชื่อ Column ไม่มี citizenid
แสดงว่ามีความไม่ตรงกันจริงระหว่าง Query กับ Table
⑦ ใช้ DESCRIBE ก็ได้
MariaDB ระบุว่า:
DESCRIBE `players`;
หรือ:
DESC `players`;
ใช้ดูข้อมูล Columns และทำหน้าที่เป็น Shortcut ของ SHOW COLUMNS.
ดังนั้นสำหรับการ Debug เร็วๆ:
DESC `players`;
ก็เพียงพอที่จะตรวจว่ามี Column ที่ Resource ต้องการหรือไม่
⑧ ใช้ SHOW CREATE TABLE เมื่อต้องการดูครบ
ใช้:
SHOW CREATE TABLE `players`;
MariaDB ระบุว่า SHOW CREATE TABLE แสดง Definition เต็มของ Table รวมถึง Column Definitions และ Indexes.
ตัวอย่าง:
CREATE TABLE `players` ( `id` INT NOT NULL AUTO_INCREMENT, `license` VARCHAR(100) NOT NULL, `name` VARCHAR(100) NOT NULL, PRIMARY KEY (`id`) );
ตรงนี้จะเห็นทันทีว่า:
citizenid
ไม่มีจริง
⑨ อย่าดู SQL File อย่างเดียว
Resource Folder อาจมี Schema:
`citizenid` VARCHAR(50)
แต่ Database Production จริงอาจยังเป็น Version เก่าที่ไม่มี Column นี้
ดังนั้นควรเชื่อ:
SHOW CREATE TABLE `table_name`;
ของ Database ที่ FiveM ใช้จริงก่อน แล้วจึงเทียบกับ Migration/Schema ของ Resource.
⑩ สาเหตุยอดนิยมที่สุด: Resource ใหม่ แต่ Database เก่า
ตัวอย่าง:
Resource v1 players: id license name
Resource v2 เพิ่ม:
citizenid
Query รุ่นใหม่:
SELECT `citizenid` FROM `players` WHERE `license` = ?;
แต่ Admin อัปเดตเพียง Resource Files และไม่ได้รัน Migration
ผลคือ:
Unknown column 'citizenid'
กรณีนี้ควรหา Migration ของ Version ที่กำลังใช้ ไม่ใช่แก้ Query กลับไปใช้ Schema เก่าโดยไม่ตรวจผลกระทบ
⑪ Database ใหม่ แต่ Resource เก่าก็เกิดได้
กรณีกลับกัน:
Schema ใหม่
อาจ Rename:
identifier → citizenid
แต่ Custom Resource เก่ายัง Query:
SELECT `identifier` FROM `players`;
MariaDBก็จะหา identifier ไม่พบ
ดังนั้น Error 1054 ไม่ได้หมายความว่า Databaseต้องอัปเดตเสมอ
บางครั้ง Resource ที่ Query อยู่เป็นฝ่ายเก่า
⑫ หลังเปลี่ยน Framework เจอบ่อยมาก
ตัวอย่างเชิงแนวคิด:
Framework A ใช้ identifier Framework B ใช้ citizenid Custom Script ยังใช้ identifier
เมื่อ Custom Script ถูกนำไปใช้กับ Schema ของ Framework B:
Unknown column 'identifier'
จึงต้องตรวจว่า Resource รองรับ Framework ที่กำลังใช้อยู่จริงหรือไม่
⑬ อย่าเพิ่ม Column เพียงเพราะชื่ออยู่ใน Error
ถ้า Error:
Unknown column 'citizenid'
วิธีที่ไม่ควรทำทันทีคือ:
ALTER TABLE `players` ADD COLUMN `citizenid` VARCHAR(50);
เพราะคุณยังไม่รู้ว่า Column นี้ต้องเป็น:
VARCHAR เท่าไร NULL หรือ NOT NULL UNIQUE หรือไม่ DEFAULT อะไร มี Index หรือไม่ สัมพันธ์กับ Table อื่นหรือไม่
การสร้าง Column แบบเดาอาจทำให้ Error 1054 หาย แต่สร้าง Schema ที่ Resource ไม่รองรับ
⑭ ใช้ Official Migration ก่อน ALTER เอง
ถ้า Resource Version ใหม่มี Migration เช่น:
v2_to_v3.sql migration.sql upgrade.sql
ให้ตรวจ Migration นั้นก่อน
เพราะ Migration อาจไม่ได้ทำเพียง:
ADD COLUMN
แต่อาจต้อง:
Rename Column Backfill Data Create Index Convert Data Type Update Existing Rows
การเพิ่ม Column เองจึงอาจไม่ครบ
⑮ Column Rename เป็นสาเหตุสำคัญ
สมมติ Version เก่า:
owner
Version ใหม่:
identifier
Migration อาจ Rename Column
แต่ Custom Script ยังใช้:
SELECT `owner` FROM `vehicles`;
ผลคือ:
Unknown column 'owner'
การแก้ที่ถูกต้องอาจเป็น Update Resource ไม่ใช่สร้าง owner ใหม่เพิ่มกลับเข้าไป
⑯ Column ถูก Drop แล้ว Resource เก่ายังใช้
Migration ใหม่อาจลบ Column ที่ไม่ได้ใช้แล้ว
เช่น:
old_status
ถูกแทนด้วย:
status
Custom Script ยัง:
UPDATE `players` SET `old_status` = ?;
จึงเกิด 1054
ก่อนเพิ่ม Column กลับมา ต้องตรวจว่า Data Modelใหม่ใช้ Field อะไรแทน
⑰ Column พิมพ์ผิดก็เกิดได้
ตัวอย่าง Table มี:
identifier
แต่ Query เขียน:
identifer
ขาดตัว i
Query:
SELECT `identifer` FROM `players`;
MariaDBจะหา Column ชื่อนั้นไม่พบ
ดังนั้นอย่ามองข้าม Typo ง่ายๆ
⑱ ตรวจตัวพิมพ์และ Spelling ทุกครั้ง
เมื่อ Errorขึ้น:
Unknown column 'metadata'
ตรวจว่า Schemaใช้:
metadata meta_data player_metadata
หรือชื่ออื่น
อย่าสมมติว่าชื่อที่คล้ายกันคือ Column เดียวกัน
⑲ Table Alias ผิดก็ทำให้เหมือน Unknown Column ได้
ตัวอย่าง:
SELECT p.identifier FROM `players` AS p;
ถูก
แต่ถ้า Query เขียน:
SELECT c.identifier FROM `players` AS p;
ทั้งที่ไม่มี Alias c
ก็เป็น Query Reference ที่ผิด
ดังนั้น Error 1054 ไม่ได้หมายถึง Columnขาดจาก Tableทุกครั้ง อาจเป็น Qualification/Alias ที่เขียนผิดด้วย
⑳ JOIN แล้วอ้าง Column ผิด Table
ตัวอย่าง:
SELECT p.identifier, v.plate FROM `players` p JOIN `vehicles` v ON v.owner = p.identifier;
ถ้า vehicles ไม่มี owner แต่ใช้:
citizenid
Queryก็จะผิด
ต้องตรวจ Columns ของทั้งสอง Tables:
SHOW COLUMNS FROM `players`; SHOW COLUMNS FROM `vehicles`;
MariaDB รองรับ SHOW COLUMNS สำหรับตรวจ Columns ของแต่ละ Table โดยตรง.
㉑ SELECT * ผ่าน แต่ SELECT Column เฉพาะไม่ผ่าน
ตัวอย่าง:
SELECT * FROM `players`;
ทำงานได้
แต่:
SELECT `citizenid` FROM `players`;
Error
นี่เป็นหลักฐานชัดว่า:
Table มี Connection ใช้ได้ แต่ Column ที่เรียกไม่มี
ไม่ต้องเริ่มแก้ Connection String
㉒ INSERT ก็เกิด Unknown Column ได้
ตัวอย่าง:
INSERT INTO `players` ( `identifier`, `nickname` ) VALUES ( ?, ? );
แต่ Table ไม่มี:
nickname
Queryจะล้มเหลว
ดังนั้น Error 1054 ไม่ได้จำกัดเฉพาะ SELECT
㉓ UPDATE ก็เกิดได้
UPDATE `players` SET `last_seen` = NOW() WHERE `identifier` = ?;
ถ้าไม่มี:
last_seen
ก็เกิด Unknown Column
ถ้า Resource Versionใหม่เพิ่ม last_seen นี่เป็นสัญญาณให้ตรวจ Migration
㉔ WHERE Clause ก็ต้องตรง Schema
Query:
DELETE FROM `vehicles` WHERE `citizenid` = ?;
หาก Tableใช้:
owner
Resource จะหา citizenid ไม่พบ
อย่าเปลี่ยน Table Schema ก่อนรู้ว่า Frameworkปัจจุบันใช้ Ownership Field แบบไหน
㉕ Column อยู่คนละ Table
Errorบางกรณีเกิดเพราะ Developerจำ Schema ผิด
เช่น:
players มี identifier characters มี citizenid
แต่ Query:
SELECT `citizenid` FROM `players`;
Columnมีอยู่จริงใน Database แต่ อยู่คนละ Table
SHOW COLUMNS ของ Table ที่ Queryใช้จะช่วยยืนยันจุดนี้ได้.
㉖ ใช้ information_schema.COLUMNS ตรวจหลาย Tables
MariaDB มี information_schema.COLUMNS ซึ่งให้ข้อมูล Column ของ Tables บน Server รวมถึงชื่อ Database, Table, Column, Data Type และ Default.
ตัวอย่าง:
SELECT TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, DATA_TYPE FROM information_schema.COLUMNS WHERE COLUMN_NAME = 'citizenid';
ช่วยตอบว่า:
citizenid อยู่ Table ไหนบ้าง?
㉗ จำกัดให้ค้นเฉพาะ Database ปัจจุบัน
ใช้:
SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND COLUMN_NAME = 'citizenid';
ถ้าไม่มีผลลัพธ์ แสดงว่า Database ปัจจุบันไม่มี Columnชื่อนั้นใน Tables ที่ Metadataมองเห็น.
㉘ ตรวจหลาย Column พร้อมกัน
ถ้า Resource Errorหลาย Fields:
citizenid metadata last_seen
สามารถดู Schemaทั้ง Table:
SHOW COLUMNS FROM `players`;
แทน Queryทีละชื่อ
MariaDB ระบุว่า SHOW COLUMNS แสดง Field, Type, Null, Key, Default และ Extra Information ของ Columns.
㉙ Error หลัง Import SQL
ถ้า Import SQL แล้ว Error 1054 เริ่มขึ้น อาจเกิดจาก:
Import Schema เก่า Import Schema คนละ Framework Import ไม่ครบ Importเฉพาะบาง Table Migration ไม่ครบ
ตรวจ SHOW CREATE TABLE แล้วเทียบกับ Resource Version
อย่า Import SQL ซ้ำหลายรอบโดยยังไม่รู้ Schema ที่ถูกต้อง
㉚ Error หลัง Restore Backup
ตัวอย่าง:
Resource Files = ปัจจุบัน Backup Database = 6 เดือนก่อน
หลัง Restore Database Schema อาจไม่มี Columns ที่ Resourceรุ่นปัจจุบันเพิ่มเข้ามาแล้ว
ผล:
Unknown column
วิธีแก้คือ Apply Migrations จาก Backup Version ไปยัง Current Versionอย่างถูกลำดับ ไม่ใช่สร้างทุก Columnที่ Consoleร้องทีละตัว
㉛ อย่าแก้ Error ทีละ Column ถ้า Schema ต่างกันทั้ง Version
สมมติ Resourceเริ่ม Error:
Unknown column 'citizenid'
คุณเพิ่ม citizenid
Restart แล้วได้:
Unknown column 'metadata'
เพิ่ม metadata
Restart แล้วได้:
Unknown column 'last_seen'
นี่เป็นสัญญาณว่า:
Schema Version ทั้งชุดไม่ตรง
ไม่ควรไล่สร้าง Columnทีละตัว
ให้หา Migration/Schema Version ที่ถูกต้อง
㉜ Schema Diff ช่วยมาก
เปรียบเทียบ:
Current Database Schema vs Official Schema ของ Resource Version ปัจจุบัน
โดยดู:
Columns Data Types Nullability Defaults Indexes Constraints
SHOW CREATE TABLE เหมาะกับงานนี้เพราะแสดง Definition และ Indexes ของ Tableครบใน Statement เดียว.
㉝ Error 1054 หลัง Rename Column
ถ้า Adminเคยทำ:
ALTER TABLE `players` RENAME COLUMN `identifier` TO `citizenid`;
แต่ Resourcesบางตัวใช้ชื่อเดิม
Resourceเหล่านั้นจะ Error
ดังนั้นก่อน Rename Field ใน Production ต้องค้น Queryจาก Resources ที่พึ่ง Columnนั้นทั้งหมด
㉞ Custom Resource เป็นตัวการที่พบบ่อย
Framework Main Resourceอาจ Migrationครบแล้ว
แต่ Custom Scripts เช่น:
garage housing phone inventory bridge jobs admin logs
ยังอ้าง Columns แบบเก่า
ดังนั้นถ้า Main Frameworkทำงานแต่ Custom Resourceหนึ่ง Error 1054 ให้เริ่มจาก Resourceนั้นก่อน
㉟ ถ้าหลาย Resource Errorพร้อมกัน
ถ้าเกิดหลัง Restore หรือ Update และ Resourcesหลายตัวขึ้น Unknown Columnพร้อมกัน ให้สงสัย:
Schema Migration ไม่ครบ Databaseผิด Version Backupเก่า
ก่อนคิดว่า Scriptsหลายตัวพังพร้อมกันโดยบังเอิญ
㊱ mysql_debug ช่วยหา Query ที่ Error
oxmysql Documentation ระบุว่าเปิด:
set mysql_debug true
เพื่อให้ Queries ถูกพิมพ์ใน Server Console และยังสามารถจำกัด Debug ให้เฉพาะ Resources ที่ต้องการได้.
ตัวอย่าง:
set mysql_debug [ "my_resource" ]
เหมาะมากเมื่อ Error 1054 ไม่ได้แสดง SQL เต็มใน Error Stack
㊲ Debug UI ของ oxmysql
oxmysql Debug UI สามารถแสดง Queries ที่ Resources Execute, Query Response Times และ Statistics แยกตาม Resource และเอกสารแนะนำให้ใช้ใน Development หรือ Server ที่มี Player Countไม่สูง.
ใช้เพื่อจับ:
Resource ↓ Query ↓ เวลาที่ Error เกิด
แล้วเทียบกับ Schema
㊳ อย่าเปิด Debug หนักๆ โดยไม่จำเป็น
Official oxmysql Documentation ระบุว่า Debug UI เหมาะกับ Development/Serverผู้เล่นน้อย และ Serverขนาดใหญ่ควรพิจารณา Logging ที่เหมาะสมกว่า.
ดังนั้น Debug Error 1054 แล้วปิดเมื่อหา Root Causeได้จะเหมาะกว่าเปิดตลอดบน Productionโดยไม่จำเป็น
㊴ ตัวอย่าง Debug จริง
Console:
Unknown column 'citizenid' in 'where clause'
Query:
SELECT * FROM `vehicles` WHERE `citizenid` = ?;
ตรวจ:
SHOW COLUMNS FROM `vehicles`;
พบ:
id owner plate vehicle
ไม่มี:
citizenid
ตรงนี้ต้องถามต่อว่า:
Resourceควรใช้ owner? หรือ Migrationควรเพิ่ม citizenid?
คำตอบต้องมาจาก Resource/Framework Version
㊵ ตัวอย่าง Resource ใหม่ Schema เก่า
Official Migration Versionใหม่กำหนด:
owner → citizenid
แต่ Databaseยังมี:
owner
Resource Query:
SELECT * FROM `vehicles` WHERE `citizenid` = ?;
กรณีนี้ควรทำ Migration
ไม่ควรแก้ Resourceกลับไปใช้ owner หาก Versionใหม่ทั้งระบบออกแบบมาใช้ citizenid
㊶ ตัวอย่าง Custom Script เก่า
Database/Frameworkใหม่ใช้:
citizenid
แต่ Custom Garageเก่า:
SELECT * FROM `vehicles` WHERE `owner` = ?;
ถ้า Migrationได้ Rename owner ออกไปแล้ว Custom Scriptต้องอัปเดต Query/Bridge ให้ตรง Frameworkใหม่
ไม่ควรเพิ่ม owner ซ้ำกลับเข้า Databaseทันที
㊷ Unknown Column จาก String ที่ไม่ได้ Quote ถูกต้อง
SQL Identifier กับ String Value เป็นคนละสิ่ง
ถ้า Query Constructionผิด MariaDBอาจตีความบาง Token ว่าเป็น Column Name แทนค่าข้อมูลได้
วิธีลดปัญหาคือใช้ Parameter Placeholdersสำหรับ Values แทนการต่อ String SQLจากข้อมูล Runtime
สำหรับ FiveM/oxmysql ควรใช้ Query Parameters ตาม API ที่ Resourceใช้งาน
㊸ อย่าต่อ Player Input เป็น SQL
ไม่ควร:
local query = 'SELECT * FROM players WHERE name = ' .. playerName
เพราะ SQL Structure อาจเปลี่ยนตาม Input
ควรใช้:
MySQL.query.await( 'SELECT * FROM `players` WHERE `name` = ?', { playerName } )
แม้ Parameterizationไม่ได้แก้ Columnที่ไม่มี แต่ช่วยแยก SQL Structure ออกจาก Values และทำให้ Debugง่ายขึ้น
㊹ Dynamic Column Name ต้อง Whitelist
ถ้า Resourceรองรับ Sorting:
name created_at money
ไม่ควรนำ Client Inputมาต่อเป็น:
ORDER BY <client_value>
ตรงๆ
ให้ Map:
local allowedColumns = { name = '`name`', created = '`created_at`', money = '`money`' }
หาก Config/Clientส่งชื่อ Columnที่ไม่มี MariaDBก็จะเกิด Unknown Column ได้เช่นกัน
㊺ Generated Column ก็ตรวจได้
MariaDB ระบุว่า SHOW CREATE TABLE รองรับการแสดง Generated Columns และ DESCRIBE สามารถใช้ตรวจข้อมูล Columnลักษณะนี้ได้.
ดังนั้นถ้า Resourceพึ่ง Generated Field อย่าสมมติว่า Columnธรรมดากับ Generated Columnเหมือนกันทุก Version
㊻ Error 1054 กับ Error 1060 ต่างกัน
MariaDB Error Reference แยก:
1054 Unknown column
กับ:
1060 Duplicate column name
ดังนั้นถ้าพยายามแก้ 1054 ด้วยการ:
ADD COLUMN
แต่ Columnมีอยู่จริงในอีก Form/Context อาจสร้าง Errorใหม่หรือ Schemaซ้ำซ้อน
ตรวจก่อนทุกครั้ง
㊼ Error 1054 กับ Error 1072 ต่างกัน
MariaDB ยังมี Error:
1072 Key column doesn't exist in table
ซึ่งเกี่ยวกับการสร้าง Key/Index ที่อ้าง Columnไม่มี แตกต่างจาก Runtime Queryที่ขึ้น Error 1054.
จึงต้องอ่าน Error Codeเต็ม ไม่ใช่เห็นคำว่า Columnแล้วใช้วิธีแก้เดียวกัน
㊽ Error 1054 กับ Error 1052
MariaDB Error:
1052 Column is ambiguous
เกิดเมื่อมีหลาย Tables/Columns ที่ทำให้ Databaseไม่รู้ว่าต้องใช้ Columnจาก Tableไหน
ส่วน:
1054 Unknown column
คือหา Columnอ้างอิงนั้นไม่พบ.
ตัวอย่าง Ambiguous:
SELECT `id` FROM `players` JOIN `vehicles` ON ...
ถ้าทั้งสอง Tableมี id
อาจต้องระบุ:
players.id
แทน
㊾ Error 1054 กับ Table Doesn't Exist
จำง่ายๆ:
1146 ไม่มี Table
1054 มี Table แต่ Column/Reference ที่ Queryเรียกไม่พบ
ตรวจตามลำดับ:
SHOW TABLES ↓ SHOW COLUMNS ↓ SHOW CREATE TABLE
MariaDB มี Commandsเหล่านี้สำหรับตรวจ Tableและ Column Metadata โดยตรง.
㊿ วิธีแก้ Error 1054 แบบ 5 นาที
เมื่อ Console ขึ้น:
Unknown column 'citizenid'
ทำตามนี้:
① จดชื่อ Table ② จดชื่อ Column ③ Copy Query เต็ม ④ SHOW COLUMNS FROM table ⑤ SHOW CREATE TABLE table ⑥ ตรวจว่า Column มีจริงไหม ⑦ ตรวจ Spelling ⑧ ตรวจ Table Alias ⑨ ตรวจ Resource Version ⑩ ตรวจ Database Migration ⑪ ตรวจ Custom Script Compatibility ⑫ แก้ Query หรือ Migrationตาม Schemaที่ถูกต้อง
51. ถ้า Column ไม่มีจริงต้องทำอะไร
มี 3 กรณีหลัก:
A. Columnควรมี → Migrationขาด B. Columnไม่ควรมีแล้ว → Resourceเก่า C. ชื่อ Columnเขียนผิด → Query Bug
อย่าเลือก:
ALTER TABLE ADD COLUMN
จนกว่าจะรู้ว่าอยู่กรณีไหน
52. ถ้า Migration ขาด
แนวทาง:
Backup ↓ ระบุ Version ปัจจุบัน ↓ หา Migrationที่ขาด ↓ Testบนสำเนา Database ↓ Applyตามลำดับ ↓ SHOW CREATE TABLE ↓ Test Resource
ไม่ควร Import Fresh-install SQL ทับ Production Database ที่มีข้อมูลจริงเพียงเพื่อเพิ่ม Columnเดียว
53. ถ้า Resource เก่า
ให้ตรวจว่า Resourceมี Versionที่รองรับ Framework/Schemaปัจจุบันหรือไม่
ถ้าไม่มี อาจต้อง:
แก้ Query สร้าง Bridge เปลี่ยน Resource
ตาม Architecture
ไม่ควรทำ Databaseย้อนกลับให้ Resourcesเก่าทั้งหมดโดยไม่มีแผน
54. ถ้า Query Bug
ตัวอย่าง:
SELECT `identifer` FROM `players`;
แต่ Tableมี:
identifier
เพียงแก้:
SELECT `identifier` FROM `players`;
ไม่ต้อง ALTER Databaseใดๆ
นี่เป็นกรณีที่ง่ายที่สุด
55. ถ้า Column มีอยู่แต่ Error ยังขึ้น
ตรวจต่อ:
Database ที่ FiveMใช้ Table ที่ Queryใช้ Alias Schema/Database Prefix Case/Spelling
และใช้ oxmysql Debug ดู Query Runtimeจริง
เพราะ Source Code ที่คุณเปิดอยู่อาจไม่ใช่ Queryสุดท้ายที่ Resource Execute
oxmysql สามารถพิมพ์ Queriesใน Server Consoleเมื่อเปิด mysql_debug.
56. Restart MariaDB ช่วยไหม
ถ้า Columnไม่มีจริง:
Restart MariaDB
ไม่สร้าง Columnให้
และถ้า Queryใช้ชื่อผิด:
Restart FXServer
ก็ไม่แก้ Query
Restartมีประโยชน์หลังคุณ Deploy Code/Migrationบางกรณี แต่ไม่ใช่ Root-cause Fix ของ Unknown Column
57. ล้าง FiveM Cache ช่วยไหม
Error 1054 มาจาก SQL Queryกับ Database Schemaเป็นหลัก
หาก Consoleระบุ MariaDB:
Unknown column
การล้าง FiveM Client Cacheไม่ใช่ขั้นตอนหลักในการแก้
ให้ตรวจ Resourceฝั่ง Serverและ Databaseก่อน
58. Backup ก่อน ALTER Column
ถ้าตรวจแล้วว่า Migrationต้อง:
ADD COLUMN RENAME COLUMN MODIFY COLUMN
ใน Production
ควร Backupก่อน
โดยเฉพาะ Tables:
players characters vehicles inventory properties
ที่มีข้อมูลผู้เล่นจำนวนมาก
59. ตรวจหลัง Migration
หลังทำ Migration:
SHOW COLUMNS FROM `players`;
และ:
SHOW CREATE TABLE `players`;
เพื่อยืนยันว่า Column, Type, Default และ Index Definitionตรงตามที่ Resourceต้องการ.
อย่าหยุดเพียงเพราะ SQLขึ้น:
Query OK
60. Test Resource หลังแก้
ทดสอบ Flowที่เคย Error เช่น:
Player Join Character Create Character Load Save Vehicle Spawn Garage Save Disconnect Reconnect Resource Restart
เพราะ Queryแรกอาจผ่านแล้ว แต่ Schema Versionยังมี Columnอื่นขาดอยู่
61. Checklist FiveM Unknown Column
ตรวจทั้งหมดนี้:
-
Error Code เป็น
1054หรือไม่ -
SQLSTATE เป็น
42S22หรือไม่ - Column ชื่ออะไร
-
Error อยู่
field list,where clauseหรือส่วนไหน - Table ไหน
- Queryเต็มคืออะไร
- Resourceไหนยิง Query
-
SHOW COLUMNSมี Columnไหม -
DESCRIBEตรงไหม -
SHOW CREATE TABLEเป็น Schema Versionไหน - Columnสะกดถูกไหม
- Table Aliasถูกไหม
- Columnอยู่คนละ Tableหรือไม่
- JOINใช้ Fieldถูกไหม
- Resourceเพิ่ง Updateหรือไม่
- Frameworkเพิ่ง Updateหรือไม่
- Migrationรันครบไหม
- Backupเก่าเพิ่ง Restoreหรือไม่
- install.sql เป็น Versionเดียวกันไหม
- Custom Scriptรองรับ Frameworkใหม่ไหม
- Columnถูก Renameไหม
- Columnถูก Dropไหม
- Adminเคย ALTER Tableเองไหม
- มี Columnชื่อคล้ายกันไหม
- Databaseปัจจุบันถูกตัวไหม
- Runtime Queryตรงกับ Sourceที่ดูไหม
- mysql_debugเปิดตรวจแล้วหรือไม่
- Schema Diffแล้วหรือไม่
- Backupก่อน Migrationแล้วหรือไม่
- Testหลังแก้แล้วหรือไม่
ตาราง Error ที่ไม่ควรสับสน
| Error | ความหมาย |
|---|---|
1048 | Column Cannot Be Null |
1049 | Unknown Database |
1052 | Column Ambiguous |
1054 | Unknown Column |
1060 | Duplicate Column Name |
1062 | Duplicate Entry |
1072 | Key Column Doesn't Exist |
1146 | Table Doesn't Exist |
1364 | Field Doesn't Have Default |
1366 | Incorrect Value |
1406 | Data Too Long |
MariaDB Error Reference แยกรหัสเหล่านี้เป็นคนละสาเหตุ จึงควรเริ่มจาก Error Code จริงทุกครั้ง.
FiveM Unknown Column แก้อย่างไร
ใช้:
SHOW COLUMNS FROM `table_name`;
ก่อน
ถ้าไม่มี Columnนั้น:
ตรวจ Migration Resource Version Framework Version ชื่อ Column
MariaDB ระบุว่า SHOW COLUMNS แสดงโครงสร้าง Columnsของ 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
แล้วเทียบกับ:
SHOW COLUMNS FROM `table_name`;
หาก Columnไม่มี ต้องหาว่า Schemaเก่าหรือ Queryเก่า
อย่าเพิ่ม Columnก่อนรู้ Official Data Model
FiveM Unknown Column in WHERE Clause แก้อย่างไร
ตรวจ:
WHERE `column_name` = ?
ว่า Columnนั้นอยู่ใน Tableจริงหรือไม่
โดยเฉพาะ Resourcesที่เปลี่ยนจาก:
owner identifier citizenid license
ตาม Framework/Versionต่างๆ
FiveM Unknown Column หลัง Update Script แก้อย่างไร
ตรวจ:
Resource Version Migration SHOW CREATE TABLE
เป็นสามอย่างแรก
ถ้า Resourceใหม่เรียก Columnใหม่ แต่ Databaseไม่มี นี่เป็นสัญญาณว่า Migrationอาจขาด
FiveM Unknown Column หลังเปลี่ยน Framework แก้อย่างไร
ตรวจ Mappingของ:
Player ID Character ID Owner Identifier Job Vehicle Owner
ระหว่าง Frameworkเก่ากับใหม่
Custom Scriptsมักเป็นส่วนที่ต้องแก้ Query/Bridge ให้ตรง Data Modelใหม่
FiveM Unknown Column หลัง Restore Database แก้อย่างไร
ถ้า Restore Backupเก่า ให้ Apply Migrationsตาม Versionจน Schemaตรง Resourceปัจจุบัน
อย่าสร้าง Columnsจาก Consoleทีละตัว เพราะมักหมายถึง Schemaทั้งชุดเก่า
FiveM ดู Columns ของ Table อย่างไร
ใช้:
SHOW COLUMNS FROM `players`;
หรือ:
DESCRIBE `players`;
MariaDB ระบุว่า DESCRIBE เป็น Shortcutสำหรับดู Column Information เช่นเดียวกับ SHOW COLUMNS.
FiveM ดู Full Schema อย่างไร
ใช้:
SHOW CREATE TABLE `players`;
เพื่อดู Definition, Data Types และ Indexes.
FiveM หา Column ว่าอยู่ Table ไหน
ใช้:
SELECT TABLE_NAME, COLUMN_NAME FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND COLUMN_NAME = 'citizenid';
MariaDB information_schema.COLUMNS มี Metadataเกี่ยวกับ Columnsทุก Table.
FiveM oxmysql ดู Query ที่ Error อย่างไร
เปิด:
set mysql_debug true
Official oxmysql Documentation ระบุว่าจะ Print Queriesใน Server Console และสามารถจำกัดเฉพาะ Resourcesบางตัวได้.
หรือใช้ Debug UI เพื่อดู Queriesและ Per-resource Statisticsใน Environmentที่เหมาะสม.
FiveM เพิ่ม Column เพื่อแก้ Error 1054 ได้ไหม
ได้เฉพาะเมื่อยืนยันแล้วว่า Official Schema ของ Resource Versionนั้นต้องมี Columnจริง
ไม่ควรเพิ่ม Columnจากชื่อ Errorอย่างเดียว
เพราะ Definitionต้องถูกทั้ง:
Data Type NULL DEFAULT INDEX UNIQUE Constraint
FAQ FiveM MariaDB Unknown Column
Error 1054 คืออะไร?
คือ MariaDB ER_BAD_FIELD_ERROR เมื่อ Queryอ้าง Columnที่หาไม่พบ.
SQLSTATE ของ Error 1054 คืออะไร?
คือ:
42S22
Unknown Column หมายถึง Table ไม่มีไหม?
ไม่ ถ้า Tableไม่มีจะเป็น Errorประเภท Table Doesn't Exist เช่น 1146 ส่วน 1054ให้ตรวจ Column/Query Reference.
ดูว่ามี Columnหรือไม่อย่างไร?
ใช้:
SHOW COLUMNS FROM `table_name`;
DESCRIBE ใช้แทนได้ไหม?
ได้ MariaDBระบุว่า DESCRIBE เป็น Shortcutของ SHOW COLUMNS.
SHOW CREATE TABLE มีประโยชน์อย่างไร?
ใช้ดู Definitionเต็มของ Tableรวม Columnsและ Indexes จึงเหมาะสำหรับเทียบกับ Official Schema.
Error หลัง Update Script เกิดจาก Migration ไม่ครบได้ไหม?
ได้ เป็นหนึ่งในสาเหตุที่ควรตรวจเมื่อ Resourceใหม่เรียก Columnที่ Production Schemaยังไม่มี
Error หลัง Restore Backup เกิดได้ไหม?
ได้หาก Backup Schemaเก่ากว่า Resource Filesปัจจุบัน
ควร ADD COLUMN ทันทีไหม?
ไม่ ควรยืนยัน Official Schemaก่อน เพราะ Resourceอาจเป็นฝ่ายใช้ชื่อ Columnเก่า
Error เกิดจาก Typo ได้ไหม?
ได้ เช่น Schemaมี identifier แต่ Queryใช้ identifer
Error เกิดจาก JOIN ได้ไหม?
ได้ หาก Queryอ้าง Columnจาก Table/Aliasผิดตัว
mysql_debug ช่วยได้ไหม?
ได้ oxmysqlสามารถ Print Queriesใน Server Consoleเมื่อเปิด Debug.
Restart MariaDB ช่วยไหม?
ไม่หาก Root Causeคือ Columnไม่มีหรือ Queryใช้ชื่อผิด ต้องแก้ Schema/Resourceที่ต้นเหตุ
ประเด็นสำคัญ
เมื่อ FiveM Consoleขึ้น:
ERROR 1054 Unknown column '...' in '...'
อย่าเริ่มจาก:
ADD COLUMN แบบเดา Import install.sql ซ้ำ ลบ Table ปิด SQL Mode
ให้ใช้ Flow นี้:
1054 ↓ ดู Column ↓ ดู Query ↓ SHOW COLUMNS ↓ SHOW CREATE TABLE ↓ ดู Resource Version ↓ ดู Migration ↓ ดู Framework Compatibility ↓ ตัดสินว่า Queryเก่าหรือ Schemaเก่า ↓ แก้ให้ตรง Version
MariaDB ระบุ Error 1054 เป็น ER_BAD_FIELD_ERROR สำหรับ Unknown Column และมี SHOW COLUMNS, DESCRIBE, SHOW CREATE TABLE รวมถึง information_schema.COLUMNS ให้ใช้ตรวจ Schema จริงอย่างเป็นระบบ.
สำหรับ FiveM จุดที่ต้องระวังที่สุดคือ Resource กับ Database Schema คนละ Version เพราะถ้าเริ่มสร้าง Columns ตาม Errorทีละตัว คุณอาจได้ Databaseที่ชื่อ Fieldsดูครบแต่ Data Types, Indexes และ Migration Logicผิดทั้งหมด
สำหรับผู้อ่าน comsiam ให้จำสูตร “1054 = Table มี แต่ Column ที่ Queryเรียกไม่ตรง” และ comsiam แนะนำให้เทียบสามสิ่งทุกครั้งคือ Query จริง + SHOW CREATE TABLE + Migration ของ Resource Versionปัจจุบัน เพราะจะช่วยแยกได้ทันทีว่าควรแก้ SQL Resource หรืออัปเดต Database Schema
Comments
Post a Comment