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

ตรวจอย่างน้อย:

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

  2. Database Name ใน Error คืออะไร

  3. Table Name คืออะไร

  4. SELECT DATABASE() ได้ Database ไหน

  5. SHOW TABLES พบ Table หรือไม่

  6. SHOW TABLES LIKE พบหรือไม่

  7. Table อยู่ Database อื่นหรือไม่

  8. information_schema.TABLES พบที่ไหน

  9. mysql_connection_string ใช้ Database ไหน

  10. SQL ถูก Import ที่ Database ไหน

  11. Resource มี install.sql หรือไม่

  12. Resource มี migration หรือไม่

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

  14. Resource Version คืออะไร

  15. Database Schema Version คืออะไร

  16. Table เคยมีมาก่อนหรือไม่

  17. Table ถูก Drop หรือไม่

  18. Restore Database ครบหรือไม่

  19. Import Log มี Error หรือไม่

  20. Table Name Case ตรงหรือไม่

  21. Prefix ตรงหรือไม่

  22. Custom Framework Mapping ถูกหรือไม่

  23. Resourceอื่นใช้ชื่อ Table เดิมหรือไม่

  24. Table ถูก Rename หรือไม่

  25. Backup ล่าสุดมี Table หรือไม่

  26. Table มี Data สำคัญหรือไม่

  27. Fresh Install หรือ Production

  28. ควร Import install.sql หรือ Migration

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

  30. 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

Popular posts from this blog

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

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

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