FiveM MySQL Data Too Long for Column Error 1406 แก้อย่างไร? VARCHAR, TEXT, JSON และ Schema ไม่ตรง Resource

 ปัญหา FiveM MySQL/MariaDB ขึ้น Data too long for column มักเกิดเมื่อ Resource พยายามบันทึกข้อมูลที่มีขนาดใหญ่กว่าที่ Column ใน Database รองรับ เช่น Character Identifier, Vehicle Plate, Phone Number, JSON, Inventory, Metadata, Business Data หรือข้อความจาก Script

ตัวอย่าง Error:

ERROR 1406 (22001): Data too long for column 'firstname' at row 1
Data too long for column 'plate' at row 1
Data too long for column 'inventory' at row 1
ER_DATA_TOO_LONG

MariaDB กำหนด Error 1406, SQLSTATE 22001 เป็น ER_DATA_TOO_LONG ซึ่งหมายถึงข้อมูลที่จะเก็บมีขนาดเกินสิ่งที่ Column รองรับ

สำหรับ FiveM ปัญหานี้ไม่ควรแก้ด้วยการเปลี่ยนทุก Column เป็น LONGTEXT หรือปิด Strict Mode ทันที เพราะบางครั้งต้นเหตุจริงคือ:

  • Resource Version ไม่ตรง Database

  • Column ถูกสร้างผิด

  • Import SQL เก่า

  • JSON โตผิดปกติ

  • Script ส่งข้อมูลผิด Field

  • Identifier Format เปลี่ยน

  • Character Data เสีย

  • Resource เก็บข้อมูลมากกว่าที่ออกแบบไว้

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

อ่านข้อความ Error → หา Column → ดูค่าจริง → ตรวจ Data Type → ตรวจ Schema จาก Resource → แก้ขนาดหรือแก้ข้อมูลต้นเหตุ → Test

① Error 1406 คืออะไร

MariaDB จะแจ้ง Error 1406 เมื่อค่าที่กำลังบันทึกมีขนาดใหญ่กว่าที่ Column สามารถรับได้

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

สมมติ Database มี:

name VARCHAR(10)

แต่ Script ส่ง:

Christopher

ซึ่งยาวเกินขนาดที่กำหนด

Database อาจ Reject Query

③ VARCHAR คืออะไร

VARCHAR คือ String Type สำหรับเก็บข้อความที่มีความยาวแปรผัน โดยกำหนดขนาดสูงสุดของ Column ไว้ใน Schema

④ ตัวอย่าง

firstname VARCHAR(50)

หมายถึง Column ถูกออกแบบให้เก็บ String ภายในขนาดที่กำหนด

⑤ ถ้าข้อมูลยาวเกิน VARCHAR จะเกิดอะไร

MariaDB ระบุว่า เมื่อ String ยาวเกิน Column VARCHAR พฤติกรรมจะสัมพันธ์กับ SQL Mode โดยใน Strict Mode สามารถเกิด Error แทนการตัดข้อมูล

⑥ Strict Mode คืออะไร

MariaDB ถือว่าเมื่อเปิด:

  • STRICT_TRANS_TABLES

  • หรือ STRICT_ALL_TABLES

จะอยู่ใน Strict Mode และ Statement ที่พยายามบันทึกข้อมูลไม่ถูกต้องบางชนิดสามารถถูก Reject แทนปล่อยผ่าน

⑦ Strict Mode เป็นสาเหตุหรือไม่

Strict Mode อาจเป็นสิ่งที่ทำให้ Error แสดงออกมาอย่างชัดเจน

แต่ต้นเหตุจริงยังอาจเป็น:

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

⑧ ควรปิด Strict Mode ไหม

ไม่ควรเป็นวิธีแรก

เพราะหาก Database ยอมตัดข้อมูลเงียบ ๆ อาจทำให้ข้อมูล FiveM เสียโดยที่คุณไม่รู้ตัว

⑨ ตัวอย่าง Plate

Schema:

plate VARCHAR(8)

แต่ Resource ส่ง:

ABC123456789

ค่ามีขนาดเกินสิ่งที่ Schema ออกแบบไว้

⑩ วิธีแก้ไม่ได้มีแค่เพิ่ม VARCHAR

ต้องถามก่อนว่า:

Plate ควรยาวขนาดนี้จริงหรือไม่?

ถ้า Resource ควรสร้าง Plate เพียง 8 ตัว แต่ Generator Bug สร้าง 12 ตัว:

  • ควรแก้ Generator

ไม่ใช่เพิ่ม Column อย่างเดียว

⑪ Error ที่ firstname

ตัวอย่าง:

Data too long for column 'firstname'

อาจเกิดจาก Character Name ยาวกว่า Schema รองรับ

⑫ ควรเพิ่ม firstname เป็น VARCHAR(255) เลยไหม

ไม่ควรรีบ

ตรวจ Resource SQL ก่อนว่า Developer กำหนดความยาวจริงเท่าไร

⑬ Error lastname ก็เหมือนกัน

ตรวจ:

  • Character Creator

  • Maximum Name Length

  • Database Schema

ให้ตรงกัน

⑭ Frontend Limit กับ Database Limit ควรตรงกัน

ถ้า Character UI อนุญาต 100 ตัวอักษร

แต่ Database รองรับ 50:

  • ผู้เล่นสามารถสร้าง Input ที่ Database บันทึกไม่ได้

⑮ Validation ควรเกิดก่อน Query

Application ควรตรวจว่า Input:

  • ยาวเกินหรือไม่

ก่อนส่ง MariaDB

⑯ Database Constraint ยังควรอยู่

เพราะเป็น Protection ชั้นสุดท้าย

⑰ Error plate หลังเปลี่ยน Vehicle Script

น่าสงสัยว่า:

  • Plate Format ใหม่

  • Schema เก่า

ไม่ตรงกัน

⑱ Error phone_number

Resource ใหม่อาจสร้างเบอร์แบบ:

555-123-4567

แต่ Schema เดิมออกแบบสำหรับเลขสั้นกว่า

⑲ อย่าแก้โดยตัดเบอร์ท้ายทิ้ง

