FiveM MariaDB Table Doesn't Exist แก้อย่างไร? วิธีแก้ Error 1146 เมื่อ Table หาย Import SQL ไม่ครบ หรือ Database Schema ผิด
FiveM MariaDB Table doesn't exist คือปัญหาที่เกิดเมื่อ Resource ส่ง SQL Query ไปเรียก Table ที่ MariaDB หาไม่พบ โดย MariaDB กำหนดเป็น Error 1146, SQLSTATE 42S02 และชื่อ ER_NO_SUCH_TABLE พร้อมข้อความรูปแบบ Table 'database.table' doesn't exist.
ตัวอย่างที่พบใน FiveM Console:
ERROR 1146 (42S02):
Table 'fivem.characters' doesn't exist
หรือ:
SCRIPT ERROR: oxmysql was unable to execute a query!
Table 'fivem.owned_vehicles' doesn't exist
สาเหตุที่พบได้บ่อยคือ:
Import install.sql ไม่ครบ
ไม่ได้ Import SQL เลย
Migration หลัง Update Script ยังไม่ได้รัน
FiveM ต่อ Database ผิดตัว
SQL ถูก Import ไปอีก Database
ชื่อ Table ใน Script ไม่ตรงกับ Database
Table Prefix ไม่ตรง
Restore Database ไม่ครบ
Table ถูก Drop
ชื่อ Table ตัวพิมพ์เล็ก/ใหญ่ไม่ตรง
Resource กับ Database Schema คนละ Version
วิธีแก้ที่ปลอดภัยคือ อย่ารีบสร้าง Table เองจากชื่อ Error เพียงอย่างเดียว แต่ให้หาว่า Resource รุ่นที่ใช้อยู่ต้องการ Schema แบบไหน แล้วใช้ install.sql หรือ Migration ที่ถูกต้องของ Resource นั้น
① FiveM Error 1146 คืออะไร
MariaDB ระบุ Error 1146 ว่า:
Error Code: 1146
SQLSTATE: 42S02
ER_NO_SUCH_TABLE
Table '%s.%s' doesn't exist
ถ้า Console แสดง:
Table 'fivem.characters' doesn't exist
ให้แยกข้อมูลออกเป็น:
Database = fivem
Table = characters
แล้วเริ่มตรวจสองอย่างนี้ก่อน
② Error 1146 หมายความว่า Database เชื่อมต่อได้ไหม
โดยทั่วไป Error 1146 หมายความว่า Query ไปถึง MariaDB และ Server พยายามค้นหา Table ที่ SQL อ้างถึงแล้ว แต่ไม่พบ Table ตามชื่อและ Database Context นั้น.
จึงแตกต่างจากปัญหาเช่น:
Access denied
Connection refused
Unknown database
แต่ยังต้องตรวจให้แน่ใจว่า FiveM ต่อ Database ที่ถูกตัว เพราะ Database ผิดตัวอาจมี Connection สำเร็จแต่ไม่มี Tables ที่ Resource ต้องการ
③ Error 1146 กับ Unknown Database ต่างกันอย่างไร
MariaDB แยก:
1049
Unknown database
ออกจาก:
1146
Table doesn't exist
อย่างชัดเจน.
จำง่ายๆ:
1049
Database ไม่มี
1146
Database Context มี
แต่ Table ที่ Query เรียกหาไม่พบ
④ Error 1146 กับ Unknown Column ต่างกันอย่างไร
อีก Error ที่สับสนกันบ่อยคือ:
1054
Unknown column
MariaDB ใช้ Error 1054 เมื่อ Column ที่ Query อ้างถึงไม่มี ส่วน Error 1146 คือ Table ไม่พบ.
ดังนั้น:
Table doesn't exist
→ ตรวจ Table / Migration
แต่:
Unknown column
→ Table มีแล้ว แต่ Schema Column ไม่ตรง
⑤ ขั้นแรกให้ดู Database ที่ FiveM ใช้อยู่จริง
ใช้:
SELECT DATABASE();
MariaDB ระบุว่า DATABASE() คืนชื่อ Default Database ที่ Session ปัจจุบันกำลังใช้อยู่.
ตัวอย่างผล:
fivem
ต้องเทียบกับ Database Name ใน Error
เช่น Error:
Table 'fivem.characters' doesn't exist
ถ้า:
SELECT DATABASE();
กลับได้:
fivem_test
แสดงว่าคุณอาจกำลังตรวจคนละ Database
⑥ ตรวจ mysql_connection_string ของ FiveM
Official oxmysql Documentation ระบุว่าต้องกำหนด mysql_connection_string ก่อน Resources ที่ใช้งาน Database และตัว Connection String ระบุ Host, User, Port และ Database ที่ FXServer จะเชื่อมต่อ.
ตัวอย่าง:
set mysql_connection_string "mysql://user:password@localhost:3306/fivem"
จุดสำคัญคือส่วนท้าย:
/fivem
ถ้าคุณ Import SQL ลง:
fivem_server
แต่ Connection String ชี้:
fivem
Resource ก็ยังหา Table ไม่พบ
⑦ ตรวจ Tables ทั้ง Database
ใช้:
SHOW TABLES;
MariaDB ระบุว่า SHOW TABLES ใช้แสดง Tables, Sequences และ Views ของ Database ที่เลือกอยู่.
ตัวอย่าง:
characters
players
owned_vehicles
jobs
inventories
จากนั้นหา Table ที่ Error ระบุ
เช่น:
owned_vehicles
ถ้าไม่มีจริง ก็เริ่มชัดว่าเป็นปัญหา Schema/Import
⑧ ตรวจ Table แบบเจาะจง
สามารถใช้:
SHOW TABLES LIKE 'characters';
ถ้าไม่พบผลลัพธ์ ให้ตรวจ:
ชื่อ Table ถูกหรือไม่
Database ถูกหรือไม่
Migration ครบหรือไม่
SHOW TABLES รองรับการกรองด้วย LIKE เพื่อค้นหา Table ตาม Pattern.
⑨ ใช้ information_schema ตรวจได้
MariaDB มี:
information_schema.TABLES
ซึ่งเก็บ Metadata ของ Tables และ Views บน Server รวมถึง:
TABLE_SCHEMA
TABLE_NAME
TABLE_TYPE
ตัวอย่าง:
SELECT
TABLE_SCHEMA,
TABLE_NAME
FROM information_schema.TABLES
WHERE TABLE_NAME = 'characters';
ช่วยตรวจว่า Table ชื่อเดียวกันอาจอยู่ใน Database อื่นหรือไม่
⑩ ตัวอย่าง Import SQL ผิด Database
สมมติ Server มี:
fivem
fivem_test
Admin Import:
characters
owned_vehicles
users
ลง:
fivem_test
แต่ FiveM Connection String ใช้:
fivem
ผลคือ:
Connection สำเร็จ
↓
SELECT/INSERT characters
↓
MariaDB มอง Database fivem
↓
ไม่มี characters
↓
Error 1146
ดังนั้น SELECT DATABASE() เป็นหนึ่งในคำสั่งแรกที่ควรตรวจ.
⑪ สาเหตุยอดนิยม: ไม่ได้ Import install.sql
FiveM Resources จำนวนมากมี Schema หรือ SQL Migration ที่ต้องติดตั้งก่อน Resource จะใช้งาน Table เหล่านั้น
หาก Resource Query:
SELECT *
FROM `characters`
WHERE `identifier` = ?;
แต่ไม่เคยสร้าง:
characters
MariaDB ย่อมคืน Error 1146 เมื่อหา Table นั้นไม่พบ.
ให้ตรวจ Folder ของ Resource ว่ามีไฟล์ลักษณะ:
install.sql
database.sql
schema.sql
migration.sql
หรือ Installation Instructions หรือไม่
⑫ อย่าสร้าง Table เองจากชื่อ Error
สมมติ Error:
Table 'fivem.characters' doesn't exist
วิธีที่ไม่ควรทำคือเดา:
CREATE TABLE `characters` (
`id` INT
);
เพียงเพื่อให้ Table มีชื่อถูก
เพราะ Resource อาจต้องการ Columns เช่น:
identifier
firstname
lastname
metadata
job
position
created_at
รวมถึง:
PRIMARY KEY
UNIQUE INDEX
FOREIGN KEY
DEFAULT
DATA TYPE
ที่ถูกต้อง
Table มีชื่อเหมือนกันแต่ Schema ผิดก็จะเปลี่ยนจาก Error 1146 ไปเป็น Errors อื่นแทน
⑬ ใช้ Official Schema ของ Resource
ทางเลือกที่ควรใช้คือ:
Resource Version
↓
Official install.sql / migration
↓
Database Schema
ต้องตรงกัน
อย่านำ SQL จาก:
Resource v1
มาใช้กับ:
Resource v4
เพียงเพราะชื่อ Resource เหมือนกัน
⑭ Update Script แล้ว Table Doesn't Exist
สมมติ Version เดิมใช้:
users
แต่ Version ใหม่เพิ่ม:
user_settings
Resource Code ใหม่เริ่ม Query:
SELECT *
FROM `user_settings`
WHERE `identifier` = ?;
แต่ Admin Update เพียง Resource Folder และไม่ได้รัน Migration ที่สร้าง user_settings
ผล:
Error 1146
กรณีนี้ Root Cause คือ:
Resource Version ใหม่
+
Database Schema เก่า
⑮ Migration สำคัญกว่าการ Import install.sql ซ้ำ
ถ้าเป็น Server ใหม่ที่ยังไม่มีข้อมูล การ Import Installation Schema ตามเอกสาร Resource อาจเหมาะสม
แต่ถ้าเป็น Production Database ที่มี Players, Vehicles, Inventory และข้อมูลจริงแล้ว ไม่ควรนำ install.sql เต็มชุดกลับมา Import ทับแบบสุ่ม
ควรใช้:
Migration SQL
Update SQL
ALTER TABLE
ที่ตรงกับ Version
เพราะ Installation SQL กับ Upgrade Migration มีวัตถุประสงค์ต่างกัน
⑯ อย่า Import install.sql ซ้ำหลายรอบ
หาก Resource มี:
CREATE TABLE ...
INSERT ...
CREATE INDEX ...
การ Import ซ้ำอาจสร้าง Error เพิ่ม เช่น:
Table already exists
Duplicate entry
Duplicate key
และทำให้ Admin สับสนว่าจุดใด Import ผ่านไปแล้ว
ก่อน Import ให้ดู Existing Schema ก่อน:
SHOW TABLES;
⑰ Restore Database ไม่ครบทำ Error 1146 ได้
MariaDB Dump/Restore Workflow สามารถสร้าง SQL Dump แล้วนำ SQL Statements กลับมา Execute เพื่อกู้ Database ได้.
ถ้า Restore:
users
vehicles
jobs
สำเร็จ
แต่:
characters
หายไปหรือ Restore หยุดก่อนถึง Table นี้
Resource จะเจอ Error 1146
ดังนั้นหลัง Restore ควรตรวจ:
SHOW TABLES;
ไม่ใช่ดูเพียงว่า Import Process เริ่มทำงานสำเร็จ
⑱ SQL Import อาจหยุดจาก Error ก่อนหน้า
สมมติไฟล์ SQL มี:
CREATE TABLE A
CREATE TABLE B
CREATE TABLE C
CREATE TABLE D
แต่ Import เจอ Error ตอน B และ Workflow หยุดหรือข้ามบางส่วน
คุณอาจได้ Database ที่มี:
A
แต่ไม่มี:
B
C
D
จากนั้น FiveM จะขึ้น 1146 ตอน Resource Query Tables ที่หาย
ดังนั้นอ่าน Import Log/Error ด้วย
⑲ วิธีตรวจ Definition หลัง Table ถูกสร้างแล้ว
ถ้า Table มีอยู่แล้ว ใช้:
SHOW CREATE TABLE `characters`;
MariaDB ระบุว่า SHOW CREATE TABLE แสดง SQL ที่สามารถใช้สร้าง Table รวมถึง Column Definitions และ Indexes.
นี่ช่วยตอบว่า:
Table มีแล้ว
แต่เป็น Schema Version ไหน?
⑳ Table มีแต่ Script ยังบอกไม่มี
ถ้า:
SHOW TABLES LIKE 'characters';
พบ Table
แต่ FiveM ยังขึ้น:
Table 'fivem.characters' doesn't exist
ให้ตรวจ:
① FiveM ต่อ Database ไหน
② คุณกำลังเปิด Database ไหนใน phpMyAdmin
③ Table Name ตัวเล็ก/ใหญ่ตรงไหม
④ Resource ใช้ Prefix หรือไม่
⑤ Query ระบุ database.table แบบเต็มหรือไม่
อย่ารีบ Restart Database
㉑ ชื่อ Table ตัวเล็ก/ใหญ่สำคัญไหม
สำคัญได้
MariaDB ระบุว่า Case Sensitivity ของ Database/Table Names มีความเกี่ยวข้องกับ Operating System และตัวแปร lower_case_table_names.
ดังนั้น:
Characters
characters
CHARACTERS
ไม่ควรถูกสมมติว่าจะเหมือนกันทุก Environment
นี่เป็นปัญหาที่เจอได้หลังย้าย Server จากระบบหนึ่งไปอีกระบบหนึ่ง
㉒ FiveM ทำงาน Windows แต่ Linux Server Error
ตัวอย่าง Developer ทดสอบใน Environment หนึ่งด้วย:
PlayerVehicles
แต่ Script Query:
playervehicles
ในบาง Environment อาจไม่สร้างปัญหาแบบเดียวกัน แต่ MariaDB Documentation ระบุว่าการเปรียบเทียบชื่อ Database/Table ขึ้นกับ Case Sensitivity Rules และ lower_case_table_names.
วิธีที่ดีที่สุดคือใช้ชื่อเดียวกันทุกจุดอย่างสม่ำเสมอ
㉓ อย่าแก้ case sensitivity ด้วยการ Rename แบบสุ่ม
ก่อน Rename Table ให้ตรวจ:
Resources ทั้งหมด
Foreign Keys
Views
Triggers
Queries
Migrations
เพราะ Resourceอื่นอาจยังใช้ชื่อเก่า
หากปัญหามาจาก Script พิมพ์ชื่อผิดเพียงจุดเดียว การแก้ Query อาจเหมาะกว่าการ Rename Production Table
㉔ Table Prefix คืออะไร
Framework หรือ Resource บางตัวอาจตั้งชื่อ:
users
แต่ Config Serverใช้:
esx_users
หรือ:
server_users
หาก Code Query:
SELECT *
FROM `users`;
แต่ Database มีเพียง:
server_users
ก็จะเกิด Error 1146
ตรวจ Config ของ Resource ว่ามี:
table
tableName
prefix
databasePrefix
หรือไม่
㉕ Custom Framework ต้องตั้ง Table Mapping ให้ตรง
Official Overextended Documentation บาง Resource แสดงตัวอย่างการตั้ง Table/Column References สำหรับ Framework แบบ Custom เช่นกำหนด Player Table, Player ID Column และ Vehicle Table ให้ตรงกับ Database ที่ Server ใช้จริง.
ดังนั้น Custom Framework ไม่ควรสมมติว่า Table ต้องชื่อ:
characters
เสมอไป
ต้อง Map ให้ตรง Server จริง
㉖ Table ถูก Rename หลัง Update
สมมติ Script เก่าใช้:
owned_vehicles
แต่ Migration ใหม่เปลี่ยนเป็น:
player_vehicles
Custom Script ตัวอื่นยัง Query:
owned_vehicles
ก็จะ Error
ต้องค้นหา Dependencies ทั้งหมดว่า Resources ใดอ้าง Table เดิมอยู่
㉗ Table ถูก Drop โดยไม่ได้ตั้งใจ
ถ้า Table เคยมีและ Error เริ่มขึ้นทันทีหลัง:
Database Cleanup
Manual SQL
Migration
Restore
ให้ตรวจว่า Table ถูก:
DROP TABLE
โดยไม่ได้ตั้งใจหรือไม่
ถ้ามี Backup ทางออกที่ปลอดภัยกว่าการสร้าง Empty Table คือ Restore Schema/Data ที่ถูกต้องจาก Backup ตาม Recovery Plan
MariaDB มีทั้ง Dump และ Backup/Restore Mechanisms สำหรับการกู้ Database.
㉘ อย่าสร้าง Empty Table ถ้าข้อมูลเดิมหาย
สมมติ:
owned_vehicles
เคยมี:
50,000 Rows
แต่ถูก Drop
อย่าแก้:
CREATE TABLE owned_vehicles ...
แล้วถือว่าจบ
เพราะ FiveMอาจกลับมา Query ได้ แต่ Vehicles ของผู้เล่นหายทั้งหมด
ต้องถามว่า:
Table หาย
หรือ
ทั้ง Table + Data หาย?
ถ้ามี Backup ให้ Recovery ก่อน
㉙ วิธีตรวจว่ามี Table ชื่อเดียวกันใน Database อื่นหรือไม่
ใช้:
SELECT
TABLE_SCHEMA,
TABLE_NAME
FROM information_schema.TABLES
WHERE TABLE_NAME = 'owned_vehicles';
MariaDB information_schema.TABLES มี Metadata ของ Tables รวมถึง Database (TABLE_SCHEMA) และชื่อ Table (TABLE_NAME).
ตัวอย่างผล:
fivem_backup owned_vehicles
แต่ไม่มี:
fivem owned_vehicles
แสดงว่า Table อยู่ผิด Database
㉚ อย่า Copy Table ข้าม Database แบบไม่ตรวจ Dependencies
ถ้าพบ Table อยู่ใน Backup Database อย่าเพิ่ง Copy มา Productionทันที
ตรวจ:
Schema Version
Foreign Keys
Related Tables
Character IDs
Resource Version
Data Freshness
ก่อน
Table เดียวอาจอ้างข้อมูลหลาย Tables
การ Copy Table เดี่ยวๆ อาจสร้างข้อมูลไม่สัมพันธ์กัน
㉛ Connection String ผิด Database เป็นสาเหตุใหญ่
oxmysql Setup ระบุให้ตั้ง Connection String ก่อน Resources และ Connection String กำหนด Database ที่จะใช้.
ตัวอย่างผิด:
database=fivem_test
แต่ SQL ถูก Importลง:
fivem
FiveM จะ Query Schema ผิดตัวตั้งแต่เริ่ม Server
㉜ oxmysql Start Order ต้องถูก
Official oxmysql Documentation ระบุให้ Start oxmysql ไว้ก่อน Resources ที่ใช้งาน Database.
ตัวอย่าง:
start oxmysql
ensure framework
ensure character_resource
ensure vehicle_resource
แต่ Start Order ที่ถูก ไม่ได้สร้าง Table ที่หาย
มันเพียงทำให้ Database Layer พร้อมใช้งาน
ถ้า Table ไม่มี ก็ยังต้อง Migration/Import Schema
㉝ Restart oxmysql แก้ Table Doesn't Exist ไหม
โดยทั่วไปไม่
ถ้า:
SHOW TABLES
ยืนยันว่า Table ไม่มี
การ:
restart oxmysql
restart resource
restart FXServer
ไม่ได้สร้าง Table ที่ Resourceต้องการให้อัตโนมัติ เว้นแต่ Resource นั้นมี Migration Logic ของตัวเอง
ต้องแก้ Database Schema
㉞ Restart MariaDB แก้ไหม
ถ้า Root Cause คือ:
Table ไม่ได้ถูกสร้าง
Restart MariaDB ไม่ได้ทำให้ Table ปรากฏขึ้น
ให้ใช้เวลาไปกับ:
SHOW TABLES
SELECT DATABASE()
ตรวจ install.sql
ตรวจ migration
จะตรงจุดกว่า
㉟ phpMyAdmin เห็น Table แต่ FiveM ไม่เห็น
ให้ทำ:
SELECT DATABASE();
จาก Connection ที่กำลังตรวจ
แล้วเทียบกับ:
mysql_connection_string
ของ FXServer
MariaDB DATABASE() จะบอก Default Database ของ Session ปัจจุบัน.
Admin หลายคนเปิด phpMyAdmin อยู่ที่:
fivem_backup
แต่คิดว่าเป็น:
fivem
จึงเห็น Table และสงสัยว่า FiveM บอกว่าไม่มีได้อย่างไร
㊱ Table มีแต่เป็น View ได้ไหม
SHOW TABLES สามารถแสดง Tables, Sequences และ Views ใน Database.
ถ้า Resource คาดหวัง Base Table แต่ Database Object ถูกสร้างเป็น View หรือ Migrationผิดประเภท ต้องตรวจ Definition/Metadata เพิ่ม
ใช้:
information_schema.TABLES
ดู TABLE_TYPE ได้.
㊲ Temporary Table ต้องระวัง
MariaDB ระบุว่า SHOW TABLES ปกติไม่ได้แสดง Temporary Tables ในลักษณะเดียวกับ Non-temporary Tables.
แต่ FiveM Resourcesทั่วไปไม่ควรสมมติว่า Temporary Table จาก Database Session หนึ่งจะพร้อมใช้งานกับ Query Calls อื่นแบบถาวร
ถ้า Resourceพึ่ง Session-specific Temporary Table ต้องเข้าใจ Connection/Session Architecture อย่างชัดเจน
㊳ ไม่ควรใช้ Temporary Table เป็น Persistent FiveM Data
ข้อมูลอย่าง:
Characters
Vehicles
Inventory
Accounts
Properties
ต้องเป็น Persistent Data ตาม Data Model ของ Resource
ถ้า Table หายหลัง Connection/Restart แสดงว่า Architecture อาจใช้ Object ผิดประเภท
㊴ Error เกิดเฉพาะ Resource เดียว
ถ้า Resources อื่นใช้ Databaseได้ปกติ แต่ Resource ใหม่ขึ้น:
Table doesn't exist
ให้ตรวจ Resourceนั้นก่อน:
Install SQL
Migration
Config Table Name
Framework Compatibility
Dependencies
ไม่ควรสรุปว่า MariaDB ทั้ง Server มีปัญหา
㊵ Error เกิดหลาย Resources พร้อมกัน
ถ้าหลังย้าย VPS แล้ว Resources 10 ตัวขึ้น:
Table doesn't exist
พร้อมกัน
ให้สงสัย:
Wrong Database
Incomplete Restore
Wrong Connection String
Wrong Backup
ก่อนตรวจแต่ละ Resource แยก
เพราะ Root Cause เดียวอาจทำให้ Tables ทั้งชุดหาย
㊶ Error เกิดหลังล้าง Database
ถ้ามีการ:
DROP DATABASE
CREATE DATABASE
ใหม่
แต่ยังไม่ได้ Restore Schema
FiveM สามารถ Connect Database ใหม่ที่ว่างเปล่าได้ แต่ Resources จะเริ่มขึ้น 1146 ทีละ Table
MariaDB SHOW DATABASES ใช้แสดง Databases ที่ Server มี ส่วน SHOW TABLES ใช้ตรวจ Objects ใน Database ปัจจุบัน.
㊷ วิธีตรวจแบบ 5 นาที
เมื่อเห็น:
Table 'fivem.characters' doesn't exist
ทำตามนี้:
① จด Database = fivem
② จด Table = characters
③ SELECT DATABASE();
④ SHOW TABLES LIKE 'characters';
⑤ ตรวจ mysql_connection_string
⑥ ตรวจ Resource ที่ Query
⑦ หา install.sql / migration
⑧ ตรวจ Resource Version
⑨ ตรวจ Backup/Restore ล่าสุด
⑩ อย่าสร้าง Table เองจนกว่าจะรู้ Schema ที่ถูกต้อง
㊸ ตัวอย่าง Case 1 — ยังไม่ Import SQL
Console:
Table 'fivem.player_houses' doesn't exist
ตรวจ:
SHOW TABLES LIKE 'player_houses';
ได้:
ไม่มีผลลัพธ์
ตรวจ Resource พบ:
install.sql
มีคำสั่งสร้าง player_houses
กรณีนี้ Root Cause คือ Installation Schema ไม่ได้ถูกนำเข้า
ถ้าเป็น Fresh Install ให้ทำตาม Installation Instructions ของ Resource
㊹ ตัวอย่าง Case 2 — Import ผิด Database
Console:
Table 'fivem.characters' doesn't exist
แต่ phpMyAdmin เห็น characters
ใช้:
SELECT DATABASE();
ใน Databaseที่เห็น Table:
fivem_backup
ขณะที่ oxmysql Connection String:
database=fivem
Root Cause:
SQL อยู่ fivem_backup
FiveM ใช้ fivem
ไม่ต้องแก้ Resource Code
㊺ ตัวอย่าง Case 3 — Migration หลัง Update ไม่ครบ
ก่อน Update:
Resource v2
ไม่มี Table:
character_outfits
หลัง Update:
Resource v3
เริ่ม Query:
character_outfits
แต่ Database ไม่ได้รัน Migration v3
ผล:
1146
ควรใช้ Migration ของ v3 ไม่ใช่ Import Fresh-install Databaseทับ Production
㊻ ตัวอย่าง Case 4 — Table Name ตัวใหญ่เล็กไม่ตรง
Database:
PlayerVehicles
Resource:
SELECT *
FROM `playervehicles`;
หลังย้าย Environment เริ่ม Error
MariaDB ระบุว่า Database/Table Name Case Sensitivity มีผลจากระบบไฟล์/Operating System และ lower_case_table_names.
แก้ Naming ให้สม่ำเสมอทั้ง Schema และ Resource
㊼ ตัวอย่าง Case 5 — Table ถูก Drop
เมื่อวาน Serverใช้งานได้
วันนี้:
Table 'fivem.owned_vehicles' doesn't exist
และ:
SHOW TABLES LIKE 'owned_vehicles';
ไม่พบ
ถ้ามีการ Cleanup/Migration ก่อน Errorเกิด ให้ตรวจ Backup
MariaDB รองรับการ Backup/Restore Database ผ่านเครื่องมืออย่าง mariadb-dump และ Recovery Mechanisms อื่น.
อย่าสร้าง Empty owned_vehicles ถ้าต้องการกู้ข้อมูลรถเดิม
㊽ Error 1146 หลัง Restore ต้องทำอะไร
ตรวจ:
Database Name
Tables Count
Critical Tables
Import Log
Schema Version
โดยใช้:
SHOW TABLES;
และ:
SHOW CREATE TABLE `important_table`;
SHOW TABLES ใช้ตรวจว่ามี Table หรือไม่ ส่วน SHOW CREATE TABLE ใช้ตรวจ Definition ว่าตรง Schema ที่ต้องการหรือไม่.
㊾ วิธี Restore SQL Dump ในภาพรวม
MariaDB ระบุว่าการ Restore Dump File ทำได้โดยให้ MariaDB Client Execute SQL Statements ที่อยู่ใน Dump File.
แต่ Production FiveM ควร Restore:
บน Test Database ก่อน
ถ้ามีความเสี่ยงว่าจะ:
ทับข้อมูลปัจจุบัน
Schema คนละ Version
ข้อมูลเก่ากว่า Production
㊿ อย่า Restore Backup เก่าทับ Production เพียงเพื่อเอา Table เดียว
ถ้าข้อมูลปัจจุบันใหม่กว่า Backup:
Production = วันนี้
Backup = 7 วันก่อน
การ Restore Database ทั้งก้อนอาจทำให้ข้อมูลล่าสุดหาย
ควรออกแบบ Recovery ตามสถานการณ์ เช่น:
Restore สำเนาแยก
↓
ตรวจ Table
↓
ตรวจ Schema
↓
กู้เฉพาะสิ่งที่จำเป็นอย่างระมัดระวัง
51. Error 1146 ไม่ได้แปลว่า Resource เสียเสมอ
Resourceอาจถูกต้อง 100%
แต่ Database Missing Migration
ในทางกลับกัน Databaseอาจถูกต้อง แต่ Resource Queryชื่อ Tableผิด
จึงต้องเปรียบเทียบ:
Resource Query
vs
Actual Database
vs
Official Schema
ครบสามจุด
52. Error 1146 ไม่ควรแก้ด้วย CREATE TABLE IF NOT EXISTS แบบสุ่ม
Developer บางคนใส่:
CREATE TABLE IF NOT EXISTS ...
ใน Resource Startup เพื่อให้ Error หาย
วิธีนี้มีประโยชน์ได้เฉพาะเมื่อ Resourceเจ้าของ Schemaออกแบบ Migrationไว้ถูกต้อง
แต่ถ้า Adminเขียน Definition เองไม่ครบ:
Table มี
แต่ Columns ผิด
Indexes หาย
Defaults ผิด
Error เพียงเปลี่ยนชนิด
53. Table Schema ต้องตรง Resource Version
หลัง Table ถูกสร้าง อย่าหยุดที่:
SHOW TABLES
→ พบแล้ว
ตรวจต่อ:
SHOW CREATE TABLE `table_name`;
เพราะ Table ชื่อเดียวกันสามารถมี Schema ต่าง Version ได้.
นี่เป็นเหตุผลว่าทำไม Errorถัดจาก 1146 อาจกลายเป็น:
Unknown column
Field doesn't have a default value
Data too long
Foreign key error
เมื่อ Schemaยังไม่ตรง
54. FiveM Table Doesn't Exist Checklist
ตรวจอย่างน้อย:
Error Code เป็น 1146 หรือไม่
Database Name ใน Error คืออะไร
Table Name คืออะไร
SELECT DATABASE()ได้ Database ไหนSHOW TABLESพบ Table หรือไม่SHOW TABLES LIKEพบหรือไม่Table อยู่ Database อื่นหรือไม่
information_schema.TABLESพบที่ไหนmysql_connection_string ใช้ Database ไหน
SQL ถูก Import ที่ Database ไหน
Resource มี install.sql หรือไม่
Resource มี migration หรือไม่
Migration ล่าสุดรันหรือยัง
Resource Version คืออะไร
Database Schema Version คืออะไร
Table เคยมีมาก่อนหรือไม่
Table ถูก Drop หรือไม่
Restore Database ครบหรือไม่
Import Log มี Error หรือไม่
Table Name Case ตรงหรือไม่
Prefix ตรงหรือไม่
Custom Framework Mapping ถูกหรือไม่
Resourceอื่นใช้ชื่อ Table เดิมหรือไม่
Table ถูก Rename หรือไม่
Backup ล่าสุดมี Table หรือไม่
Table มี Data สำคัญหรือไม่
Fresh Install หรือ Production
ควร Import install.sql หรือ Migration
Backup ก่อนแก้แล้วหรือไม่
SHOW CREATE TABLEตรง Official Schema หรือไม่
FiveM Table Doesn't Exist แก้อย่างไร
ใช้ลำดับนี้:
SELECT DATABASE();
ต่อด้วย:
SHOW TABLES LIKE 'table_name';
ถ้าไม่พบ ให้ตรวจ:
Connection String
Database
install.sql
Migration
Backup
Resource Version
MariaDB Error 1146 ระบุโดยตรงว่า Table ที่ Query อ้างถึงไม่พบ.
FiveM Error 1146 คืออะไร
คือ:
ER_NO_SUCH_TABLE
SQLSTATE:
42S02
พร้อมข้อความ:
Table 'database.table' doesn't exist
FiveM Table Doesn't Exist หลังติดตั้ง Script แก้อย่างไร
ตรวจ Installation Instructions และ SQL Schema ของ Resource
ถ้าเป็น Fresh Install และ Table ยังไม่มีจริง ให้ติดตั้ง Schema ที่ Resourceกำหนด
จากนั้น:
SHOW TABLES;
เพื่อตรวจว่า Tables ถูกสร้างแล้ว.
FiveM Table Doesn't Exist หลัง Update Script แก้อย่างไร
อย่า Import install.sql ทับทันที
ให้หา:
Migration
Update SQL
Upgrade Instructions
ระหว่าง Version เก่ากับ Version ใหม่
เพราะ Production Database มีข้อมูลเดิมที่ต้องรักษาไว้
FiveM Table Doesn't Exist ทั้งที่มี Table อยู่
ตรวจ:
SELECT DATABASE();
และ:
SELECT
TABLE_SCHEMA,
TABLE_NAME
FROM information_schema.TABLES
WHERE TABLE_NAME = 'table_name';
เพื่อยืนยันว่า Table อยู่ Database เดียวกับที่ FiveMใช้จริง.
FiveM Table Name ตัวใหญ่เล็กมีผลไหม
มีผลได้ตาม Environment
MariaDB ระบุว่า Case Sensitivity ของ Database/Table Names ถูกควบคุมโดย Rules ของระบบและ lower_case_table_names.
จึงควรใช้ชื่อ Table เดียวกันทุกจุด
FiveM Import SQL แล้ว Table ยังไม่ขึ้นทำอย่างไร
ตรวจ:
Import Database ถูกตัวหรือไม่
Import มี Error หรือไม่
SQL File ครบหรือไม่
CREATE TABLE Statement ถูก Execute หรือไม่
แล้วใช้:
SHOW TABLES;
ยืนยันผลจริง.
FiveM Restore Database แล้ว Table หายทำอย่างไร
ตรวจ Dump/Backup และ Restore Log
MariaDB ระบุว่า Dump Files สามารถถูก Restoreโดย Execute SQL Statements กลับเข้าสู่ Database.
หาก Table มีข้อมูลผู้เล่น อย่าสร้าง Empty Table ทับก่อนตรวจว่ากู้ข้อมูลเดิมได้หรือไม่
FiveM oxmysql Table Doesn't Exist เกิดจาก oxmysql ไหม
โดยทั่วไป Error 1146 เป็น MariaDB Error ที่ระบุว่า Tableไม่พบ ส่วน oxmysql เป็น Layer ที่ FiveMใช้ติดต่อ Database
ควรตรวจ Database Schema และ Resource Query ก่อน
แต่ต้องแน่ใจว่า oxmysql Connection Stringชี้ Database ที่ถูกต้อง และ oxmysqlถูก Startก่อน Database-dependent Resourcesตาม Setup Documentation.
FiveM เปลี่ยน Database ใน oxmysql ตรงไหน
Database อยู่ใน:
mysql_connection_string
เช่น:
database=fivem
หรือ URL Connection String ที่มีชื่อ Database
Official oxmysql Setup Documentation แสดงตัวอย่างทั้งสองรูปแบบ.
FiveM สร้าง Table เองได้ไหม
ทำได้ทาง SQL แต่ ควรใช้ Schema/Migration ที่ Resourceกำหนด
อย่าสร้างจากชื่อ Error อย่างเดียว เพราะ Resourceอาจต้องการ:
Columns
Types
Indexes
Constraints
Defaults
Relationships
เฉพาะของมัน
หลังสร้างควรตรวจ:
SHOW CREATE TABLE `table_name`;
เทียบกับ Schema ที่ถูกต้อง.
FAQ FiveM MariaDB Table Doesn't Exist
Error 1146 คืออะไร?
MariaDB Error 1146 คือ ER_NO_SUCH_TABLE หรือ Table ที่ Query อ้างถึงไม่มีอยู่ใน Database Context นั้น.
Table Doesn't Exist กับ Unknown Database เหมือนกันไหม?
ไม่ Unknown Database คือ Error 1049 ส่วน Table Doesn't Exist คือ Error 1146.
Table Doesn't Exist กับ Unknown Column เหมือนกันไหม?
ไม่ Unknown Column คือ Error 1054 หมายถึง Table มีแต่ Column ที่ Query เรียกไม่พบ.
ดูว่า FiveM ใช้ Database ไหนได้อย่างไร?
ใช้:
SELECT DATABASE();
MariaDB จะคืน Default Database ของ Session.
ดูว่า Table มีหรือไม่อย่างไร?
ใช้:
SHOW TABLES;
หรือ:
SHOW TABLES LIKE 'table_name';
ดู Table Schema อย่างไร?
ใช้:
SHOW CREATE TABLE `table_name`;
เพื่อดู Column Definitions และ Indexes ของ Table.
Table อยู่ Database อื่นตรวจอย่างไร?
ค้นผ่าน:
information_schema.TABLES
ซึ่งเก็บ TABLE_SCHEMA และ TABLE_NAME.
Update Script แล้ว Table หายต้อง Import install.sql ใหม่ไหม?
ไม่ควรทำทันที โดยเฉพาะ Production Database ควรตรวจ Migration/Upgrade SQL ของ Versionนั้นก่อน เพื่อไม่ให้ Schema/Data เดิมถูกกระทบ
Table ถูก Drop ทำอย่างไร?
ถ้ามีข้อมูลสำคัญให้ตรวจ Backup ก่อนสร้าง Empty Table ใหม่ MariaDB มี Dump และ Backup/Restore Mechanisms สำหรับ Recovery.
Table ชื่อตัวใหญ่เล็กต่างกันไหม?
อาจต่างกันตาม Environment และ lower_case_table_names.
Restart oxmysql แก้ Error 1146 ได้ไหม?
ไม่ถ้า Table ไม่มีจริง ต้องแก้ Schema/Import/Migration
mysql_connection_string เกี่ยวไหม?
เกี่ยวมาก เพราะมันกำหนด Database ที่ oxmysql เชื่อมต่อ หากชี้ผิด Database FiveMสามารถ Connect ได้แต่ไม่พบ Tables ที่ต้องการ.
ประเด็นสำคัญ
เมื่อ FiveM ขึ้น:
ERROR 1146
Table 'database.table' doesn't exist
ให้จำ Flow นี้:
1146
↓
ดู Database + Table จาก Error
↓
SELECT DATABASE()
↓
SHOW TABLES LIKE 'table'
↓
ตรวจ mysql_connection_string
↓
ตรวจว่า SQL Import ลง Database ไหน
↓
ตรวจ install.sql / migration
↓
ตรวจ Resource Version
↓
ตรวจ Backup / Restore
↓
ตรวจชื่อ Table และตัวพิมพ์เล็กใหญ่
↓
แก้ Schema ที่ต้นเหตุ
MariaDB ระบุ Error 1146 โดยตรงว่าเป็นกรณี Table ที่อ้างถึงไม่มีอยู่ และมีเครื่องมือมาตรฐานอย่าง SHOW TABLES, SHOW CREATE TABLE, DATABASE() และ information_schema.TABLES สำหรับตรวจว่า Table อยู่ที่ไหนและมี Definition อย่างไร.
สิ่งที่สำคัญที่สุดสำหรับ FiveM คือ อย่าสร้าง Empty Table เองเพียงเพราะเห็นชื่อ Table ใน Error โดยเฉพาะ Server Production เพราะ Table ที่หายอาจเคยมีข้อมูล Character, Vehicle หรือ Inventory จำนวนมาก และควรกู้จาก Backup หรือใช้ Migration ที่ถูก Version
สำหรับผู้อ่าน comsiam ให้จำสูตร “1146 = เช็ก Database ก่อน เช็ก Table ต่อ แล้วค่อยเช็ก Migration” และ comsiam แนะนำให้ยืนยัน SELECT DATABASE() กับ mysql_connection_string ทุกครั้ง เพราะหลายกรณี Table ไม่ได้หายเลย แต่ถูก Import อยู่คนละ Database กับที่ FiveM กำลังใช้งาน
Comments
Post a Comment