FiveM MySQL Data Truncated for Column Error 1265 แก้อย่างไร? ตรวจ ENUM, DECIMAL, Data Type และค่าที่ถูกตัดก่อนเข้า Database
ปัญหา FiveM MySQL/MariaDB ขึ้น Data truncated for column หรือ Error 1265 หมายความว่า Database พบว่าค่าที่กำลังนำไปเก็บใน Column ไม่สามารถถูกเก็บได้ตรงตามรูปแบบหรือความละเอียดที่ Column นั้นกำหนดไว้ และข้อมูลบางส่วนอาจต้องถูกตัด แปลง หรือไม่สามารถรับค่าได้
MariaDB ระบุ Error 1265, SQLSTATE 01000 เป็น WARN_DATA_TRUNCATED พร้อมข้อความ:
Data truncated for column '...' at row ...
โดยตรง.
ใน FiveM Error นี้อาจพบกับข้อมูลอย่าง:
- Vehicle State
- Job Status
- Invoice Status
- ENUM
- DECIMAL
- Price
- Weight
- Coordinates
- Year
- Character Data
- Phone Data
- Imported SQL
- Legacy Database
- Resource Migration
สิ่งสำคัญคือ Error 1265 ไม่ได้หมายความว่า Database เสีย และไม่ควรแก้ด้วยการปิด Strict Mode หรือเปลี่ยน Column ทุกตัวเป็น VARCHAR ทันที
หลักการแก้คือ:
อ่านข้อความ Error → หา Column → ดู Actual Value → ตรวจ Data Type → ตรวจ Resource Schema → ตรวจว่าค่าถูกตัดเพราะอะไร → แก้ Code/Data/Schema ให้ตรงกัน
① FiveM Error 1265 คืออะไร
MariaDB กำหนด Error 1265 เป็น:
WARN_DATA_TRUNCATED
และใช้ข้อความ:
Data truncated for column 'column_name' at row N
เพื่อบอกว่าค่าของ Column ถูกตัดหรือไม่สามารถถูกแปลงเข้ากับชนิดข้อมูลตามที่คาดไว้ได้อย่างสมบูรณ์.
② Data Truncated แปลว่าอะไร
คำว่า Truncated หมายถึงข้อมูลบางส่วน:
- ถูกตัด
- สูญเสียความละเอียด
- ถูกแปลงแล้วไม่ตรงทั้งหมด
- ไม่ตรงกับค่าที่ Column ยอมรับ
ต้องดู Data Type ของ Column ประกอบ
③ Error 1265 ไม่เหมือน Error 1406
Error 1406
Data too long for column
มักหมายถึงข้อมูลยาวเกิน Capacity ของ Column
Error 1265
Data truncated for column
มีความหมายกว้างกว่า และสามารถพบกับการแปลงข้อมูลบางชนิด เช่น DECIMAL, ENUM หรือ Date/Year บางรูปแบบได้.
④ Error 1265 ต่างจาก 1264 อย่างไร
บทความก่อนหน้า:
1264
Out of range value
ค่าตัวเลขสูงหรือต่ำเกิน Range
1265
Data truncated
ค่าถูกตัดหรือไม่สามารถแปลงได้ตรงตาม Definition ของ Column
MariaDB แยก Error 1264 และ 1265 เป็นคนละ Error Code.
⑤ ตัวอย่าง DECIMAL
สมมติ Column:
price DECIMAL(10,2)
แล้ว Resource ส่งค่าที่มีจำนวนทศนิยมเกินสิ่งที่ Column ถูกออกแบบไว้
Database อาจต้อง Round/Truncate ความละเอียดของตัวเลข
MariaDB documentation แสดงกรณี DECIMAL ที่สามารถเกิด Warning 1265 เมื่อค่ามี Fractional Precision ไม่ตรงกับ Definition ของ Column.
⑥ DECIMAL คืออะไร
DECIMAL ใช้เก็บตัวเลขแบบ Exact Fixed-point
มักเหมาะกับข้อมูลที่ต้องควบคุม:
- Precision
- Scale
อย่างชัดเจน เช่นค่าทางการเงินหรือค่าที่ต้องการความแน่นอนด้านทศนิยม.
⑦ DECIMAL(10,2) หมายถึงอะไรแบบง่าย
แนวคิดคือ:
- จำนวนหลักทั้งหมดมี Limit
- จำนวนหลักหลังจุดทศนิยมมี Limit
เช่น:
123.45
เก็บทศนิยม 2 ตำแหน่ง
⑧ ถ้า Resource ส่ง 123.4567
Database ต้องจัดการกับทศนิยมส่วนเกินตาม Behavior ของ Type/SQL Mode
จึงอาจเกิด Data Truncated Warning/Error ในบาง Context.
⑨ FiveM Price อาจเจอได้ไหม
ได้ ถ้า Resource เก็บ:
price
เป็น DECIMAL แต่ Code ส่งค่าที่มี Precision ต่างจาก Schema
⑩ ตัวอย่าง
Resource คำนวณ:
1499.999999
แต่ Database รองรับ:
2 decimal places
ควรตรวจว่า Price Logic ตั้งใจให้มีทศนิยมกี่ตำแหน่ง
⑪ อย่าเพิ่มทศนิยมทันที
ต้องถามก่อนว่า:
เกมควรใช้ราคาที่ละเอียดถึง 6 ตำแหน่งจริงหรือไม่?
⑫ FiveM Economy หลายระบบไม่จำเป็นต้องมีทศนิยม
แต่ไม่ใช่กฎสากล
Resource บางตัวอาจใช้:
- Integer
- DECIMAL
แตกต่างกัน
⑬ ให้ใช้ Official Schema เป็นหลัก
ไม่ควร Copy:
DECIMAL(20,8)
จาก Server อื่นมาใช้เพียงเพราะ Error หาย
⑭ ENUM เป็นอีก Case สำคัญ
MariaDB documentation แสดงว่าการ Insert ค่าที่ไม่ได้อยู่ในชุดที่กำหนดของ ENUM สามารถเกิด Error 1265 ได้.
⑮ ENUM คืออะไร
ENUM คือ String Type ที่อนุญาตเฉพาะค่าที่กำหนดไว้ล่วงหน้า
เช่น:
status ENUM('active','inactive')
⑯ Resource ส่งค่าอื่นจะเกิดอะไร
เช่น:
pending
แต่ ENUM มีแค่:
activeinactive
Database อาจ Reject หรือแสดง Data Truncated ตาม SQL Mode/Context.
⑰ FiveM ใช้ ENUM กับอะไรได้บ้าง
Custom Resources อาจใช้กับ:
- status
- vehicle state
- invoice status
- business status
- transaction type
แต่ไม่ใช่ทุก Resource ใช้ ENUM
⑱ ตัวอย่าง Garage
Schema:
state ENUM('stored','out','impounded')
แต่ Resource ส่ง:
garage
ค่าดังกล่าวไม่ได้อยู่ใน ENUM
⑲ อย่าเพิ่ม garage เข้า ENUM ทันที
ก่อนถามว่า:
Resource ควรส่ง garage จริงหรือส่งผิด Variable?
⑳ Parameter Mapping ผิดสามารถทำ 1265 ได้
ตัวอย่าง Query:
INSERT INTO vehicles(state, garage)VALUES (?, ?);
แต่ Parameters ถูกส่งสลับ:
state = legiongarage = stored
ถ้า state เป็น ENUM:
-
legionอาจไม่อยู่ใน Values ที่ยอมรับ
㉑ Database Error จึงเป็นปลายเหตุ
ต้นเหตุอาจอยู่ใน:
- Parameter Order
- Variable Mapping
- Configuration
㉒ Error หลังเปลี่ยน Garage Script
นี่เป็น Case ที่ควรสงสัยมาก
Garage เก่าอาจใช้:
state = 0/1/2
แต่ Garage ใหม่ใช้:
stored/out/impounded
หรือกลับกัน
㉓ Schema ต้องตรง Resource ใหม่
ไม่ควรใช้ Database Table จาก Script เก่าโดยไม่มี Migration
㉔ Errorหลังเปลี่ยน Phone Script
Phone Resource อาจใช้:
statustyperead_state
ในรูปแบบต่างกัน
㉕ Errorหลังเปลี่ยน Billing
Invoice Status อาจเปลี่ยนจาก:
0 / 1
เป็น:
pending / paid
หรือกลับกัน
㉖ Resource Conversion ต้องมี Data Migration
ไม่ใช่แค่เปลี่ยน Folder Script
㉗ Error 1265 กับ YEAR
MariaDB documentation แสดงตัวอย่างว่า String Date ที่ไม่เหมาะกับ YEAR สามารถเกิด Error 1265 ได้.
㉘ YEAR คืออะไร
เป็น Date/Time Data Type สำหรับเก็บปี
ไม่ใช่ Date String เต็ม
㉙ ตัวอย่างผิด
Column:
YEAR
แต่ Resource ส่ง:
2026-08-17
นี่เป็นคนละรูปแบบข้อมูล
㉚ ถ้าต้องเก็บวันเกิดเต็ม
อาจควรเป็น:
DATE
ตาม Schema ที่ Resource ออกแบบ
㉛ อย่าเปลี่ยน YEAR→VARCHARทันที
ตรวจ Resource Requirement ก่อน
㉜ Character Date of Birth
Character Resources บางตัวเก็บ DOB เป็น:
- DATE
- VARCHAR
- String JSON
ต่างกัน
㉝ Copy Character SQL ข้าม Framework เสี่ยง
ESX/QBCore/Custom Resources อาจใช้:
- Field Names
- Data Types
ต่างกัน
㉞ Errorหลัง Framework Conversion
DOB เป็นหนึ่งใน Fields ที่ควรตรวจ
㉟ Error 1265 กับ SQL Mode
MariaDB อธิบายว่าเมื่อ Strict Mode ไม่ทำงาน Database สามารถปรับ Invalid Values เช่นตัด String หรือปรับ Numeric Value แล้วออก Warning แทน Errorได้.
㊱ Strict Mode ทำอะไร
ช่วยให้ข้อมูลที่ไม่ถูกต้องบางประเภท:
- ถูก Reject
แทนการถูก Database ปรับเงียบ ๆ
㊲ ควรปิด Strict Modeเพื่อแก้1265ไหม
ไม่ควรเป็นวิธีแรก
เพราะ Error/Warning อาจกำลังบอกว่า Resource ส่งค่าที่ไม่ตรง Schema
㊳ ถ้าปิด Strict Modeแล้ว Errorหาย
ไม่ได้หมายความว่า Dataถูกต้อง
Databaseอาจเพียง:
- ตัด
- ปรับ
- Convert
ค่าแล้วบันทึกต่อ.
㊴ ตัวอย่างอันตราย
Resourceตั้งใจบันทึก:
state = impounded
แต่ ENUMไม่รองรับ
Databaseปรับไปค่าอื่น
Garageอาจคิดว่ารถอยู่ Stateหนึ่ง แต่ Databaseเก็บอีก State
㊵ Data Integrity เสียได้
โดยไม่มี Errorแดงชัดเจน
㊶ Error1265จึงไม่ควรถูก Ignore
โดยเฉพาะ Fieldsสำคัญ เช่น:
- Money
- State
- Ownership Status
- Ban State
㊷ Errorเฉพาะ Playerหนึ่ง
อาจเกิดจาก:
- Legacy Data
- Abnormal Character Data
㊸ Errorทุก Player
น่าสงสัย:
- Schema
- Resource Version
- Config
ระดับระบบ
㊹ Errorเฉพาะ Characterเก่า
อาจ Dataเก่าใช้ Valueที่ Resourceใหม่ไม่รองรับ
㊺ Example
Old:
vehicle_state = garage
New:
vehicle_state = stored
Legacy Rowsยังเป็น:
garage
㊻ Migrationต้องแปลงค่า
ไม่ควรปล่อย Resourceใหม่เจอ Valuesเก่าเรื่อย ๆ
㊼ Errorเฉพาะ Characterใหม่
ตรวจ:
- Creation Flow
- New INSERT Query
- Config
㊽ Errorตอน Login
Resourceอาจ Convert Legacy Dataตอนโหลดแล้วบันทึกกลับผิด Type
㊾ Errorตอน Save
ตรวจ Valuesที่ Resourceกำลัง UPDATE/INSERT
㊿ Errorตอนซื้อรถ
ตรวจ:
- state
- price
- finance data
- garage data
51. Errorตอนเก็บรถ
Vehicle Stateเป็น Fieldที่ควรตรวจอันดับต้น ๆ
52. Errorตอน Impound
Resourceอาจใช้:
impounded
แต่ Schema ENUMไม่รองรับ
53. Errorตอน Banking
ถ้า Columnเป็น DECIMAL:
ตรวจ:
- amount
- balance
- fee
54. Errorตอน Billing
ตรวจ:
- amount precision
- invoice status
55. Errorตอน Business
ตรวจ:
- balance
- percentage
- status
56. Errorตอน Restaurant
Price/Tax/Discount Fieldsอาจใช้ DECIMAL
57. Errorตอน Property
Rent/Mortgage Fieldsอาจใช้ Numeric Precisionแตกต่างตาม Resource
58. Errorตอน Fuel
Fuelอาจเก็บ:
- Integer
- Decimal
ตาม Script
59. Fuel 65.374827
ถ้า Databaseรองรับแค่ทศนิยมจำกัด:
อาจถูกปรับ/ตัด
60. ต้องถามว่า Fuelต้องละเอียดแค่ไหน
เกมอาจไม่ต้องการทศนิยมจำนวนมาก
61. Roundที่ Applicationดีกว่าไหม
ถ้า Resource Designกำหนด Precisionชัด:
- สามารถ Normalizeก่อน Query
62. แต่ห้าม Roundทุก Numeric Valueสุ่ม
เช่น Coordinatesต้องการ Precisionมากกว่า Priceในบางระบบ
63. Coordinates
Custom Logging/Property Resourcesอาจเก็บ:
- x
- y
- z
เป็น DECIMAL
64. Precision ต่ำเกิน
ตำแหน่งอาจถูกตัดทศนิยมมากเกินไป
65. ผลคือ Teleport/Property Positionคลาดเคลื่อน
แม้ Errorไม่เกิดทุกครั้ง
66. Schemaควรรองรับ Precisionตาม Feature
67. Error1265กับ FLOAT/DOUBLE
Numeric Conversion/Roundingมี Behaviorต่างจาก DECIMAL
แต่ถ้า Errorระบุ Columnให้ดู Typeจริงก่อน
68. อย่าเปลี่ยน DECIMAL→FLOATเพียงเพื่อ Warningหาย
เพราะ Exactnessต่างกัน
69. Moneyมักต้องการความแน่นอน
หากระบบใช้ทศนิยมจริง:
DECIMALอาจเป็น Designที่ตั้งใจ
70. Game Coordinateอาจใช้ Floating Type
ขึ้นกับ Resource
71. Error SQL Import
1265พบได้ตอน:
- Import Legacy Data
- Restore Database
- Convert Resource
72. Source SchemaกับDestination Schemaไม่ตรง
เป็นสาเหตุสำคัญ
73. Example
Source:
status VARCHAR(50)
Destination:
status ENUM('active','inactive')
Sourceมี:
pending
Importไปไม่ได้ตาม Definitionใหม่
74. ต้องทำ Data Mapping
เช่นตัดสินว่า:
pending
ควรกลายเป็น Stateใด
ตาม Resourceใหม่
75. ห้าม Mapแบบเดา
เพราะ Statusอาจมีผล:
- Billing
- Ownership
- Jobs
76. Migration Guideจาก Developerดีที่สุด
โดยเฉพาะ Third-party Resource
77. Errorหลัง Restore Backup
Backupอาจมาจาก Versionเก่า
แต่ Code/Schema Productionเป็น Versionใหม่
78. Version Pairสำคัญอีกครั้ง
ต้องสอดคล้อง:
Code + Schema + Existing Data
79. Errorหลัง Rollback Resource
ตรงกันข้าม:
Databaseอาจมี Valuesจาก Versionใหม่ที่ Codeเก่าไม่เข้าใจ
80. Database Migrationไม่ใช่แค่เพิ่ม Column
บางครั้งต้อง Transform Valuesด้วย
81. Transform Data คืออะไร
แปลง:
old representation
ไป:
new representation
82. Example
Old:
status = 0
New:
status = active
ต้องมี Mappingที่ Resourceกำหนด
83. ENUM Migrationต้อง Clean Values
ก่อนบังคับ ENUMชุดใหม่
84. หา Valuesทั้งหมดก่อน
เช่นแนวคิด:
SELECT DISTINCT statusFROM your_table;
ใช้กับ Tableจริงเพื่อดูว่าปัจจุบันมี Valuesอะไร
85. DISTINCTช่วยอะไร
ทำให้เห็นชุด Valuesที่มีอยู่โดยไม่ต้องอ่านทุก Row
86. ตรวจว่า Valueไหนไม่อยู่ใน ENUMใหม่
จากนั้นค่อยวาง Migration
87. Backupก่อน UPDATE Values
จำเป็นสำหรับ Production
88. อย่า UPDATEทั้งหมดเป็น active
เพียงเพราะเป็น Valueที่ผ่าน
Statusเดิมแต่ละ Recordอาจต่างกัน
89. Error1265กับ ENUMเป็นสัญญาณ Data Contractที่ดี
Databaseกำลังป้องกันค่าที่ระบบไม่รู้จัก
90. อย่าลบ ENUMทันที
เพียงเพื่อให้รับ Stringอะไรก็ได้
91. เปลี่ยน ENUM→VARCHARดีไหม
บาง Architectureอาจเลือก VARCHARเพื่อความยืดหยุ่น
แต่ไม่ควรเปลี่ยน Third-party Schemaเองโดยไม่รู้ Code
92. ENUMมีข้อดี
จำกัด Valuesที่สามารถบันทึก
ช่วย Data Integrity
93. VARCHARยืดหยุ่นกว่า
แต่ Validationต้องอยู่ Applicationมากขึ้น
94. เลือกตาม Resource Design
ไม่ใช่ Error Messageอย่างเดียว
95. Error1265กับ DECIMALเป็นสัญญาณ Precision mismatch
คำถามคือ:
- Column precisionถูกไหม
- Calculationถูกไหม
96. Example Tax
Resourceคำนวณ:
7.125%
แต่ Column:
DECIMAL(...,2)
จะเก็บความละเอียดไม่ครบ
97. ต้องตัดสิน Business Precision
เช่น Taxควร:
- 2 decimal places
- 3 decimal places
ตามระบบ
98. อย่าขยาย Scaleไป 20เพียงเพื่อไม่มี Warning
ยิ่ง Precisionสูง:
- Dataใหญ่ขึ้น
- Logicซับซ้อนขึ้น
โดยไม่จำเป็น
99. Roundใน UIไม่เท่ากับ Roundใน Database
UIอาจแสดง:
7.13
แต่ Backendยังส่ง:
7.1250000001
100. Normalizeก่อน Save
ถ้า Resourceกำหนด Scaleชัด
101. แต่ควรทำจุดเดียว
หลีกเลี่ยง:
- Roundซ้ำหลายชั้น
- Clientหนึ่งรอบ
- Serverอีก
- Databaseอีก
102. Money Rounding Bug
หลาย Layers Roundต่างกันสามารถทำ:
- Balanceไม่ตรง
- Taxรวมไม่ตรง
103. Server-sideเป็นจุดที่ดีในการกำหนด Business Value
ก่อน Database
104. Databaseยังทำหน้าที่ Validate
สองชั้นช่วยกัน
105. Error1265กับ Character DOB
ถ้า Fieldเป็น YEARแต่ UIส่ง Full Date:
Root Causeอาจเป็น Schema/Data Model mismatch
106. ถ้า Resourceต้อง Ageอย่างเดียว
อาจไม่ควรเก็บ DOBเต็ม
แต่ Resource Designเป็นผู้กำหนด
107. อย่าแก้ UIให้ส่งเฉพาะปีโดยเดา
ถ้า Scriptsอื่นต้องใช้วันเกิดเต็ม
108. Error1265กับ Date Migration
Date String Formatผิดอาจนำไปสู่ Conversion Problems
แต่ถ้าข้อความเป็น Incorrect datetime value จะควรดู Error1292ร่วมด้วย
109. อ่าน Error Codeและข้อความคู่กัน
อย่าค้นแค่คำว่า:
database error
110. Error Matrix
| Error | ความหมายหลัก |
|---|---|
| 1048 | Column cannot be NULL |
| 1062 | Duplicate Entry |
| 1064 | SQL Syntax |
| 1136 | Column/Value count mismatch |
| 1264 | Out of range |
| 1265 | Data truncated |
| 1292 | Incorrect value/datetime |
| 1364 | No default value |
| 1366 | Incorrect value for field |
| 1406 | Data too long |
MariaDB มี Error Codesแยกกันสำหรับสถานการณ์เหล่านี้.
111. Error1265อาจเป็น WarningหรือError
MariaDBใช้ชื่อ WARN_DATA_TRUNCATED และ Behaviorจริงอาจขึ้นกับ Statement, Data Type และ SQL Mode.
112. ถ้า Consoleขึ้น Warningต้องสนใจไหม
ควรสนใจ
เพราะข้อมูลอาจถูกเปลี่ยนจากสิ่งที่ Resourceตั้งใจ
113. Warningไม่เท่ากับปลอดภัย
โดยเฉพาะ:
- State
- Price
- Balance
- Identifiers
114. วิธีดู Warningsใน SQL
หลัง Statementบางประเภทสามารถใช้:
SHOW WARNINGS;
เพื่อดูรายละเอียด Warning
115. แต่ใน FiveM Runtime
Database Resourceอาจ Log Warningให้เห็นใน Consoleอยู่แล้ว
116. อย่าปิด Warning Loggingทันที
ก่อนรู้ว่ามันเกิดจากอะไร
117. Warning Spamมีผลไหม
อาจทำ:
- Logsโต
- Errorสำคัญถูกกลบ
ดังนั้นควรแก้ Source
118. Resourceหนึ่งยิง1265ทุกTick
ควรหาว่า Queryไหนถูกเรียกวนซ้ำ
119. อย่า Disable Database Resourceทั้ง Server
ถ้า Errorมาจาก Optional Resourceเดียว
120. หา Caller Resource
ดู:
- Console Prefix
- Stack Trace
- Query
121. Search Column Name
ถ้า Errorบอก:
status
ค้น status ใน Resource
122. Search INSERT/UPDATE
หา Queryที่เขียน Fieldนั้น
123. ตรวจ Parameters
ดู Actual Valueที่ถูกส่ง
124. ถ้า Valueดูแปลกมาก
เช่น Column status ได้ JSON:
- Parameter Mappingผิด
125. Example
status = {"x":1,"y":2}
แต่ statusเป็น ENUM
นี่ไม่ใช่ปัญหา ENUMเล็ก
แต่เป็น Query Mapping Bug
126. จำนวน Parametersถูกก็ยัง Mappingผิดได้
เหมือน Errorsก่อนหน้า
127. Debug Chain
Error 1265↓Column↓Type↓Actual Value↓Parameter↓Variable↓Source Data
128. นี่คือ Workflowที่เร็ว
129. Error1265ใน SQL Seed
เปิด SQL Fileที่ Error
ดู Rowที่ระบุ:
at row 5
130. row 5 ไม่ได้หมายถึง Primary ID 5
อาจหมายถึง Value Rowใน Statement
131. Bulk INSERT
หนึ่ง Rowสามารถมี Valueไม่ตรง ENUM/Precisionแม้ Rowsอื่นถูก
132. Example
INSERT INTO jobs (status)VALUES('active'),('inactive'),('enabled');
ถ้า ENUMมีแค่:
activeinactive
Rowสามเป็นปัญหา
133. Resource SQLเก่าอาจใช้ Valueที่ถูกลบจาก Versionใหม่
Migrationต้อง Map
134. Error1265เฉพาะบาง Job
Job Configนั้นอาจใช้ Statusผิด
135. Errorเฉพาะบาง Vehicle
Vehicle Config/Legacy Rowอาจมี Stateผิด
136. Errorเฉพาะบาง Invoice
Statusจาก Legacy Billing Systemอาจไม่ตรง
137. Errorเฉพาะบาง Business
Custom Status/Tax Precisionอาจต่าง
138. Errorเฉพาะ Priceหนึ่งตัว
Config Priceอาจมีทศนิยม/ค่าผิด
139. Errorทุก Price
Schemaอาจไม่ตรง Resource
140. ตรวจ Production Schema
ใช้:
SHOW CREATE TABLE your_table;
141. หรือ:
DESCRIBE your_table;
142. ดู:
- Type
- Null
- Default
143. ถ้า Columnเป็น ENUM
SHOW CREATE TABLEจะช่วยเห็น Valuesที่ยอมรับ
144. ถ้าเป็น DECIMAL
จะเห็น Precision/Scale
145. ถ้าเป็น YEAR/DATE
เห็น Typeจริง
146. เปรียบเทียบ Official SQL
ถ้า Productionต่าง:
- Migrationอาจไม่ครบ
147. Official Schemaเป็น Sourceสำคัญที่สุด
สำหรับ Third-party Resource
148. Changelogช่วยได้
ค้นคำ:
- database
- schema
- enum
- decimal
- migration
149. Update Resourceโดยไม่อ่าน Migration
เป็นสาเหตุของ Database Errorsหลายแบบ
150. Backupก่อน Migration
จำเป็น
151. Error1265หลัง ALTER TABLE
MariaDB documentationมีตัวอย่างกรณี Schema Changeที่สามารถก่อ Error1265เมื่อข้อมูลเดิมไม่เข้ากับ Constraint/Definitionใหม่.
152. แปลว่า ALTERเองก็ต้องตรวจ Existing Data
ไม่ใช่แค่ INSERTใหม่
153. เปลี่ยน VARCHAR→ENUM
ต้องเช็ก Valuesเก่าทั้งหมด
154. เปลี่ยน DECIMAL Scale
ต้องเช็ก Precisionของ Dataเก่า
155. เปลี่ยน DATE/Temporal Constraints
ต้องตรวจ Existing Dates
156. Schema Migrationอาจ Failก่อนเปิด Resource
ควรแก้ Migrationให้ครบก่อนเริ่ม Gameplay
157. Partial Migrationอันตราย
Statementsก่อนหน้าอาจสำเร็จแล้ว
Statementที่เกิด1265หยุด
Databaseจึงครึ่งเก่าครึ่งใหม่
158. อย่ารัน Migrationซ้ำทันที
ตรวจ Stateก่อน
159. อาจเกิด Error Duplicate Columnตามมา
เพราะ Columnsบางตัวถูกเพิ่มไปแล้ว
160. Backupช่วย Rollback
ถ้า Migrationผิด
161. Stagingช่วยมาก
โดยเฉพาะเปลี่ยน:
- ENUM
- Numeric Precision
- Core Character Table
162. Test Dataควรมี Legacy Values
ไม่ใช่แค่ Recordใหม่
163. Migrationที่ผ่าน Empty Databaseอาจ Fail Production
เพราะ Productionมีข้อมูลเก่าที่ Testไม่มี
164. Copy Production Schema/Dataแบบปลอดภัยมาทดสอบ
เหมาะกับ Serverใหญ่
แต่ต้องปกป้องข้อมูลผู้เล่น
165. ไม่ควร Upload Database Dump Public
มี:
- Character Data
- Identifiers
ที่ไม่ควรเปิดเผย
166. Error1265กับ Data Import
ก่อน Importให้ตรวจ:
Source Type → Destination Type
167. Source DECIMAL Scaleมากกว่าDestination
อาจเกิด Truncation
168. Source VARCHAR→Destination ENUM
ค่าที่ไม่อยู่ใน ENUMจะมีปัญหา
169. Source Full Date→Destination YEAR
อาจเกิด Conversion Error/Truncation
170. Explicit Mappingสำคัญ
อย่าใช้:
SELECT *
ในการ Migrationซับซ้อน
171. Map ColumnsและConvert Valuesชัดเจน
ลดความผิดพลาด
172. Error1265หลัง CSV Import
CSVมี:
- Text
- Numbers
- Empty Fields
ที่อาจไม่ตรง Schema
173. Import Toolไม่ได้รู้ Business Logic
ต้อง Clean Dataก่อน
174. Empty Stringเข้า ENUM
สามารถเป็น Caseหนึ่งที่ควรตรวจ
175. ENUMมี Empty Value Behaviorเฉพาะ
MariaDB documentationอธิบายว่าค่า invalidใน ENUMภายใต้ non-strict behaviorสามารถถูกเก็บเป็น special empty value โดยมี index 0 ซึ่งต่างจาก ENUM memberที่อาจถูกกำหนดเป็น empty stringจริง.
176. นี่เป็นเหตุผลไม่ควรปิด Strict Mode
เพราะ Invalid Stateอาจกลายเป็น Empty ENUM Value
177. Resourceอาจไม่รู้ว่าเกิด Conversion
178. แล้ว State Logicพังภายหลัง
179. ENUM Value 0 ไม่เหมือน String "0"
ต้องระวัง Internal Enumeration Indexกับ Actual Value
180. Server Ownerทั่วไปไม่ต้องจัดการ ENUM Indexเอง
ให้ใช้ Valuesตาม Official Resource
181. Error1265กับ DECIMAL Rounding
MariaDBสามารถออก Warning1265ในกรณีที่ Fractional Digitsถูกตัด/ปัดตาม Scale.
182. Resource Developerควร Roundเองไหม
ถ้า Business Rulesกำหนดชัด:
- ได้
เพื่อให้ค่าที่ Databaseได้รับตรงกับ Intent
183. Example Money
ถ้าระบบต้อง 2 Decimal:
10.999
อาจ Normalizeก่อน Saveตาม Rounding Policyของระบบ
184. Rounding Policyต้องคงที่
อย่าใช้:
- Floorบางที่
- Roundบางที่
- Ceilบางที่
กับ Moneyโดยไม่มีเหตุผล
185. Billing Totalsอาจคลาดเคลื่อน
ถ้าแต่ละ Layer Roundต่างกัน
186. Database Scaleควรตรง Application Scale
ช่วยลด Warning
187. Error1265กับ Percent
Tax Rate:
7.125
แต่ Schemaรองรับ:
2 decimals
ต้องกำหนดว่า:
7.13
หรือ Representationอื่นตาม Design
188. อย่าใช้ Floatแบบสุ่ม
เพียงเพราะต้องการ Decimal
189. Error1265กับ Year
MariaDBตัวอย่างชัดเจนว่า '2013-12-12' ถูกส่งเข้า YEAR สามารถได้ Error1265.
190. ถ้าเห็น Error DOBใน YEAR
ตรวจว่ากำลังส่ง:
- ปี
- Full Date
อะไร
191. Errorหลัง Character Creatorใหม่
UIใหม่อาจส่ง:
YYYY-MM-DD
แต่ DBเก่าเก็บ:
YEAR
192. Resource Migrationอาจเปลี่ยน DOB Type
ต้อง Update Schemaตาม Version
193. อย่าตัด Stringเหลือ 4ตัวแบบสุ่ม
ถ้า Scriptsอื่นต้องใช้ Full DOB
194. Error1265กับ Generated Columns
MariaDB documentationมีตัวอย่าง Warning1265ที่เกิดกับ Generated Column Contextบางประเภทด้วย.
195. FiveMทั่วไปมี Generated Columnไหม
ไม่จำเป็น
จึงอย่าเริ่ม Debugจุดนี้ถ้า Schemaไม่มี
196. ตรวจ SHOW CREATE TABLEก่อน
จะเห็นว่า Columnเป็น:
- Normal
- Generated
197. Triggerก็อาจเกี่ยว
Queryของ Resourceอาจดูถูก แต่ Database Triggerเขียนค่าต่อไปยัง Tableอื่นแล้วเกิด1265
198. ถ้า Resource Queryไม่ตรงกับ Columnใน Error
ตรวจ:
- Trigger
- Generated Column
เป็นขั้นถัดไป
199. แต่เริ่มจาก Resource Queryก่อนเสมอ
เพราะเป็น Caseที่พบบ่อยกว่า
200. Error1265หลังเปลี่ยน SQL Mode
Environmentเดิมอาจปล่อย Warning
Environmentใหม่อาจทำให้ Operation Failชัดขึ้น
201. ไม่ควรถือว่า Environmentใหม่แย่
อาจกำลังเปิดเผย Data Bugที่มีอยู่ก่อน
202. Fix Data Contract
ดีที่สุด
203. Data Contractในบทความนี้
หมายถึง:
Code ส่งอะไร↓Column รองรับอะไร↓ค่าที่ Databaseเก็บควรหมายถึงอะไร
สามอย่างต้องตรงกัน
204. Quick Diagnosis — ENUM
ถ้า Error Columnเป็น ENUM:
- ดู ENUM Values
- ดู Actual Value
- ตรวจ Config/Mapping
- ตรวจ Legacy Data
205. Quick Diagnosis — DECIMAL
- ดู Precision/Scale
- ดู Actual Value
- ตรวจ Calculation
- ตรวจ Official Schema
206. Quick Diagnosis — YEAR
- ดูว่า Columnจริงคือ YEARไหม
- ดู Inputว่าเป็นปีหรือ Dateเต็ม
- ตรวจ Character Resource Version
207. Quick Diagnosis — Migration
- Backup
- ดู Statementที่ Fail
- ตรวจ Existing Data
- อย่ารันซ้ำสุ่ม
208. Quick Diagnosis — Playerเดียว
เปรียบเทียบ Recordนั้นกับ Playerปกติ
209. Quick Diagnosis — ทุกคน
ตรวจ Resource/Schemaระดับระบบ
210. สิ่งที่ไม่ควรทำ
- ปิด Strict Modeทันที
- ENUM→VARCHARทันที
- DECIMAL→DOUBLEทันที
- ตัด Stringเอง
- Resetข้อมูลทุก Row
- Import SQLใหม่ทับ Production
- ลบ Table
211. ทำไมไม่ควรตัด Stringเอง
เช่น:
impounded
ถูกตัดเหลือ:
impound
ไม่ทำให้กลายเป็น ENUMที่ถูกต้อง
212. ทำไมไม่ควร Roundทุกอย่าง
บาง Fieldsต้อง Precisionสูงจริง
เช่น Coordinates
213. ทำไมไม่ควรเพิ่ม Decimal Scaleทุก Field
เพิ่มโดยไม่จำเป็นทำให้ Data Contractต่างจาก Resourceต้นฉบับ
214. ทำไมไม่ควรเอา ENUMออก
อาจสูญเสีย Constraintที่ป้องกัน Statusผิด
215. ทำไมไม่ควรปิด Warning
เพราะ Error1265อาจเป็นสัญญาณข้อมูลเสียก่อน Featureพังเต็มรูปแบบ
216. Error1265 FAQ
FiveM Data truncated for column คืออะไร
MariaDB Error1265 / SQLSTATE01000 / WARN_DATA_TRUNCATED บอกว่าข้อมูลสำหรับ Columnถูกตัดหรือไม่สามารถถูกเก็บตรงกับ Definitionของ Columnได้สมบูรณ์.
Error1265กับ1264เหมือนกันไหม
ไม่ 1264คือ Out-of-range ส่วน1265คือ Data Truncated.
Error1265กับ1406เหมือนกันไหม
ไม่ 1406มักหมายถึง Data Too Long ส่วน1265สามารถเกิดจากการแปลง/Precision/ENUMหรือ Type Contextอื่นได้
ENUMทำ Error1265ได้ไหม
ได้ MariaDBยกตัวอย่างการ Insert ENUM Valueที่ไม่ได้อยู่ในชุดแล้วเกิด Error1265.
DECIMALทำ Error1265ได้ไหม
ได้ MariaDB documentationแสดง Warning1265เมื่อ Fractional Dataถูก Truncateตาม DECIMAL Definition.
YEARทำ Error1265ได้ไหม
ได้ ตัวอย่างของ MariaDBแสดง String Dateเต็มที่ใส่ลง YEARแล้วเกิด Error1265.
ENUMแก้อย่างไร
ตรวจ Actual Valueกับชุด ENUMที่ Schemaอนุญาต และตรวจ Resource Version/Migrationก่อนแก้ Column
Vehicle State Error1265ทำอย่างไร
ตรวจว่า Garage Resourceส่ง Stateที่ Schemaรองรับหรือไม่ และหากเพิ่งเปลี่ยน Scriptให้ตรวจ Data Migration
Invoice Status Error1265ทำอย่างไร
ตรวจ Status Representation เช่น Numeric Codeเทียบกับ ENUM/Stringของ Resource Versionนั้น
DECIMAL Price Errorทำอย่างไร
ตรวจ Precision/Scaleและจำนวนทศนิยมที่ Applicationส่ง
ปิด Strict Modeช่วยไหม
อาจเปลี่ยน Errorเป็น Warningหรือทำให้ MariaDBปรับค่า แต่ไม่ควรเป็น Fixหลัก เพราะข้อมูลอาจถูกเปลี่ยนจากค่าที่ Resourceตั้งใจ.
Errorเป็น Warningต้องแก้ไหม
ควรตรวจ เพราะค่าที่ Databaseบันทึกอาจไม่ตรง Input
Clear FiveM Cacheช่วยไหม
โดยทั่วไปไม่ใช่ Fixของ Database Data Truncation
Restart MariaDBช่วยไหม
ไม่ หาก Resourceยังส่ง Valueเดิม
Restart FiveMช่วยไหม
ไม่แก้ Data Contract แต่หลังแก้ Resourceอาจต้อง Reload
Reinstall Databaseช่วยไหม
ไม่ควรทำ
Errorเกิดหลัง Resource Updateทำอย่างไร
ตรวจ Migration, Changelogและ Official Schemaของ Versionใหม่
Errorเกิดหลัง Framework Updateทำอย่างไร
ตรวจ Field Typeและ Resource Bridgeที่เกี่ยวข้อง
Errorหลังเปลี่ยน Garageทำอย่างไร
ตรวจ Vehicle State Representationและ Legacy Data
Errorหลัง Restore Backupทำอย่างไร
ตรวจ Backup Schema/Data Versionเทียบกับ Resource Codeปัจจุบัน
Errorเฉพาะ Characterเก่า
ตรวจ Legacy Valuesที่ Resourceใหม่ไม่รองรับ
Errorเฉพาะ Characterใหม่
ตรวจ Query/Configของ Creation Flow
Errorทุก Character
ตรวจ Schema/Resource Versionระดับระบบ
ต้อง Backupก่อน ALTERไหม
ควรอย่างยิ่ง โดยเฉพาะเมื่อเปลี่ยน ENUM, DECIMAL หรือ Core Table
ALTER ENUMได้ไหม
ทำได้ทาง Database แต่ต้องตรวจ Existing Valuesและ Resourcesทั้งหมดที่ใช้ Columnก่อน
เปลี่ยน ENUMเป็นVARCHARได้ไหม
ทำได้ทาง Technical แต่ไม่ควรเป็น Fixทั่วไป เพราะอาจทำให้ Databaseยอมรับ Statusที่ Applicationไม่รองรับ
เพิ่ม DECIMAL Scaleได้ไหม
ทำได้เมื่อ Requirementจริงต้อง Precisionเพิ่ม และควรใช้ Official Migrationเมื่อมี
จะรู้ได้อย่างไรว่า Root Causeอยู่ CodeหรือSchema
เปรียบเทียบ:
Actual Value + Production Schema + Official Resource Schema
ถ้า Schemaผิดจาก Official → Migration/Schema Problem
ถ้า Schemaถูกแต่ Valueผิด → Code/Data Problem
สรุป FiveM MySQL Data Truncated for Column Error 1265
FiveM MySQL/MariaDB Error 1265 Data truncated for column หมายถึง Database พบว่าค่าที่ Resource ส่งมาไม่สามารถถูกเก็บเข้ากับ Column ได้อย่างสมบูรณ์ โดย MariaDB ระบุ Error นี้เป็น WARN_DATA_TRUNCATED และ SQLSTATE 01000.
ปัญหาที่ควรตรวจเป็นพิเศษคือ:
ENUM → Value ไม่อยู่ในชุดที่อนุญาตDECIMAL → Precision/Scale ไม่ตรงYEAR → Input ไม่ตรงชนิดข้อมูลMigration → Legacy Data ไม่เข้ากับ Schema ใหม่Resource Update → Code กับ Database คนละ VersionParameter Mapping → Value ถูกส่งผิด Column
สิ่งที่ comsiam แนะนำคืออย่าแก้ Error1265ด้วยการปิด Strict Modeหรือเปลี่ยน ENUM/DECIMALเป็น VARCHARแบบกว้าง ๆ เพียงเพื่อให้ Queryผ่าน เพราะ MariaDBสามารถปรับหรือตัด Invalid Valuesใน Non-strict behaviorพร้อม Warningได้ ซึ่งอาจทำให้ Vehicle State, Invoice Status, Price หรือข้อมูล Characterใน Databaseไม่ตรงกับสิ่งที่ Resourceตั้งใจ.
อีกหลักที่ comsiam แนะนำคือให้ตรวจสามอย่างพร้อมกันทุกครั้ง: Actual Value → Production Column Type → Official Schemaของ Resource Versionที่ใช้ หาก Official Schemaตรงแต่ค่าที่ส่งผิด ให้แก้ Resource/Config/Data Mapping; หาก Production Schemaต่างจาก Official ให้ใช้ Migrationที่ถูก Versionและ Backup Databaseก่อน ALTER TABLE หรือแปลง Legacy Data วิธีนี้แก้ต้นเหตุได้ดีกว่าการทำให้ Databaseยอมรับข้อมูลผิดแบบเงียบ ๆ
Comments
Post a Comment