เพราะอาจทำให้:

  • Phone Numbers ซ้ำ

  • Calls ผิดคน

⑳ ต้องแก้ Schema หรือ Generator ให้ตรงกัน

นี่คือหลักสำคัญ

㉑ Error identifier

FiveM/Framework Resource อาจใช้ Identifier ที่มีความยาวมากกว่า Schema รุ่นเก่า

㉒ ตัวอย่าง

Database เก่า:

identifier VARCHAR(40)

แต่ Resource ปัจจุบันส่ง Identifier ที่ยาวกว่า

อาจเกิด Error 1406

㉓ ต้องตรวจ Framework Migration

ก่อนเปลี่ยน Column เอง

㉔ Error citizenid

citizenid มักเป็น Internal Character Identifier ใน Framework บางประเภท

ถ้ายาวเกิน:

  • ตรวจ Generator

  • ตรวจ Schema

㉕ Error license

อย่าตัด License Identifier เพื่อให้พอดี Column

เพราะ Identifier อาจใช้ระบุ Account

㉖ ตัด Identifier มีความเสี่ยงสูง

สองค่าที่เดิมไม่เหมือนกันอาจกลายเป็นเหมือนกันหลังถูกตัด

㉗ ทำให้ Account Mapping ผิดได้

ดังนั้นควรเก็บค่าครบตาม Resource Design

㉘ Error Discord Identifier

เช่นเดียวกัน

ตรวจ Schema Version ก่อน

㉙ Error JSON คือ Case ที่พบบ่อยมาก

FiveM Resources จำนวนมากอาจเก็บข้อมูลประเภท:

  • Inventory

  • Metadata

  • Appearance

  • Vehicle Properties

ใน JSON String

㉚ JSON โตขึ้นได้เรื่อย ๆ

ถ้า Player มี:

  • Items มาก

  • Metadata มาก

  • Custom Properties มาก

String อาจใหญ่ขึ้น

㉛ VARCHAR ไม่เหมาะกับ JSON ขนาดใหญ่เสมอไป

ต้องดู Resource Schema ว่าควรเป็น:

  • VARCHAR

  • TEXT

  • MEDIUMTEXT

  • LONGTEXT

แบบไหน

㉜ TEXT คืออะไร

MariaDB มี TEXT เป็น String Data Type สำหรับข้อมูลข้อความ และมีข้อจำกัดขนาดของตัวเอง

㉝ TEXT ไม่ได้ Unlimited

สำคัญมาก

TEXT ยังมี Maximum Size

ถ้าเกินก็สามารถเกิด Error 1406 ได้

㉞ TEXT กับ VARCHAR ต่างกันอย่างไร

ทั้งสองใช้เก็บ String แต่มีคุณสมบัติด้าน:

  • Maximum Size

  • Indexing

  • Storage

แตกต่างกัน

MariaDB ระบุว่า VARCHAR สามารถทำ Full Index ได้ ในขณะที่ TEXT มีข้อจำกัดด้านการ Index ตามความยาว

㉟ จึงไม่ควรเปลี่ยนทุกอย่างเป็น TEXT

เพราะ Column บางชนิดควรยังเป็น:

  • VARCHAR

เพื่อความหมายและ Index ที่เหมาะสม

㊱ String Data Types มีหลายชนิด

MariaDB รองรับชนิดข้อความหลายแบบ เช่น:

  • CHAR

  • VARCHAR

  • TEXT

รวมถึงชนิดขนาดใหญ่กว่า

㊲ MEDIUMTEXT คืออะไร

ใช้สำหรับ String ที่ต้องรองรับข้อมูลขนาดใหญ่กว่า TEXT

แต่ควรใช้เมื่อ Resource Schema ต้องการจริง

㊳ LONGTEXT คืออะไร

รองรับข้อมูลขนาดใหญ่มากกว่าอีกระดับ

แต่ไม่ได้หมายความว่าเป็นตัวเลือกที่ดีที่สุดสำหรับทุก Field

㊴ Inventory JSON อาจเหมาะกับ TEXT Type ใหญ่กว่า

ถ้า Official Resource Schema กำหนดแบบนั้น:

  • ควรทำตาม

㊵ Error inventory หลัง Update Resource

ตรวจ Migration ก่อน

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

TEXT

ไป:

LONGTEXT

หรือ Data Model ใหม่

㊶ อย่า ALTER ก่อนดู Migration

Resource Developer อาจมี SQL Update ให้แล้ว

㊷ Error metadata

Metadata สามารถโตจาก:

  • Item Metadata

  • Character States

  • Custom Scripts

㊸ Metadata โตผิดปกติอาจเป็น Bug

ถ้า Resource append ข้อมูลเดิมซ้ำทุก Save:

JSON อาจโตขึ้นเรื่อย ๆ

㊹ เพิ่ม Column Size อย่างเดียวอาจเพียงเลื่อนปัญหา

วันนี้ 64 KB

อีกเดือนโตเป็นหลาย MB

ถ้า Bug ยัง append ต่อ

㊺ ต้องตรวจว่าข้อมูลควรใหญ่เท่าไร

เปรียบเทียบ:

  • Player ปกติ

  • Player ที่ Error

㊻ Error เฉพาะ Character เดียว

เป็นสัญญาณสำคัญ

อาจหมายถึง Character นั้นมี:

  • Inventory JSON ผิดปกติ

  • Metadata โต

  • Appearance Data เสีย

㊼ Error ทุก Character

น่าสงสัย:

  • Schema

  • Resource Version

มากกว่า Individual Data

㊽ Error เฉพาะ Player เก่า

อาจเป็น Legacy Data

㊾ Error เฉพาะ Player ใหม่

อาจเป็น New Save Format ที่ Schema เก่าไม่รองรับ

㊿ Error หลัง Framework Update

ให้ตรวจ:

  • Migration

  • Column Types

  • Resource Compatibility

ก่อน

51. Error หลัง Inventory Update

ตรวจว่า Inventory Resource เปลี่ยน:

  • Storage Format

  • Metadata Format

หรือไม่

52. Error หลัง Clothing Update

