FiveM MySQL Column Count Doesn't Match Value Count Error 1136 แก้อย่างไร? ตรวจ INSERT, Columns, VALUES และ Database Schema ให้ตรงกัน

 ปัญหา FiveM MySQL/MariaDB ขึ้น Column count doesn't match value count at row 1 มักเกิดตอน Resource พยายาม INSERT ข้อมูลลง Database แต่จำนวน Column ที่ต้องการบันทึก ไม่เท่ากับจำนวน Value ที่ถูกส่งเข้าไป

ตัวอย่าง Error:

ERROR 1136 (21S01): Column count doesn't match value count at row 1

หรือ:

ER_WRONG_VALUE_COUNT_ON_ROW

MariaDB ระบุ Error 1136, SQLSTATE 21S01 เป็น ER_WRONG_VALUE_COUNT_ON_ROW และข้อความหลักคือ Column count doesn't match value count at row

ใน FiveM ปัญหานี้มักเจอหลัง:

  • Update Resource

  • Import SQL

  • เปลี่ยน Framework

  • เพิ่ม Column ใหม่

  • แก้ INSERT Query เอง

  • Migration Database ไม่ครบ

  • Resource Version ไม่ตรง Schema

  • เพิ่ม Parameter แต่ไม่ได้เพิ่ม Column

  • เพิ่ม Column แต่ไม่ได้เพิ่ม Parameter

  • Bulk INSERT สร้าง Values ไม่เท่ากัน

หลักการแก้คือ:

อ่านข้อความ Error → หา Resource → หา INSERT Query → นับ Columns → นับ Values → ตรวจ Schema → ตรวจ Parameters → แก้ให้ตรงกัน

① Error 1136 คืออะไร

หมายถึงจำนวนข้อมูลที่ Query กำลัง Insert ไม่ตรงกับจำนวน Column ที่ Statement คาดหวัง

MariaDB ระบุ Error นี้เป็น:

1136
21S01
ER_WRONG_VALUE_COUNT_ON_ROW

② ตัวอย่างง่ายที่สุด

Query:

INSERT INTO players
(firstname, lastname, job)
VALUES ('John', 'Smith');

มี:

  • 3 Columns

  • 2 Values

จึงไม่ตรงกัน

③ รูปแบบที่ถูก

INSERT INTO players
(firstname, lastname, job)
VALUES ('John', 'Smith', 'unemployed');

ตอนใช้ INSERT ... VALUES รายการ Values ต้องสัมพันธ์กับรายการ Columns ที่ระบุ และ Values จะถูกจับคู่ตามลำดับของ Column List

④ ปัญหากลับด้านก็เกิดได้

เช่น:

INSERT INTO players
(firstname, lastname)
VALUES ('John', 'Smith', 'unemployed');

มี:

  • 2 Columns

  • 3 Values

ก็ไม่ตรงกัน

⑤ FiveM Error นี้เป็น Connection Error ไหม

ไม่

ถ้า MariaDB ตอบ Error 1136 ได้ แสดงว่า Query เดินทางไปถึง Database แล้ว

ดังนั้นอย่าเริ่มแก้ด้วย:

  • Database Password

  • Port

  • Firewall

โดยไม่มี Error อื่นสนับสนุน

⑥ Error 1136 เป็น Syntax Error 1064 ไหม

ไม่เหมือนกัน

1064

SQL Syntax ไม่ถูกต้อง

1136

โครงสร้าง INSERT อ่านได้ แต่จำนวน Columns/Values ไม่ตรงกัน

⑦ Error 1136 กับ Unknown Column ต่างกัน

Unknown Column

Resource เรียก Column ที่ Database ไม่มี

1136

จำนวน Values ไม่สัมพันธ์กับ Column List

⑧ จุดที่ควรตรวจอันดับแรก

หา Query ที่ขึ้นต้นด้วย:

INSERT INTO

หรือ:

INSERT

ใน Resource ที่ Console แจ้ง Error

⑨ ตัวอย่าง FiveM Character Creation

สมมติ Resource มี:

INSERT INTO players
(citizenid, firstname, lastname, job)
VALUES (?, ?, ?);

เห็นได้ทันทีว่า:

  • 4 Columns

  • 3 Placeholders

ผิด

⑩ ต้องแก้เป็นอะไร

ถ้าต้องบันทึกทั้ง 4 Field:

INSERT INTO players
(citizenid, firstname, lastname, job)
VALUES (?, ?, ?, ?);

และ Code ต้องส่ง Parameters 4 ค่าเช่นกัน

⑪ Placeholder คืออะไร

เช่น:

?

ใช้แทน Value ที่ Database Driver จะได้รับจาก Parameters

⑫ จำนวน ? ต้องสัมพันธ์กับ Parameters

ไม่ใช่แค่ Column Count

คุณต้องตรวจทั้ง:

Columns → Placeholders → Parameters

⑬ ตัวอย่าง

Query:

INSERT INTO players
(firstname, lastname)
VALUES (?, ?);

แต่ Code ส่ง:

John
Smith
Police

แม้ SQL String ดูถูก แต่ Database Wrapper/API อาจมี Error จาก Parameter Mapping ตาม Library ที่ใช้

⑭ ควรดู Query ที่ถูกส่งจริง

ไม่ใช่ดู Source Template อย่างเดียว

⑮ Dynamic Query ทำให้ Error 1136 ได้

เช่น Code เพิ่ม Column ตาม Config

แต่ลืมเพิ่ม Value

⑯ ตัวอย่างแนวคิด

ถ้า Config เปิด:

UsePhone = true

Code เพิ่ม:

phone_number

เข้า Column List

แต่ Values ยังเท่าเดิม

จะเกิด Count Mismatch ได้

⑰ Error หลังเปิด Feature ใหม่

จึงควรตรวจ Dynamic INSERT

ก่อนแก้ Database

⑱ Error หลัง Update Resource

เป็น Case สำคัญมาก

Resource Version ใหม่อาจเปลี่ยน:

  • Column List

  • Save Format

  • Migration

แต่ Database หรือ Custom Code ยังเป็น Version เก่า

⑲ Schema Version ไม่ตรง Code

อาจทำให้ Developer เลือกใช้:

INSERT INTO table VALUES (...)

แล้วจำนวน Values ไม่ตรงกับจำนวน Columns ปัจจุบัน

⑳ INSERT โดยไม่ระบุ Column Names เสี่ยงกว่า

ตัวอย่าง:

INSERT INTO players
VALUES (...);

เมื่อไม่ระบุ Column List จำนวน Values ต้องสัมพันธ์กับโครงสร้าง Table ที่ Statement คาดหวัง

MariaDB แนะนำในเอกสารด้าน Database Applications ว่า ควรระบุชื่อ Columns ใน INSERT เพื่อหลีกเลี่ยงปัญหาเมื่อ Schema เปลี่ยน เช่นมีการเพิ่มหรือเปลี่ยนลำดับ Column

㉑ ตัวอย่างปัญหา

เดิม Table มี:

id
firstname
lastname

Resource ใช้:

INSERT INTO players
VALUES (1, 'John', 'Smith');

ทำงาน

㉒ ต่อมา Migration เพิ่ม

job

Table กลายเป็น:

id
firstname
lastname
job

แต่ Resource เก่ายังส่ง 3 Values

จึงอาจเกิด Count Mismatch

㉓ วิธีที่แข็งแรงกว่า

ระบุ Column ที่ต้องใช้:

INSERT INTO players
(firstname, lastname)
VALUES ('John', 'Smith');

ถ้า Columns อื่นมี Default/NULL ที่รองรับ Query ก็ไม่ต้องผูกกับทุก Column ของ Table

MariaDB documentation ระบุว่าการกำหนด Column List ช่วยให้สามารถใส่ Values ตาม Columns ที่เลือก และละ Columns ที่มี Default หรือรองรับ NULL ได้

㉔ อย่าแก้ด้วยการลบ Column ใหม่

ถ้า Column นั้นเป็นส่วนหนึ่งของ Migration ที่ถูกต้อง

Resource อื่นอาจต้องใช้

㉕ อย่าเพิ่มค่าปลอมให้ครบจำนวนแบบสุ่ม

เช่นเห็นขาด 1 ค่าแล้วเพิ่ม:

''

เข้าไป

โดยไม่รู้ว่า Column นั้นหมายถึงอะไร

㉖ เพราะ Data อาจผิดเงียบ ๆ

เช่น Column ที่ขาดคือ:

citizenid

แต่คุณใส่ Empty String

Character Mappingอาจพัง

㉗ ต้องรู้ Column ที่ขาดจริง

ใช้:

DESCRIBE players;

หรือ:

SHOW CREATE TABLE players;

เพื่อตรวจโครงสร้างจริง

㉘ แต่ถ้า Query มี Column List อยู่แล้ว

ให้นับ Column Listก่อน ไม่จำเป็นต้องนับทุก Columnใน Table

㉙ ตัวอย่าง

INSERT INTO players
(firstname, lastname)
VALUES (?, ?);

แม้ Tableมี 20 Columns ก็สามารถถูกต้องได้ถ้า Columnsอื่นมี Default/รองรับการละค่าอย่างเหมาะสม

㉚ AUTO_INCREMENT Column ต้องใส่เองไหม

ไม่จำเป็นเสมอไป

หาก ID ถูกออกแบบเป็น AUTO_INCREMENT Databaseสามารถสร้างค่าต่อไปให้อัตโนมัติเมื่อ Insert โดยไม่กำหนด Columnนั้นตามรูปแบบที่เหมาะสม

㉛ ตัวอย่าง

Table:

id AUTO_INCREMENT
firstname
lastname

Query สามารถเป็น:

INSERT INTO players
(firstname, lastname)
VALUES (?, ?);

โดยไม่ส่ง IDเอง

㉜ อย่าเพิ่ม NULL เพียงเพื่อให้ครบแบบไม่เข้าใจ

แม้บาง AUTO_INCREMENT design อาจ Handle NULL ได้ แต่การระบุ Column Listให้ชัดเจนมักอ่านและดูแลง่ายกว่า

㉝ Default Value คืออะไร

ค่าที่ Database ใช้เมื่อ Insert ไม่ได้ระบุ Columnนั้น และ Schema กำหนด Defaultไว้

㉞ Columns ที่ไม่มี Default อาจเกิด Error อื่น

หลังแก้ 1136 แล้วอาจเจอ:

Field doesn't have a default value

ถ้า Queryละ Required Column

㉟ ดังนั้นอย่ามุ่งแค่ทำ Countให้เท่ากัน

ต้องให้ข้อมูลครบตาม Business Logicด้วย

㊱ FiveM Resource ที่ใช้ INSERT INTO table VALUES

ควรตรวจเป็นพิเศษหลัง:

  • Framework Update

  • Database Migration

㊲ เพราะ Schemaเปลี่ยนได้

และ Queryประเภทนี้ผูกกับ Column Orderของ Tableมากกว่า Queryที่ระบุชื่อ Columnsชัดเจน

㊳ MariaDB แนะนำให้ระบุ Column Names

เพื่อลดปัญหาเมื่อ Table Schemaเปลี่ยน

㊴ Error หลังเพิ่ม Column ด้วย phpMyAdmin

ถ้า Resourceเก่าใช้:

INSERT INTO table VALUES(...)

การเพิ่ม Columnเองสามารถทำ Queryเดิม Countไม่ตรงได้

㊵ นี่คือเหตุผลที่ไม่ควรแก้ Schemaสุ่ม

Custom Columnหนึ่งตัวอาจกระทบ Resourceเก่า

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

อาจ Scriptใช้ Schemaที่คาดไว้คนละแบบ

㊷ ตัวอย่าง

Script Documentationคาด:

players table v3

Serverจริง:

players table v1

Query/Columnsอาจไม่ตรง

㊸ ต้องตรวจ Framework Compatibility

เช่น Resource Versionหนึ่งอาจออกแบบสำหรับ Framework Schemaหนึ่งโดยเฉพาะ

㊹ ESX กับ QBCore ใช้ Schema เดียวกันหรือไม่

ไม่ควรถือว่าเหมือนกัน

ต้องใช้ Resource Adapter/Configที่ตรง Frameworkจริง

