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 มีแค่:

active
inactive

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 = legion
garage = 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 อาจใช้:

status
type
read_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 status
FROM 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ความหมายหลัก
1048Column cannot be NULL
1062Duplicate Entry
1064SQL Syntax
1136Column/Value count mismatch
1264Out of range
1265Data truncated
1292Incorrect value/datetime
1364No default value
1366Incorrect value for field
1406Data 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มีแค่:

active
inactive

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:

  1. ดู ENUM Values
  2. ดู Actual Value
  3. ตรวจ Config/Mapping
  4. ตรวจ Legacy Data

205. Quick Diagnosis — DECIMAL

  1. ดู Precision/Scale
  2. ดู Actual Value
  3. ตรวจ Calculation
  4. ตรวจ Official Schema

206. Quick Diagnosis — YEAR

  1. ดูว่า Columnจริงคือ YEARไหม
  2. ดู Inputว่าเป็นปีหรือ Dateเต็ม
  3. ตรวจ Character Resource Version

207. Quick Diagnosis — Migration

  1. Backup
  2. ดู Statementที่ Fail
  3. ตรวจ Existing Data
  4. อย่ารันซ้ำสุ่ม

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 คนละ Version
Parameter 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

Popular posts from this blog

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

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

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