Appearance JSON อาจเปลี่ยนโครงสร้างและใหญ่ขึ้น

53. Error skin

บาง Character Systems เก็บ:

  • Model

  • Clothing

  • Face

  • Tattoos

รวมเป็น JSON

54. Appearance Data สามารถยาวมาก

โดยเฉพาะ Customization Resource ที่เก็บรายละเอียดจำนวนมาก

55. Error vehicle

Vehicle Properties อาจมี:

  • Mods

  • Colors

  • Damage

  • Extras

ใน JSON

56. Vehicle Properties ถูกเก็บใน VARCHAR สั้น

อาจเกิด 1406

57. Schema จาก Resource ใหม่อาจใช้ TEXT

จึงควรเปรียบเทียบ

58. Error trunk

ถ้า Trunk Inventory ถูกเก็บเป็น JSON ใน Column เดียว:

  • จำนวน Items

  • Metadata

อาจทำ String ใหญ่

59. Error glovebox ก็คล้ายกัน

ขึ้นกับ Inventory Architecture

60. Modern Inventory บางระบบแยก Items เป็น Rows

ไม่ได้เก็บ JSON ทั้งหมดใน Rowเดียว

ดังนั้นอย่าเดาว่า Inventory ทุก Serverเหมือนกัน

61. Resource Architecture มีผลมาก

Resourceหนึ่งใช้:

inventory JSON

อีกตัวใช้:

inventory_items table

62. วิธีแก้จึงต่างกัน

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

63. Error business_data

Business Scriptอาจเก็บ:

  • Employees

  • Stock

  • Settings

ใน JSON

64. Error society

ตรวจ Resource Schema

อย่าเปลี่ยน Typeจาก Tutorialที่ใช้ Frameworkคนละตัว

65. Error notes

Playerอาจพิมพ์ Textยาวเกิน Field

66. UIควร Limit Text

เช่น Description/Notes:

  • Max Length

ให้สอดคล้องกับ Database

67. Chat Messageก็อาจ Errorได้

ถ้า Resourceบันทึกข้อความลง Columnที่สั้นเกิน

68. Phone Messages เป็น Caseหนึ่ง

ข้อความยาวกว่าที่ Phone Databaseรองรับ

69. ใช้ VARCHAR(255) เก็บข้อความ Chat ยาว ๆ อาจไม่พอ

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

70. Tweet/Social Postก็เช่นกัน

ควรมีทั้ง:

  • UI Limit

  • Server Validation

  • Database Capacity

71. Billing Description

Invoice Descriptionยาวเกิน Schemaได้

ถ้า Playerพิมพ์ข้อความยาวมาก

72. Business Description

ร้านอาจมี Descriptionหลายร้อยตัวอักษร

Schemaต้องรองรับ Requirementนั้น

73. House Label

โดยทั่วไปควรสั้น

ถ้ามี Stringมหาศาลอาจแสดงว่า Scriptส่ง Fieldผิด

74. ส่ง JSON เข้า Column ชื่อ label

นี่อาจเป็น Query Mapping Bug

75. Error 1406 ไม่ได้แปลว่า Column เล็กเสมอไป

อาจหมายถึง:

Scriptส่งค่าผิด Column

76. ตัวอย่าง

Queryควรเป็น:

name → firstname
json → metadata

แต่ Parameter Orderผิด:

json → firstname

แน่นอนว่า firstname VARCHAR(50) จะรับ JSONไม่ได้

77. นี่สำคัญมาก

อย่าเห็น firstname Errorแล้วเพิ่ม firstnameเป็น LONGTEXTทันที

78. ตรวจ Query Parameters

โดยเฉพาะหลัง Developerแก้:

  • INSERT

  • UPDATE

79. Parameter Order ผิด

เกิดได้เมื่อ Query:

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

แต่ Codeส่ง:

metadata
firstname
lastname

ผิดลำดับ

80. ผลอาจเป็น Data Too Long

หรือ Data Type Errorอื่น

81. Debug Actual Value

ดูว่าค่าที่พยายามเข้า Columnคืออะไร

ถ้า firstname มี JSONยาวหลายพันตัว:

  • Root Causeชัดเจนว่า Mappingผิด

82. อย่า Log Password/Secrets

ตอน Debugให้แสดงเฉพาะข้อมูลจำเป็น

83. Error Message มักบอก Column

เช่น:

Data too long for column 'metadata'

ใช้ชื่อนั้นเริ่ม Search Source Code

84. Search Column ใน Resource

เช่นค้น:

metadata

ใน:

  • SQL Files

  • Server Code

  • Migrations

85. ดู CREATE TABLE

ใช้:

SHOW CREATE TABLE players;

เพื่อดู Columnจริง

86. หรือ DESCRIBE

DESCRIBE players;

87. ตรวจ Field Type

เช่น:

metadata VARCHAR(255)

แล้วเทียบกับ Official Schema

88. ถ้า Official Schema เป็น LONGTEXT

ชัดเจนว่า Databaseอาจเก่า/สร้างผิด

89. ถ้า Official Schema ก็เป็น VARCHAR(255)

แต่ Valueยาว 20,000 ตัว

น่าสงสัย Resource/Data Bug

90. อย่าแก้ Schemaโดยไม่เปรียบเทียบสองฝั่ง

Expected Schema vs Actual Schema

91. Expected Schemaมาจากไหน

ใช้:

  • Official SQL

  • Migration

  • Resource Documentation

92. Actual Schemaมาจากไหน

Database Productionจริง

93. Errorหลัง Restore Backup

อาจ Restore Schemaเก่า

แต่ Codeเป็น Versionใหม่

94. Errorหลัง Update Codeอย่างเดียว

คล้ายกัน

Databaseไม่ได้ Migrationตาม

95. Version mismatch เป็นสาเหตุสำคัญ

Codeกับ Databaseต้องเดินคู่กัน

96. ALTER TABLE ใช้ทำอะไร

MariaDB ใช้ ALTER TABLE สำหรับแก้โครงสร้าง Table เช่นเปลี่ยน Column หรือ Index

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