㊺ Errorหลังเลือก Frameworkผิดใน Config

Resourceอาจสร้าง:

  • Column List แบบหนึ่ง

  • Parameter Data แบบอีกแบบ

ได้

㊻ ตรวจ Framework Configurationก่อน ALTER Table

สำคัญมาก

㊼ Errorจาก Custom Bridge

Bridgeที่แปลง Dataระหว่าง Frameworkอาจลืมเพิ่ม Parameterใหม่

㊽ Resource Developerควร Testทุก Adapter

เช่น:

  • ESX

  • QBCore

  • Custom

แยกกัน

㊾ Character Creation เป็นจุดที่เจอ Error นี้บ่อย

เพราะ Insert Characterใหม่มี Fieldsจำนวนมาก เช่น:

  • Identifier

  • Name

  • DOB

  • Job

  • Position

  • Metadata

㊿ เพิ่ม Fieldหนึ่งตัวแล้วลืมแก้ VALUES

เกิดได้ง่าย

51. Example

เดิม:

INSERT INTO characters
(firstname, lastname, dob)
VALUES (?, ?, ?);

เพิ่ม:

phone

เป็น:

INSERT INTO characters
(firstname, lastname, dob, phone)
VALUES (?, ?, ?);

ผิดทันที

52. ต้องเป็น

INSERT INTO characters
(firstname, lastname, dob, phone)
VALUES (?, ?, ?, ?);

53. และ Parameters ต้องมี Phoneด้วย

SQL Stringถูกอย่างเดียวยังไม่พอ

54. Parameter Mapping สำคัญ

ตรวจว่า:

firstname → ?
lastname → ?
dob → ?
phone → ?

ตามลำดับ

55. จำนวนเท่ากันแต่ลำดับผิดจะเกิด 1136ไหม

ไม่จำเป็น

Queryอาจผ่านแต่ข้อมูลลงผิด Column

ซึ่งอันตรายกว่า Errorเสียอีก

56. ตัวอย่าง

Columns:

firstname
lastname
phone

Values:

John
5551234
Smith

Countเท่ากัน

แต่:

  • lastname = phone

  • phone = lastname

ข้อมูลผิด

57. จึงต้องเช็กทั้ง Count และ Order

MariaDB ระบุว่า Values ต้องเรียงตามลำดับ Column Listที่กำหนด

58. Bulk INSERT คืออะไร

Insertหลาย Rowsใน Statementเดียว

ตัวอย่าง:

INSERT INTO jobs
(name, label)
VALUES
('police', 'Police'),
('ambulance', 'EMS');

MariaDBรองรับการใส่หลาย Value Listsเพื่อ Insertหลาย Rowsใน Statementเดียว

59. แต่ทุก Row ต้องมีจำนวน Valuesสัมพันธ์กัน

ผิด:

INSERT INTO jobs
(name, label)
VALUES
('police', 'Police'),
('ambulance');

Rowที่สองมี Valueน้อยกว่า

60. Errorอาจบอก at row 2

จึงต้องอ่านหมายเลข Rowใน Error

61. row 2 ไม่ใช่ Database ID 2

หมายถึง Value Rowลำดับที่สองใน Statementนั้น

62. ตัวอย่าง Error

Column count doesn't match value count at row 3

ให้ตรวจ Value Groupลำดับ 3

63. Bulk Insert Generator พลาดง่าย

โดยเฉพาะ Dynamic Arrays

64. Example

บาง Item มี:

name
label
weight

บาง Item มีแค่:

name
label

ถ้า Generatorสร้าง Rowsไม่ครบ 3 Valuesทุกตัว:

  • Error 1136

65. Normalize Data ก่อน Bulk Insert

ทุก Objectควรมี Fieldsที่ Resourceต้องการครบ

66. Missing Optional Field

อาจใช้:

  • NULL

  • Default

ตาม Schemaและ Business Logic

67. แต่ต้องถูกต้องตาม Column Definition

อย่าเติม NULL ทุกกรณี

68. Bulk Item Import

พบได้ตอนติดตั้ง:

  • Inventory Items

  • Jobs

  • Vehicles

69. SQL Seed Dataสามารถมี Error1136

ถ้า Rowหนึ่งขาด Valueเพียงตัวเดียว

70. SQL Fileยาวมากต้องดู Rowที่ Error

ไม่ต้องอ่านทุก Rowตั้งแต่ต้น

71. แต่ตรวจ Rowก่อนหน้าด้วย

Comma/Parenthesisผิดก่อนหน้าอาจทำ Parserแบ่ง Rowsผิด

72. Error 1136 กับ 1064สามารถเกี่ยวกันได้

ถ้า SQL Structureเสียหนักอาจได้ Syntax Errorแทน

73. อย่ายึด Error Numberอย่างเดียว

อ่านข้อความเต็มสำคัญกว่า

74. INSERT SELECT คืออะไร

MariaDBรองรับการ Insertผลลัพธ์ของ SELECT เข้า Table ด้วยรูปแบบ INSERT ... SELECT

75. INSERT SELECT ก็ต้อง Column Countตรง

ตัวอย่าง:

INSERT INTO archive
(id, name)
SELECT id, name, job
FROM players;

Targetมี 2 Columns

SELECTคืน 3 Columns

ย่อมไม่ตรงกับสิ่งที่ Statementต้องการ

76. วิธีแก้

ถ้าต้องการแค่สองค่า:

INSERT INTO archive
(id, name)
SELECT id, name
FROM players;

77. Migration Scripts มักใช้ INSERT SELECT

เพื่อ:

  • ย้ายข้อมูล

  • Archive

  • Transform Schema

78. Error 1136หลัง Migration

ให้ตรวจ SELECT Output Countด้วย

ไม่ใช่แค่ VALUES

79. SELECT * เสี่ยงใน Migration

เพราะถ้า Source Tableเพิ่ม Column:

SELECT *

อาจคืนจำนวน Columnsมากขึ้น

80. MariaDBแนะนำให้ระบุ Columnsแทน SELECT * ใน Application Design

เพื่อลดปัญหาจาก Schema Changes

81. ตัวอย่างที่แข็งแรงกว่า

แทน:

INSERT INTO backup_players
SELECT *
FROM players;

ใช้:

INSERT INTO backup_players
(id, firstname, lastname)
SELECT id, firstname, lastname
FROM players;

82. แต่ Typesก็ต้องสัมพันธ์กันด้วย

Countตรงไม่ได้หมายความว่า Data Typeถูกเสมอ

83. หลังแก้ Countอาจเจอ Type Error

เช่น:

  • Incorrect datetime

  • Data too long

ต้องแก้ตาม Errorถัดไป

84. Error1136อาจซ่อน Errorอื่น

เพราะ Databaseหยุดตั้งแต่ Countไม่ตรง

85. แก้ทีละ Layer

  1. Column Count

  2. Types

  3. Constraints

  4. Business Logic

86. Generated Column คืออะไร

MariaDBมี Generated Columnsที่ค่าถูกคำนวณจาก Expression และ Generated Columnบางประเภทไม่สามารถถูกกำหนดค่าแบบเดียวกับ Columnทั่วไปได้

87. Schemaมี Generated Columnแล้ว Queryเก่าอาจมีปัญหา

โดยเฉพาะ Queryที่ไม่ระบุ Column Names

88. นี่เป็นอีกเหตุผลที่ควรใช้ Column List

เพื่อเลือกเฉพาะ Fieldsที่ต้อง Insertจริง

89. Trigger เกี่ยวได้ไหม

Errorอาจเกิดจาก SQLใน Triggerที่ทำ INSERTต่ออีก Tableหนึ่ง

90. FiveM Resource Queryดูถูกแต่ Errorยังเกิด

ให้ตรวจ:

  • Triggers

  • Procedures

ถ้า Database Schemaมี Custom Logic

91. แต่ Server FiveMทั่วไปควรตรวจ Resource Queryก่อน

เพราะ Triggerไม่ใช่ทุก Serverมี

92. Error Messageอาจบอก Tableของ Trigger

ช่วยแยก

93. SQL Dumpจาก Serverเก่า

อาจมี:

INSERT INTO table VALUES (...)

แต่ Restoreเข้า Schemaใหม่ที่มี Columnsเพิ่ม

จึง Error

94. Source SchemaกับDestination Schemaต้องตรงกัน

ก่อน Import Data

95. Restoreควร Restoreทั้ง SchemaและDataอย่างมีแผน

ไม่ควร Importเฉพาะ Data Dumpลง Schemaคนละ Version

96. Errorหลัง Copy Rowsด้วย phpMyAdmin

อาจ Target Tableมี Columnsไม่เท่า Source

97. Database Mergeก็เป็น Caseสำคัญ

Server A:

players 20 columns

Server B:

players 23 columns

Copy SELECT * ตรง ๆ ไม่ปลอดภัย

98. ต้อง Map Columnsชัดเจน

เช่น:

A.firstname → B.firstname
A.lastname → B.lastname

99. Migrationไม่ควรพึ่ง Positionอย่างเดียว

เพราะ Columnsอาจเรียงต่างกัน

100. Explicit Mappingปลอดภัยกว่า

โดยเฉพาะ Databaseที่ Customมาหลายปี

101. Errorหลัง Add Custom Column

สมมติคุณเพิ่ม:

vip_level

ลง players

Resourceเก่าใช้:

INSERT INTO players VALUES (...)

อาจ Errorทันที

102. วิธีแก้ที่ดีกว่า

แก้ Resource Queryให้ระบุ Column Names

หรือใช้ Migration/Resource Versionที่รองรับ Custom Schemaจริง

103. ไม่ควรลบ vip_levelถ้า Featureต้องใช้

เพียงเพราะ Queryเก่าไม่ได้เขียนดี

104. แต่ถ้า Columnเพิ่มโดยไม่จำเป็น

Rollback Custom Changeอาจเป็นทางเลือกหลัง Backup

105. ต้องรู้ Source of Truth

  • Resource Code

  • Official SQL

  • Production Schema

106. Errorหลัง Add Job Column

Custom Job Scriptอาจเพิ่ม:

job2

แล้ว Core Resourceเก่ายิง INSERT VALUES

เกิด Count Mismatch

107. Multi-job Scriptsต้องระวัง

มักแก้ Core Tables

108. Multi-character Scriptsก็เช่นกัน

อาจเพิ่ม:

  • charid

  • slot

  • metadata

109. Phone Scriptsอาจเพิ่ม Phone Column

ต้องตรวจ Core Character Insertด้วย

110. Housing Scriptsบางตัวไม่ควรต้องแก้ Players Table

ขึ้นอยู่กับ Architecture

อย่า Copy SQLจาก Scriptอื่น

111. Framework Modificationสะสมทำให้ Errorง่าย

เพราะ Schemaเริ่มต่างจาก Default

112. Schema Debt คืออะไร

การแก้ Databaseซ้ำ ๆ จน:

  • ไม่มี Documentation

  • Resource Versionsไม่ชัด

  • Columns Customจำนวนมาก

113. Error1136เป็นสัญญาณหนึ่งของ Schema Debt

โดยเฉพาะ INSERT VALUESเก่า

114. วิธีลดปัญหา

  • ระบุ Column Names

  • ใช้ Migrations

  • Version Control Schema

  • Document Custom Columns

115. Custom Developerควรหลีกเลี่ยง INSERT INTO table VALUES(...)

เมื่อ Tableมีโอกาสเปลี่ยน

MariaDB guidanceเองแนะนำให้ระบุ Column Namesใน INSERTเพื่อป้องกันผลจากการเปลี่ยน Schema

116. Error1136จาก Seed Jobs

ตัวอย่าง:

INSERT INTO jobs
(name, label, whitelisted)
VALUES
('police', 'Police');

ขาดค่า:

whitelisted

117. ควรใช้ Defaultได้ไหม

ถ้า Columnมี Defaultและคุณไม่ต้องการกำหนดค่า:

อย่าระบุ Columnนั้นใน Column List

เช่น:

INSERT INTO jobs
(name, label)
VALUES
('police', 'Police');

118. ดีกว่าใส่ค่าเดา

เพราะ Databaseจะใช้ Defaultที่ Schemaกำหนด