ALTER TABLE players
MODIFY COLUMN metadata LONGTEXT;

นี่เป็นเพียงตัวอย่าง

อย่ารันจนกว่าจะรู้ว่า Official Schemaต้องเป็นแบบนั้นจริง

98. Backupก่อน ALTER

จำเป็นสำหรับ Production

99. ALTER Column อาจใช้ทรัพยากร

โดยเฉพาะ Tableใหญ่

ควรทำช่วง Maintenance

100. อย่าปรับ Productionช่วง Peak

Charactersอาจกำลัง:

  • Save

  • Buy

  • Transfer

พร้อมกัน

101. Database Migrationควรทำก่อนเปิด Players

เหมาะกว่าแก้ขณะ Serverมีคนเล่น

102. Error 1406 กับ CHAR

CHAR ก็มี Length Limit และสามารถเกิด Data Too Long ได้เมื่อข้อมูลเกินขนาด

103. CHAR คืออะไร

เหมาะกับ Stringความยาวคงที่หรือใกล้เคียงตาม Design

104. Plateใช้ CHARได้ไหม

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

อย่าเปลี่ยน Typeโดยอาศัยบทความทั่วไป

105. VARBINARY ก็เกิด 1406ได้

MariaDBระบุว่าเมื่อข้อมูลเกินขนาด VARBINARY ภายใต้ Strict Modeสามารถเกิด Error 1406ได้เช่นกัน

106. ดังนั้น Error 1406 ไม่ใช่เฉพาะ VARCHAR

ประเด็นหลักคือ:

ค่ามีขนาดเกินสิ่งที่ Data Type/Columnรองรับ

107. LENGTH() คืออะไร

MariaDB LENGTH() ใช้วัดความยาว Stringเป็น Bytes ในโหมดปกติ ขณะที่ CHAR_LENGTH() วัดจำนวน Characters

108. ทำไมเรื่อง Bytesสำคัญ

ข้อความภาษาไทยและ Unicodeอาจใช้หลาย Bytesต่อ Character

ดังนั้น:

  • จำนวนตัวอักษร

  • จำนวน Bytes

ไม่ใช่สิ่งเดียวกัน

109. ภาษาไทย 100ตัวอักษรไม่จำเป็นต้องเท่ากับ100 Bytes

นี่สำคัญเวลา Debug String/Storage

110. ใช้ CHAR_LENGTH

เมื่อต้องการนับจำนวน Characters

111. ใช้ LENGTH

เมื่อต้องการดูขนาดใน Bytesตาม Behaviorปกติของ MariaDB

112. ตัวอย่างตรวจ

SELECT
CHAR_LENGTH(column_name),
LENGTH(column_name)
FROM table_name;

เปลี่ยนชื่อ Table/Columnให้ตรง Server

113. Emojiมีผลด้วยไหม

Unicode Charactersบางประเภทใช้หลาย Bytes

จึงควรคิดเรื่อง Character Setและ Storage

114. Character Setคืออะไร

กำหนดวิธีเก็บ Charactersใน Database

115. utf8mb4 พบได้บ่อย

รองรับ Unicodeกว้าง

แต่ Schemaของ Serverจริงเป็น Sourceหลัก

116. เปลี่ยน Character Setแก้ Error 1406ไหม

ไม่ควรทำโดยเดา

Errorอาจเกิดจาก Lengthจริงหรือ Schema mismatch

117. Row Size Too Large ต่างจาก Data Too Long

คนละ Error Family

Row Size Too Largeเกี่ยวกับขนาดโครงสร้าง Rowโดยรวม

Data Too Longมุ่งที่ค่าที่กำลังใส่ใน Columnหนึ่ง

MariaDBมีเอกสารแยกเรื่อง Row Size Too Large โดยเฉพาะ

118. เปลี่ยนทุก VARCHARเป็นใหญ่ขึ้นอาจทำ Row Size Problem

โดยเฉพาะ Tableที่มี Columnsจำนวนมาก

119. จึงต้องออกแบบ Schemaอย่างสมเหตุสมผล

ไม่ใช่:

ทุก Column = VARCHAR(5000)

120. ข้อมูล Textใหญ่ควรแยกตามลักษณะ

ถ้าข้อมูลเป็น:

  • JSON

  • Notes

  • Blob-like text

อาจต้อง Data Typeที่เหมาะกว่า

121. Data Modeling คืออะไร

การออกแบบว่า:

  • ข้อมูลอะไร

  • อยู่ Tableไหน

  • ใช้ Typeอะไร

122. FiveM Resource Ownerควรยึด Developer Schema

ถ้าไม่ได้พัฒนา Resourceเอง

123. Custom Developerควรเลือก Typeตาม Requirement

ไม่ใช่เลือก VARCHAR(255)ทุก Fieldโดยอัตโนมัติ

124. VARCHAR(255)ไม่ใช่มาตรฐานสากลสำหรับทุก String

เป็นเพียงขนาดที่พบได้บ่อยในหลายระบบ

125. Inventoryไม่ควรยัดใน VARCHAR(255)ถ้า JSONมีโอกาสโตมาก

ถ้า Architectureเลือก JSON Column

126. JSON Typeมีไหม

MariaDBมีรายละเอียดเกี่ยวกับ JSONในระบบ แต่ FiveM Resourcesอาจเลือก TEXT Storageเพื่อ Compatibility

ให้ยึด Resource Schema

127. Error JSON หลังเพิ่ม Item Metadata

Itemหนึ่งอาจมี:

  • Serial

  • Quality

  • Custom Name

  • Extra Data

เมื่อ Inventoryมีจำนวนมาก JSONขยาย

128. Inventory Scriptควรออกแบบ Capacity

ทั้ง Gameplayและ Storageต้องสอดคล้อง

129. Inventory Slot Limitไม่รับประกัน JSONเล็ก

เพราะ Metadataต่อ Itemอาจใหญ่มาก

130. Item Metadata Bugสามารถทำ JSONระเบิดได้

เช่น Metadataซ้อน Metadataเดิมทุก Save

131. ตัวอย่าง Concept

ครั้งแรก:

metadata = A

ครั้งต่อไป:

metadata = A + previous A

โตแบบผิดปกติ

132. ถ้า JSONโตทุก Save

ต้องแก้ Serialization Logic

ไม่ใช่เพิ่ม LONGTEXTต่อไปเรื่อย ๆ

133. Serialization คืออะไร

แปลง Object/Data Structureเป็น String/Formatเพื่อ Save

เช่น JSON

134. Deserialization คืออะไร

อ่าน Stringกลับเป็น Data Structure

135. Double Serialization คืออะไร

JSONถูก stringifyซ้ำ

เช่น Object:

{"name":"item"}

กลายเป็น Stringที่มี Escape Charactersซ้ำ

136. Double Serializationทำข้อมูลโต

และอาจทำ Parsingพัง

137. FiveM Metadata Errorควรตรวจ JSON Structure

โดยเฉพาะถ้า Valueดูเต็มไปด้วย:

\"\\\"

จำนวนมาก

138. Error appearance_data

Character Appearanceอาจถูก Serializeซ้ำเช่นกัน

139. Vehicle Modsก็เป็นได้

Resource Conversionผิดอาจทำ JSONใหญ่ผิดปกติ

140. ตรวจ Recordปกติกับ Recordผิด

เป็นวิธี Debugที่ดี

141. ตัวอย่าง

Playerปกติ:

metadata length = 5,000

Player Error:

metadata length = 500,000

แสดงว่าควรสงสัย Data Bug

142. อย่าเพิ่ม Columnทันทีจาก 64 KB เป็นหลาย GB

เพราะจะซ่อนต้นเหตุ

143. Error Messageมี Row Number

เช่น:

at row 1

หมายถึง Rowใน Statement/Operationที่เกิด Error ไม่จำเป็นต้องเป็น Database Primary ID = 1

144. มือใหม่มักเข้าใจผิด

row 1

ไม่ได้แปลว่า:

id = 1

เสมอไป

145. Bulk INSERTอาจมีหลาย Rows

Errorอาจบอกว่าค่าเกินใน Rowใดของ Statement

146. Import SQLใหญ่ก็เกิด 1406ได้

ถ้า Dumpมาจาก Schemaที่ Columnใหญ่กว่า Databaseปลายทาง

147. Example Migration

Source:

notes TEXT

Destination:

notes VARCHAR(255)

Importข้อความยาว:

  • Error 1406

148. Schemaต้อง Syncก่อน Data Import

ไม่ควร Import Dataเข้า Schemaที่ไม่ตรง

149. Database Mergeก็คล้ายกัน

สอง Serverอาจใช้ Resource Versionsต่างกัน

150. Mergeต้อง Normalize Schemaก่อน

ไม่เช่นนั้น Dataจาก Serverหนึ่งอาจไม่พอดีอีก Server

151. CSV Importก็เกิดได้

ถ้า Fieldยาวเกิน Column

152. Manual Data Editใน phpMyAdminก็เกิดได้

Database Ruleเหมือนเดิม

153. phpMyAdminไม่ได้ทำให้ Columnรองรับมากขึ้น

เป็นเพียง Management UI

154. HeidiSQLก็เช่นเดียวกัน

Toolไม่ใช่ต้นเหตุ

155. Errorเกิดตอน INSERT

แปลว่า Rowใหม่เข้าไม่ได้

156. Errorเกิดตอน UPDATE

หมายถึง Resourceกำลังเปลี่ยนค่าของ Rowเดิมให้ยาวเกิน Limit

157. Save Characterมักใช้ UPDATE

ดังนั้น Characterเล่นได้ช่วงหนึ่งแล้ว Errorตอน Saveก็เป็นไปได้

158. Inventoryโตระหว่าง Session

ตอน Loginยังพอดี

หลังเก็บ Itemsจำนวนมาก:

  • Saveแล้วเกิน

159. นี่ช่วยบอก Root Cause

ถ้า Errorเกิดเฉพาะตอน Disconnect:

  • ดู Save Data

160. Errorตอน Stop Resource

บาง Resources Save Cached Dataตอน Shutdown

JSONที่โตอาจ Errorตอนนั้น

161. อย่า Restartซ้ำโดยไม่แก้

เพราะทุก Restartอาจเกิด Save Errorเดิม

162. Dataล่าสุดอาจไม่ถูกบันทึก

ตรวจ Gameplay Impact

163. Errorใน Inventory Saveอาจทำ Item Rollback

เมื่อ Playerเข้าใหม่อาจเห็นข้อมูลเก่า

164. Errorใน Banking Notesอาจไม่ร้ายเท่า Balance Error

Severityขึ้นกับ Column

165. อ่าน Query Context

อย่าดูแค่ Column Name

166. ถ้า Query Save Moneyพร้อม JSON

หนึ่ง Fieldผิดอาจทำ Statementทั้งหมด Fail

167. Transactionsช่วยให้ Data Consistency

แต่ Resource Architectureต่างกัน

168. Errorหนึ่ง Fieldอาจหยุดหลาย Fields Update

จึงควรแก้เร็ว

169. Error logs table

Gameplayอาจยังทำงานแต่ Logsหาย

ยังมีผลกับ:

  • Staff Auditing

170. Discord webhook JSONไม่เกี่ยวกับ DBเสมอไป

อย่าสับสน Webhook Payloadกับ Database Column

171. Error webhook_message Column

ถ้า Resourceเก็บ Webhook Logsใน DB:

  • จึงค่อยเกี่ยว

172. TEXT Messageควรมี Limit

ป้องกัน Playerใส่ข้อความขนาดมหาศาล

173. Client-side Limitอย่างเดียวไม่พอ

Playerอาจ Bypass UIได้

Serverต้อง Validateด้วย

174. Server-side Validationสำคัญ

ก่อน Database Queryตรวจ:

  • Type

  • Length

  • Allowed Range

175. Data Too Longอาจใช้โจมตี Resourceที่ Validateไม่ดีได้

ในเชิงป้องกัน ระบบควร Reject Inputผิดปกติ

176. ไม่ควรเปิดเผยวิธี Bypass Input Validation