119. DEFAULT Keyword ใช้ได้ไหม

SQLมีวิธีใช้ Defaultในบางบริบท แต่สำหรับ FiveM Resourceทั่วไป การระบุ Columnsอย่างชัดเจนมักอ่านง่ายกว่า

120. NULL กับ Missing Valueต่างกัน

Missing Columnจาก INSERT

Databaseใช้ Default/NULLตาม Schema

Explicit NULL

กำหนดค่าเป็น NULLโดยตรง

ไม่เหมือนกันเสมอไป

121. อย่าใช้ Empty Stringแทน Missingทุกครั้ง

'' คือ Stringว่าง

ไม่ใช่:

  • NULL

  • Default

122. FiveM JSON Fields

ถ้าขาด Valueของ:

metadata

อย่าใส่:

''

ถ้า Resourceคาด JSON

123. อาจต้องเป็น

{}

หรือ NULL หรือ Default

ขึ้นอยู่กับ Resource

124. Inventory Fieldsก็เช่นกัน

ต้องใช้รูปแบบที่ Resourceออกแบบไว้จริง

125. Errorจาก SQL Migrationที่เพิ่ม Columnsหลายตัว

ถ้า Migrationเปลี่ยน Tableแต่ Code Updateไม่ครบ:

  • Error1136เกิดได้

126. CodeกับMigrationต้อง Deployเป็นชุดเดียวกัน

สำคัญสำหรับ Production

127. Update Codeก่อน Migration

อาจทำให้ Codeใหม่คาด Schemaใหม่แต่ Databaseยังเก่า

128. Migrationก่อน Codeก็อาจมีปัญหา

ถ้า Codeเก่าใช้ INSERT VALUESที่ผูกกับ Column Countเดิม

129. จึงต้องดู Update Orderที่ Developerกำหนด

บาง Migrationต้องทำระหว่าง Maintenance

130. Maintenance Windowมีประโยชน์

เพราะลดเวลาที่:

  • Code Versionหนึ่ง

  • Schemaอีก Versionหนึ่ง

ทำงานพร้อมกัน

131. Zero-downtime Migrationซับซ้อนกว่า

Serverทั่วไปไม่จำเป็นต้องออกแบบเองถ้าไม่มีความต้องการ

132. Backupก่อน Migration

ควรทำเสมอสำหรับ Production

133. Partial Migration

ถ้า Migrationเพิ่ม Columnบางตัวสำเร็จแล้ว Errorตรงกลาง

Resourceเก่าอาจเริ่มขึ้น 1136

134. อย่า Run SQL Fileซ้ำทันที

ตรวจ Schema Stateก่อน

135. เพราะอาจเจอ:

  • Duplicate Column

  • Duplicate Key

ตามมา

136. SHOW CREATE TABLEช่วยมาก

SHOW CREATE TABLE your_table;

ใช้เปรียบเทียบกับ Official Schema

137. DESCRIBEช่วยนับ Columns

DESCRIBE your_table;

แต่ต้องรู้ว่า Queryใช้ Column Listหรือไม่ด้วย

138. SHOW COLUMNS ก็ใช้ตรวจโครงสร้างได้

Database Toolsหลายตัวมี UIให้ดูเช่นเดียวกัน

139. อย่านับ Columnsใน phpMyAdminอย่างเดียวถ้า Queryระบุ Column List

เพราะ Countที่ต้องตรงคือ Listใน Query

140. วิธีนับ Query

ตัวอย่าง:

INSERT INTO users
(a, b, c, d)
VALUES (?, ?, ?, ?);

นับ:

  • a = 1

  • b = 2

  • c = 3

  • d = 4

Values:

  • ? = 1

  • ? = 2

  • ? = 3

  • ? = 4

ถูก

141. Queryยาว 30 Columns

Formatหลายบรรทัดช่วยนับ

INSERT INTO players (
    identifier,
    firstname,
    lastname,
    job,
    metadata
)
VALUES (
    ?,
    ?,
    ?,
    ?,
    ?
);

142. One Column Per Lineช่วย Debugมาก

เห็น Missing Valueง่าย

143. Formatไม่กระทบ SQL Logic

แต่เพิ่ม Maintainability

144. Resource Queryหนึ่งบรรทัดยาวมาก

ควร Reformatใน Development Environmentก่อนแก้

145. อย่าเปลี่ยน Production Sourceโดยไม่ Backup

โดยเฉพาะ Paid/Custom Resources

146. Git Diffช่วยหาได้

ถ้า Errorเริ่มหลัง Commitล่าสุด

ดูว่า:

  • Columnเพิ่ม

  • Parameterเพิ่ม/หาย

ตรงไหน

147. Version Controlมีประโยชน์มากกับ SQL

เพราะ Changeเพียงหนึ่ง Fieldก็สร้าง Error1136ได้

148. Console Stack Trace

ดู:

  • Resource

  • File

  • Line

ช่วยหา INSERTเร็วขึ้น

149. Example

@myphone/server.lua:125

เปิดบรรทัดแถว 125

150. Search Error Columnไม่ได้ช่วยเสมอ

1136อาจไม่บอกชื่อ Column

จึงต้องดู Queryเต็ม

151. Database Resource Loggingมีประโยชน์

อาจแสดง SQL Statementที่ Fail

152. ระวัง Parametersใน Logs

อาจมีข้อมูล:

  • Player identifiers

  • Personal data

ก่อนโพสต์ Publicควร Maskส่วนที่ไม่จำเป็น

153. Passwordไม่ควรอยู่ใน Error Report

อย่าโพสต์ Connection Stringเต็ม

154. Error1136จาก Closed-source Resource

ถ้าไม่เห็น Query:

  • ใช้ Official Support

  • Resource Version

  • Database Schema

เป็นหลัก

155. ส่ง Errorเต็มให้ Developer

พร้อม:

  • Resource Version

  • Framework

  • Database Engine/Version

  • สิ่งที่เพิ่ง Update

โดยไม่ส่ง Credentials

156. อย่าแก้ Tableให้เข้ากับ Errorแบบเดา

Closed-source Resourceอาจมี Migrationที่คุณไม่ได้ Run

157. Errorหลัง Resource Escrow Update