สำหรับ Server Ownerให้โฟกัสการป้องกัน:

  • Server Validation

  • Length Limit

177. SQL Injectionคนละเรื่อง

Parameterized Queryช่วย Security

แต่ Parameterized Queryไม่ได้แก้ Stringยาวเกิน

178. Prepared Statementยัง Error 1406ได้

ถ้าค่าจริงยาวเกิน Column

179. อย่าโทษ oxmysqlทันที

Database Bridgeเพียงส่ง Query

Root Causeอาจเป็น Resource Schema

180. oxmysql Error Messageมีประโยชน์

อาจแสดง:

  • Query

  • Parameters

  • Resource

ช่วยหา Source

181. ระวัง Logsมีข้อมูลส่วนตัว

ก่อนโพสต์ Publicควร Mask:

  • Tokens

  • Identifiersที่ไม่จำเป็น

182. Closed-source Resource

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

  • Error

  • SQL Schema

  • Official Support

183. อย่าเดาแก้ Encrypted Resource Schema

Developerควรบอก Requirements

184. Errorเกิดหลังซื้อ Scriptใหม่

ตรวจ Installation SQLให้ครบ

185. บาง Scriptมี SQL แยก Framework

เช่น:

  • ESX SQL

  • QBCore SQL

Importผิดไฟล์สามารถสร้าง Column Typeผิด

186. Config Frameworkผิดก็เช่นกัน

Scriptอาจใช้ Data Structureคนละแบบ

187. Resource Bridgeควรตรง Framework

เช่นเดียวกับ Schema

188. Errorหลัง Framework Conversion

Serverที่ย้าย ESX → QBCore หรือกลับกันต้องทำ Data Migrationจริง

ไม่ใช่ Rename Tablesอย่างเดียว

189. Character Data Formatsต่างกัน

JSON Structure/Identifiersอาจไม่เหมือน

190. Error 1406อาจเป็นเพียง Errorแรก

หลังแก้ Lengthอาจพบ:

  • Unknown Column

  • Invalid JSON

  • Duplicate Key

ถ้า Migrationทั้งหมดไม่ถูก

191. อย่า Patchทีละ Errorถ้า Root Causeคือ Resourceผิด Framework

แก้ Compatibilityทั้งชุด

192. Checklist Error 1406

  1. อ่าน Errorเต็ม

  2. หา Table

  3. หา Column

  4. ดู Actual Value

  5. ดู Column Type

  6. ตรวจ Official Schema

  7. ตรวจ Migration

  8. Backup

  9. แก้ SourceหรือSchema

  10. Test

193. ถ้า Actual Valueสมเหตุสมผลแต่ Columnเล็ก

Schemaอาจต้องเพิ่ม

194. ถ้า Actual Valueผิดปกติ

แก้ Resource/Dataก่อน

195. ถ้า Valueอยู่ผิด Field

แก้ Query Mapping

196. ถ้า Errorเฉพาะ Legacy Player

Clean/Migrate Legacy Data

197. ถ้า Errorทุก Playerหลัง Update

Run Missing Migrationหรือ Roll Forwardอย่างถูกต้อง

198. ถ้า Errorหลัง Import

เปรียบเทียบ Source/Destination Schema

199. ถ้า Errorหลังย้าย Hosting

ตรวจว่า Restore Schemaครบและตรง Version

200. ไม่ควรทำอะไร

  • ปิด Strict Modeทันที

  • เปลี่ยนทุก Columnเป็น LONGTEXT

  • ตัด Stringแบบไม่รู้ความหมาย

  • Delete Character

  • Import SQLทับ

  • ALTERหลาย Columnพร้อมกัน

201. ทำไมไม่ควรปิด Strict Modeก่อน

MariaDBระบุว่า Strict Modeทำให้การเขียนข้อมูลที่ผิดบางประเภท Failแทนการถูกตัด/ปรับเป็น Warning ดังนั้น Errorอาจช่วยป้องกัน Data Lossแบบเงียบ ๆ

202. ทำไมไม่ควรใช้ INSERT IGNORE

แม้บาง SQL Behaviorอาจเปลี่ยน Errorเป็น Warningได้ แต่การทำให้ข้อมูลถูกตัดไม่ใช่ทางแก้ที่ดีสำหรับ Identifierหรือ JSONสำคัญ

203. ตัวอย่างอันตราย

Phone Number:

555123456789

ถูกตัดเหลือ:

55512345

อาจไม่ใช่เบอร์เดิมอีกแล้ว

204. Vehicle Plateก็เหมือนกัน

ตัด Plateอาจชนกับรถอื่น

205. Character Identifierยิ่งห้ามตัดสุ่ม

Account Mappingอาจเสียร้ายแรง

206. JSONถูกตัดคืออันตรายมาก

JSONอาจกลายเป็น:

  • Invalid JSON

และ Resource Parseไม่ได้

207. JSON Truncationอาจทำ Characterโหลดไม่ได้

ดังนั้น Strict Errorบางครั้งดีกว่าบันทึก JSONครึ่งเดียว

208. Data Integrityสำคัญกว่า Queryผ่าน

หลักเดียวกับ Duplicate Entry

209. วิธีวัด Valueก่อน Insert

Developerสามารถ Validate String Lengthใน Codeก่อน Query

210. ถ้า Valueเป็น JSON

อาจตรวจ:

  • Serialized Size

  • Expected Structure

211. ถ้าเกินผิดปกติให้ Reject/Log

แทนบันทึกข้อมูลเสีย

212. Server Ownerควรดู Player Dataไหม

เฉพาะเท่าที่จำเป็นต่อ Debug และต้องจัดการข้อมูลอย่างเหมาะสม

213. Database Backupก่อน Clean Data

จำเป็น

214. อย่า DELETE Characterเพราะ JSONใหญ่

อาจสามารถ:

  • Repair

  • Migrate

เฉพาะ Fieldได้

215. แต่ต้องรู้ Structure

ถ้าไม่รู้ให้ใช้ Official Support

216. Manual JSON Editเสี่ยง

เครื่องหมาย:

"
{
}
,

ผิดเพียงจุดเดียวอาจ Parseไม่ได้

217. JSON Validatorมีประโยชน์

สำหรับ Developer/Server Ownerตรวจ Structure

แต่ข้อมูล Sensitiveไม่ควร Uploadไป Websiteสาธารณะโดยไม่จำเป็น

218. ใช้ Local Toolsปลอดภัยกว่า

สำหรับข้อมูล Productionที่ Sensitive

219. Error Data Too Longไม่ได้เกิดจาก Internet

เป็น Database/Application Problem

220. Pingไม่เกี่ยว

การเปลี่ยน DNS/VPNไม่แก้ Column Size

221. Clear FiveM Cacheไม่ใช่ Fixหลัก

เพราะ MariaDBกำลังปฏิเสธ Queryฝั่ง Server

222. Reinstall GTA Vไม่เกี่ยว

Player Clientไม่ได้กำหนด Database Column

223. Restart MySQLไม่ช่วย

ถ้า Valueเดิมยังยาวเกิน:

  • Errorเดิมจะกลับมา

224. Restart FiveMก็เช่นกัน

ถ้า Schema/Resourceยังผิด

225. Reinstall MariaDBไม่ใช่คำตอบ

อาจเสี่ยง Database Dataโดยไม่จำเป็น

226. Quick Diagnosis Matrix

อาการสงสัย
ทุก Player ErrorSchema/Migration
Playerเดียว ErrorAbnormal Data
หลัง UpdateVersion mismatch
JSON ColumnSize/Serialization
Plate/PhoneGenerator/Schema
firstname/lastnameUI Limit/Schema
Valueดูเป็น JSONใน nameParameter Mapping
Errorตอน ImportSource/Destination Schema

227. Error 1406 กับ VARCHAR Quick Fix

ตรวจ Official Schema

ถ้า Resourceกำหนด:

VARCHAR(100)

แต่ Productionเป็น:

VARCHAR(50)

Migrationอาจหาย

228. Error 1406 กับ TEXT Quick Fix

ตรวจว่า Resource Versionควรใช้:

  • TEXT

  • MEDIUMTEXT

  • LONGTEXT

อะไร

229. Error 1406 กับ JSON Quick Fix

ตรวจก่อนว่า JSON:

  • ใหญ่ตามปกติ

  • หรือโตจาก Bug

230. Error 1406 กับ Identifier Quick Fix

อย่าตัด Identifier

ทำ Columnให้ตรง Official Schema

231. Error 1406 กับ Phone Quick Fix

ตรวจ Formatและ Generator

232. Error 1406 กับ Plate Quick Fix

ตรวจ Plate Lengthและ Collision Rules

233. Error 1406 กับ Character Name Quick Fix

ปรับ:

  • UI max length

  • Server Validation

  • Database Capacity

ให้สอดคล้องกัน

234. Error 1406 กับ Description

ถ้าต้องการข้อความยาวจริงอาจต้องใช้ Text Typeที่ Resourceออกแบบไว้

235. Error 1406 กับ Logs

Log Payloadอาจใหญ่กว่าที่ออกแบบ

ควรตรวจว่ากำลัง Logข้อมูลมากเกินจำเป็นหรือไม่

236. Logทุก JSON Stateอาจทำ Databaseโตเร็ว

นอกจาก Error Lengthแล้วยังเพิ่ม Storage

237. Loggingควรเก็บข้อมูลที่จำเป็น

ไม่ใช่ Dumpทุก Objectตลอดเวลา

238. Error 1406 อาจเป็น Performance Warningทางอ้อม

ถ้า Metadataโตมหาศาล

แม้ขยาย Columnได้ Serverก็อาจ:

  • Saveช้า

  • Loadช้า

239. Large JSONทำ Queryหนักขึ้น

โดยเฉพาะถ้าบันทึกบ่อย

240. Normalize Data Modelอาจดีกว่า

สำหรับ Custom Developer หาก Dataใหญ่และ Queryเฉพาะส่วนบ่อย อาจพิจารณาแยกข้อมูลเป็น Tables

แต่เป็น Architecture Decision

241. Server Ownerไม่ควร Rewrite Resourceเพียงเพื่อ Errorเดียว

ใช้ Official Fixก่อน

242. Update Resourceถ้ามี Fix

ถ้า Developerแก้ Serialization Bugแล้ว

243. Backupก่อน Update

โดยเฉพาะ Resourceที่มี Migration

244. Changelogควรอ่าน

ค้นคำ:

  • database

  • migration

  • column

  • inventory

  • metadata

245. SQL Folderควรเก็บไว้

ใช้ตรวจ Schemaภายหลัง

246. Schema Documentationมีค่ามาก

โดยเฉพาะ Serverที่ติด Scriptsจำนวนมาก

247. จดว่า Resourceไหนแก้ Tableไหน

ลดปัญหาเวลาถอด Script

248. อย่าลบ Columnเก่าทันทีหลังเปลี่ยน Resource

ตรวจว่า Scriptsอื่นยังใช้หรือไม่

249. Database Schema Debtเกิดได้

เมื่อปรับ Columnsสุ่มตาม Errorsหลายปี

สุดท้ายไม่มีใครรู้ว่า Tableควรเป็นแบบไหน

250. วิธีลด Schema Debt

  • Official migrations

  • Version control

  • Document changes

  • Staging tests

251. Error 1406 FAQ

FiveM Data too long for column คืออะไร

หมายถึงค่าที่ Resourceพยายามบันทึกใหญ่เกิน Columnใน MariaDB รองรับ โดย Error 1406 มี SQLSTATE 22001 และชื่อ ER_DATA_TOO_LONG

Errorนี้เกิดกับ VARCHARเท่านั้นไหม

ไม่ สามารถเกี่ยวกับ String/Binary Data Typesอื่นที่มีข้อจำกัดขนาดได้ เช่น CHAR, TEXT และ VARBINARY

VARCHAR ยาวเกินเกิดอะไร

ใน Strict SQL Mode MariaDBสามารถ Rejectข้อมูลที่ยาวเกินและคืน Errorแทนการตัดค่าผ่าน

ปิด Strict Modeแก้ได้ไหม