ตรวจ SQL/Migration Filesที่มากับ Package

158. Resource SQL Fileคนละ Version

อาจเป็นต้นเหตุ

Code v4 + SQL v3ไม่ควรใช้ร่วมกันโดยไม่ Migration

159. Errorหลัง Rollback Resource

ถ้า Schemaถูก Upgradeไปแล้วแต่ Codeกลับเป็น Versionเก่า:

  • INSERT VALUESเก่าอาจ Countไม่ตรง

160. Rollbackต้องคิดถึง Databaseด้วย

Code Rollbackอย่างเดียวไม่พอเสมอไป

161. Database Backupก่อน Updateจึงสำคัญ

ช่วยย้อน Code+Schemaให้ตรง Versionเดิม

162. Error1136ใน FiveM Phone

อาจเกิดตอนสร้าง:

  • Phone account

  • Contact

  • Message

หาก Phone Resource Schemaเปลี่ยน

163. Error1136ใน Garage

อาจเกิดตอนซื้อรถ/Saveรถใหม่

ถ้า Owned Vehicle Tableมี Custom Columnsเพิ่ม

164. Error1136ใน Housing

อาจเกิดตอนสร้าง Property Ownership Record

165. Error1136ใน Business

อาจเกิดตอน:

  • Create Business

  • Add Employee

166. Error1136ใน Billing

อาจเกิดตอน Insert Invoice Record

167. Error1136ใน Banking

อาจเกิดตอนสร้าง Transaction History

168. Error1136ใน Inventory

อาจเกิดตอน Insert Item Rowsแบบ Bulk

169. Error1136ใน Jobs

มักเกิดตอน Import/Seed:

  • jobs

  • grades

170. Error1136ใน Whitelist

อาจเกิดตอนเพิ่ม Identifierพร้อมข้อมูลประกอบ

171. Error1136ใน Ban System

เช่น Resourceเพิ่ม Field:

  • reason

  • expires

  • staff

แต่ INSERTยังเป็น Versionเก่า

172. Errorเฉพาะ Featureหนึ่ง

โฟกัส Table/Resourceของ Featureนั้น

ไม่ต้อง Reset Databaseทั้งหมด

173. Errorทุก Characterใหม่

น่าสงสัย Core Character INSERT

174. Characterเก่า Loginได้แต่สร้างใหม่ไม่ได้

ยิ่งชี้ไปที่:

  • INSERT creation query

มากกว่า SELECT Login

175. Errorตอน Saveแต่ไม่ตอน Create

ตรวจ INSERT ที่ Resourceใช้สร้าง Sub-recordใหม่ตอน Save

เช่น Transaction/Inventory Records

176. UPDATEเกิด 1136ได้ไหม

ข้อความ Column count mismatchมักสัมพันธ์กับ Value Rowใน INSERT-style operations มากกว่า

ถ้า UPDATEผิดโครงสร้างมักได้ Errorอื่น

177. อย่าค้นเฉพาะ UPDATE

เมื่อเห็น 1136ให้หา INSERTก่อน

178. INSERT ... SET มีไหม

MariaDBมีรูปแบบ Insertหลายแบบ แต่ FiveM Resourcesส่วนใหญ่อาจใช้ Column List+Values

ให้ดู Queryจริง

179. Resourceใช้ Object Insert API

Database Wrapperบางตัวอาจสร้าง SQLให้

ถ้า Object Mappingผิด:

  • Generated SQLอาจ Error

180. ORM/Query Builder

อาจซ่อน SQLจาก Developerระดับบน

ควร Log Generated Queryตอน Debug

181. Generated Queryคือ Source of Truth

เพราะ Databaseเห็น Queryสุดท้าย

182. Bulk Query Builder

ต้องทำให้ทุก Rowมี Keysชุดเดียวกันหรือ Mappingที่ Libraryรองรับ

183. Objectหนึ่งขาด Property

อาจทำ Value Countไม่เหมือน Rowsอื่น

184. Example

Row 1:

name, label, weight

Row 2:

name, label

Bulk Generatorที่ไม่ Handle Missing Fieldอาจสร้าง SQLผิด

185. Normalize Objectsก่อน Build SQL

ให้ Fieldsครบตาม Schema

186. Optional Dataใช้ Explicit Mapping

ดีกว่า Object Keysแบบสุ่ม

187. JavaScript Object Property Orderควรพึ่งไหม

สำหรับ Database Mappingควรกำหนด Columnsชัดเจน

ไม่ควรพึ่ง Dynamic Object Structureโดยไม่ตรวจ

188. Lua Tableก็เช่นกัน

หาก Build Queryจาก Table Keysแบบ Dynamicต้องกำหนด Mappingชัด

189. Dynamic Array Placeholder Generation

ถ้ามี 5 Columnsต้อง Generate 5 Placeholdersต่อ Row

190. Off-by-one Bug คืออะไร

Loopสร้างจำนวน Placeholderมาก/น้อยกว่าหนึ่ง

เกิด Error1136ได้

191. ตัวอย่างแนวคิด

ต้องการ 5:

?, ?, ?, ?, ?

แต่ Generatorสร้าง:

?, ?, ?, ?

192. Unit Testช่วยได้

Custom Developerควร Test:

  • 1 Row

  • หลาย Rows

  • Optional Fields

193. Database Integration Testยิ่งดี

Run Queryกับ Schemaจริงของ Test Environment

194. Dev Databaseควร Schemaเหมือน Production

ไม่เช่นนั้น Queryอาจผ่าน Devแต่ Fail Production

195. Productionมี Custom Columnมากกว่า Dev

เป็นสาเหตุ Classicของ INSERT INTO table VALUES

196. Schema Drift คืออะไร

Dev, Staging และ Productionมี Schemaไม่เหมือนกัน

197. ลด Schema Drift

ใช้:

  • Migration Files

  • Version Tracking

198. อย่าแก้ Productionด้วย phpMyAdminแล้วไม่บันทึก Migration

ไม่เช่นนั้น Devไม่รู้การเปลี่ยนแปลง

199. Schema Driftทำให้ Errorหลัง Deployยากมาก

เพราะ Codeถูก Testกับ Tableคนละโครงสร้าง

200. Resource Installation Guideสำคัญ

อย่าข้าม Step SQL Migration

201. Error1136หลังเพิ่ม Generated Column

Queryเก่าที่ใช้ VALUESทุก Columnอาจต้องปรับ

202. Generated Columnไม่ควรได้รับค่าทั่วไปแบบ Columnปกติในหลายกรณี

MariaDB documentationระบุว่า Generated Columnถูกสร้างจาก Expressionแทนค่าที่ Applicationกำหนดโดยตรง

203. Queryใหม่ควรระบุ Fieldsที่เขียนจริง

อีกเหตุผลให้ใช้ Explicit Column List

204. Error1136กับ AUTO_INCREMENT

ถ้าเพิ่ม Auto Increment IDใหม่ด้านหน้า Table

Queryเก่าแบบ:

INSERT INTO table VALUES(...)

อาจต้องเปลี่ยน

205. ไม่ควร Hardcode IDใหม่

ถ้า Databaseควร Generateเอง

206. MariaDB AUTO_INCREMENT

ใช้สำหรับสร้างค่า Uniqueต่อเนื่องให้ Columnตาม Schema และสามารถรับค่า Generatedจาก INSERTได้

207. Error1136หลังเพิ่ม Timestamp Columns

เช่น:

created_at
updated_at

ถ้า Queryใช้ INSERT VALUESทุก Columnอาจ Countเปลี่ยน

208. ถ้า Timestampมี Default

Explicit Column Listช่วยละ Fieldได้

209. ไม่ต้องส่ง NOW()ทุกครั้งถ้า Schemaจัดการ Defaultเอง

แต่ต้องดู Resource Logicจริง

210. อย่าปรับ Defaultเพื่อหลบ Errorโดยไม่เข้าใจ

เพราะ created_at และ updated_at อาจมี Meaningต่างกัน

211. Error1136หลัง Add Soft Delete

Schemaอาจเพิ่ม:

deleted_at

Resourceเก่าไม่รู้ Columnนี้

Explicit Columnsลดผลกระทบถ้า Fieldมี Default/NULL

212. Legacy Scriptsมีความเสี่ยงมากกว่า

โดยเฉพาะ Scriptที่เขียน Queryแบบ:

INSERT INTO some_table VALUES (...)

213. Modernize Query

ถ้าคุณควบคุม Sourceได้:

ระบุ Columnsชัดเจน

214. แต่ Third-party Scriptควร Patchตาม Official Updateก่อน

เพราะ Custom Patchอาจถูกเขียนทับ

215. Document Custom Patch

ถ้าจำเป็นต้องแก้เอง

จด:

  • File

  • Query

  • Resource Version

216. Error1136ไม่ควรใช้ INSERT IGNORE แก้

INSERT IGNOREมีหน้าที่เปลี่ยน Handlingของ Errorsบางประเภท ไม่ได้ทำให้จำนวน Columns/Valuesผิดกลายเป็น Queryที่ถูกต้องตาม Design

217. ON DUPLICATE KEY UPDATE ก็ไม่เกี่ยว

ใช้จัดการ Duplicate Key

ไม่ใช่ Column Count

218. REPLACE ก็ไม่ใช่คำตอบ

ถ้า Countของ Valuesยังผิดก็ไม่ได้แก้ Root Cause

219. อย่าผสม Error274กับ277

274

Duplicate Entry

277

Wrong Value Count

คนละเรื่อง

220. Error275ก็คนละเรื่อง

1406

ข้อมูลยาวเกิน Column

1136

จำนวน Valuesไม่ตรง

221. Error276

1064

SQL Syntaxผิด

222. Database Error Map

1062 → Duplicate Entry
1064 → SQL Syntax
1136 → Column/Value Count
1292 → Invalid Value/Datetime
1406 → Data Too Long

223. วิธีแก้เร็วที่สุดเมื่อเห็น 1136

  1. Copy Query

  2. Formatหลายบรรทัด

  3. นับ Columns

  4. นับ Values/Placeholders

  5. ดู Rowที่ Error

  6. ตรวจ Parameters

224. ถ้า Queryไม่ระบุ Columns

ตรวจ Table Schemaแล้วเปลี่ยน Queryให้ระบุ Columnsหาก Resource Designอนุญาต

225. ถ้าเป็น Third-party Resource

อย่า Rewriteเองทันที

ตรวจ Migration/Updateก่อน

226. ถ้า Errorหลังคุณเพิ่ม Columnเอง

นั่นเป็นเบาะแสสำคัญมาก

ตรวจ Resourcesที่ใช้ INSERT INTO table VALUES

227. ถ้า Errorหลัง Update Framework

ตรวจ Migration Order

228. ถ้า Errorหลัง Restore

ตรวจ Backup Schema Version

229. ถ้า Errorเฉพาะ Bulk Import

ดู Value Rowตามหมายเลขใน Error

230. ถ้า Errorเฉพาะ Rowหนึ่ง

Rowนั้นอาจขาด Fieldจาก Generator

231. Error1136 FAQ

FiveM Column count doesn't match value count คืออะไร

หมายถึง INSERT กำลังให้จำนวน Values ไม่ตรงกับจำนวน Columns ที่ Statementคาดไว้ โดย MariaDBใช้ Error 1136 / SQLSTATE 21S01 / ER_WRONG_VALUE_COUNT_ON_ROW

at row 1 หมายถึง ID 1ไหม

ไม่ หมายถึง Value Rowลำดับหนึ่งใน Statementที่กำลัง Insert ไม่ใช่ Primary Key ID = 1

แก้อย่างไรเร็วที่สุด

นับ:

  • Columns

  • Values

  • Placeholders

  • Parameters

ให้ตรงกัน

มี 4 Columns ต้องมี 4 Valuesไหม

หาก Column Listระบุ 4 Columns แต่ละ Rowใน VALUESควรให้ค่าแก่ Columnsทั้ง 4 ตามลำดับ

Tableมี 20 Columns ต้องส่ง20 Valuesไหม

ไม่จำเป็นถ้า Queryระบุ Column Listเฉพาะ Fieldsที่ต้อง Insert และ Columnsอื่นสามารถใช้ Default/NULLตาม Schemaได้