อาจเปลี่ยน Behavior แต่ไม่ควรเป็นวิธีหลัก เพราะอาจทำให้ค่าถูกตัดและข้อมูลผิดโดยไม่แก้ Root Cause

เปลี่ยน VARCHARเป็นTEXTได้ไหม

ทำได้เมื่อ Schema/Requirementต้องการจริง แต่ไม่ควรเปลี่ยนทุก Fieldโดยอัตโนมัติ

เปลี่ยนเป็น LONGTEXTเลยดีไหม

ไม่ควรจนกว่าจะตรวจ Official Resource Schemaและ Actual Dataก่อน

TEXTเต็มได้ไหม

ได้ TEXT ก็มีข้อจำกัดขนาด และ MariaDBสามารถเกิด Error 1406เมื่อข้อมูลเกินได้

Inventoryขึ้น Data Too Longทำอย่างไร

ตรวจว่า Inventoryถูกเก็บแบบ JSONหรือ Rows, ดู Schemaที่ Resourceต้องการ และตรวจว่า JSONโตผิดปกติหรือไม่

Metadataใหญ่เกินแก้อย่างไร

ตรวจ Serializationก่อน เพราะอาจมี Bugทำข้อมูลซ้ำ/ซ้อนทุก Save

Vehicle JSONใหญ่เกินทำอย่างไร

ตรวจ Vehicle Resource Schemaและ Propertiesที่ถูก Save

Plateยาวเกินทำอย่างไร

ตรวจ Plate Generatorและ Schema ไม่ควรตัด Plateแบบสุ่ม

Phone Numberยาวเกินทำอย่างไร

ทำ Phone Format, UI Limit, Server Validationและ Database Schemaให้ตรงกัน

firstnameยาวเกินทำอย่างไร

ตรวจ Character Creator Maximum Lengthและ Schema

Identifierยาวเกินทำอย่างไร

อย่าตัด Identifier ให้ตรวจ Migration/Schemaของ Framework

Errorเกิด Characterเดียวทำอย่างไร

เปรียบเทียบขนาดและ Structureของ Fieldนั้นกับ Characterปกติ

Errorเกิดทุกคนทำอย่างไร

ตรวจ Schema/Resource Version/Migration

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

อ่าน Changelogและ Run Database Migrationที่ตรง Version

Errorเกิดหลัง Restore Backupทำอย่างไร

ตรวจว่า Database Schemaของ Backupตรงกับ Codeปัจจุบันหรือไม่

Errorเกิดตอน Import SQLทำอย่างไร

เปรียบเทียบ Source Schemaกับ Destination Schemaก่อนแก้ Data

ALTER TABLEช่วยได้ไหม

MariaDBรองรับ ALTER TABLE เพื่อแก้โครงสร้าง Columns แต่ควร Backupและใช้ Definitionที่ตรง Resourceจริง

LENGTH() กับ CHAR_LENGTH() ต่างกันอย่างไร

MariaDBระบุว่า LENGTH() วัดเป็น Bytesในโหมดปกติ ส่วน CHAR_LENGTH() วัดจำนวน Characters

ภาษาไทยมีผลไหม

ข้อความ Unicodeสามารถใช้จำนวน Bytesไม่เท่ากับจำนวน Characters จึงควรแยกสองแนวคิดนี้เวลาตรวจขนาดข้อมูล

JSONถูกตัดได้ไหม

ไม่ควรปล่อยให้ JSONสำคัญถูกตัด เพราะอาจกลายเป็นข้อมูลที่ Parseไม่ได้

Clear FiveM Cacheช่วยไหม

โดยทั่วไปไม่ใช่ Fixสำหรับ MariaDB Error 1406

Restart Databaseช่วยไหม

ไม่ ถ้าค่ากับ Schemaยังเหมือนเดิม

ต้องลบ Characterไหม

ไม่ควรเป็นวิธีแรก ควรหา Fieldและข้อมูลที่ผิดก่อน

ต้องลบ Databaseสร้างใหม่ไหม

ไม่ และมีความเสี่ยงสูงมากโดยไม่จำเป็น

สรุป FiveM MySQL Data Too Long for Column Error 1406

FiveM MySQL/MariaDB Error 1406 Data too long for column หมายถึง Resource กำลังส่งค่าที่มีขนาดใหญ่เกิน Column ที่ Database รองรับ โดย MariaDB ระบุ Error นี้เป็น ER_DATA_TOO_LONG และ SQLSTATE 22001

สาเหตุที่เจอบ่อยใน FiveM ได้แก่:

VARCHAR สั้นเกิน → Resource Update แต่ไม่ได้ Migration → JSON Inventory/Metadata ใหญ่เกิน → Identifier Format เปลี่ยน → Character Input ยาวเกิน → Parameter ถูกส่งผิด Column → Serialization Bug ทำข้อมูลโตผิดปกติ

สิ่งที่ comsiam แนะนำคืออย่าเห็น Error 1406 แล้วเปลี่ยนทุก Field เป็น LONGTEXT หรือปิด Strict Modeทันที ให้เปิด SHOW CREATE TABLE หรือ DESCRIBE ตรวจ Schemaจริง แล้วเปรียบเทียบกับ SQL/Migrationของ Resource Versionที่ใช้อยู่ จากนั้นตรวจ Actual Valueด้วยว่าเป็นข้อมูลที่ควรมีขนาดนั้นจริงหรือไม่

อีกหลักที่ comsiam แนะนำคือให้ระวัง Fieldที่เป็น Identifier, Plate, Phone Number และ JSONเป็นพิเศษ การ “ตัดให้สั้นลง” เพื่อให้ Queryผ่านอาจทำให้ Identifierผิด, รถชนกัน, Phone Numberซ้ำ หรือ JSONเสียจน Characterโหลดไม่ได้ วิธีที่ถูกต้องคือทำให้ Code + Validation + Schema + Data Format ตรงกัน และ Backup Production Databaseก่อนใช้ ALTER TABLE หรือ Cleanข้อมูลจำนวนมากเสมอ

Comments

Popular posts from this blog

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

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

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