INSERT INTO table VALUES(...) เสี่ยงไหม

มีความเปราะบางกว่าเมื่อ Schemaเปลี่ยน เพราะไม่มี Explicit Column List; MariaDB guidanceแนะนำให้ระบุ Column Namesเพื่อหลีกเลี่ยงปัญหาเมื่อโครงสร้าง Tableเปลี่ยน

Errorเกิดหลังเพิ่ม Columnทำอย่างไร

ตรวจ Resourcesที่ Insert Tableนั้น โดยเฉพาะ Queryที่ไม่ได้ระบุ Column Names

Errorเกิดหลัง Update Resource

ตรวจ Database Migrationและ Resource Version

Errorเกิดหลัง Framework Update

ตรวจว่า Schemaและ Resourcesทั้งหมดรองรับ Framework Versionใหม่

Errorเกิดหลัง Import SQL

ตรวจ Value Rowตามหมายเลขที่ Errorแจ้ง และดูว่าแต่ละ Rowมีจำนวน Valuesเท่ากันหรือไม่

Bulk INSERTทำ Error1136ได้ไหม

ได้ หาก Value Listใน Rowใด Rowหนึ่งมีจำนวนข้อมูลไม่ตรงกับ Column List

INSERT SELECTทำ Errorได้ไหม

ได้ ถ้าจำนวน Columnsที่ Targetต้องการไม่สัมพันธ์กับจำนวน Expressions/Columnsที่ SELECTส่งกลับ

SELECT * ควรใช้ Migrationไหม

ควรหลีกเลี่ยงเมื่อ Source/Target Schemaอาจเปลี่ยน การระบุ Columnsชัดเจนช่วยลดปัญหา Schema Changes

AUTO_INCREMENTต้องส่ง Valueไหม

ไม่จำเป็นเสมอไป หาก Columnถูกออกแบบให้ Databaseสร้างค่าเองและ Queryละ Columnนั้นอย่างถูกต้อง

เพิ่ม NULLให้ครบได้ไหม

ไม่ควรทำแบบสุ่ม ต้องดูว่า Columnนั้นรองรับ NULLและความหมายข้อมูลถูกต้องหรือไม่

เพิ่ม Empty Stringให้ครบได้ไหม

ไม่ควร เพราะ Empty Stringไม่เท่ากับ NULLหรือ Default

ลบ Columnให้ Countตรงได้ไหม

ไม่ควร ถ้า Columnเป็นส่วนหนึ่งของ Schemaที่ Resourceอื่นต้องใช้

เปลี่ยน Database Passwordช่วยไหม

ไม่ เพราะ Errorนี้เกิดหลัง Queryไปถึง Databaseแล้ว

Clear FiveM Cacheช่วยไหม

โดยทั่วไปไม่ใช่ Fixของ Database Error 1136

Restart MariaDBช่วยไหม

ไม่ หาก Queryยังส่งจำนวน Valuesผิด

Restart FiveMช่วยไหม

ไม่แก้ Source Queryที่ผิด แต่หลังแก้ Resource Codeอาจต้อง Reload/Restartตามระบบ

ต้องลบ Databaseไหม

ไม่ควรอย่างยิ่ง Error1136ส่วนใหญ่แก้ได้ที่ Query, Migrationหรือ Schema Compatibility

Errorเฉพาะ Characterใหม่คืออะไร

ตรวจ Character Creation INSERT

Characterเก่าเล่นได้แต่สร้างใหม่ไม่ได้

ยิ่งควรตรวจ Queryที่สร้าง Characterใหม่

Errorตอนซื้อรถ

ตรวจ Garage/Vehicle Ownership INSERT

Errorตอนเพิ่ม Item

ตรวจ Inventory Bulk Insert/Item Row Mapping

Errorตอนสร้าง Business

ตรวจ Business Record Insert

Errorหลัง Rollback Resource

Database Schemaอาจยังเป็น Versionใหม่ แต่ Codeถูกย้อนเป็น Versionเก่า

วิธีป้องกันในอนาคต

ใช้:

  • Explicit Column Lists

  • Database Migrations

  • Schema Version Control

  • Test Environment

สรุป FiveM MySQL Column Count Doesn't Match Value Count Error 1136

FiveM MySQL/MariaDB Error 1136 Column count doesn't match value count at row เกิดเมื่อจำนวน Values ที่ Resource พยายาม INSERT ไม่สัมพันธ์กับจำนวน Columns ที่ Statement ต้องการ โดย MariaDB กำหนด Error นี้เป็น ER_WRONG_VALUE_COUNT_ON_ROW และ SQLSTATE 21S01

ตัวอย่างที่ควรจำ:

INSERT INTO players
(firstname, lastname, job)
VALUES ('John', 'Smith');

ผิดเพราะ:

3 Columns → 2 Values

ส่วน:

INSERT INTO players
(firstname, lastname, job)
VALUES ('John', 'Smith', 'police');

มีจำนวนและลำดับ Valuesสัมพันธ์กับ Column List ตามรูปแบบ INSERT ของ MariaDB

สิ่งที่ comsiam แนะนำคือ ถ้าเจอ Error นี้หลัง Update FiveM Resource, Framework หรือ Database Schema อย่ารีบลบ Columnหรือใส่ค่า NULL/Empty Stringเพื่อให้จำนวนครบ แต่ให้หา Queryต้นทางแล้วตรวจ Column List → Placeholders → Parameters → Schema Version เพราะ Errorอาจเป็นสัญญาณว่า Codeกับ Databaseกำลังใช้คนละ Version

อีกหลักที่ comsiam แนะนำคือสำหรับ Custom FiveM Resources ควรหลีกเลี่ยงการเขียน INSERT INTO table VALUES(...) โดยไม่ระบุ Column Names เมื่อ Tableมีโอกาสถูก Migrationหรือเพิ่ม Fieldsในอนาคต การระบุ Columnsให้ชัดเจนช่วยลดความเปราะบางเมื่อ Schemaเปลี่ยน และ MariaDBเองก็แนะนำแนวทางนี้สำหรับ Database Applications

Comments

Popular posts from this blog

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

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

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