ทำไมรหัสคุณลักษณะมีความยาวสูงสุด


9

เมื่อพยายามสร้างคุณลักษณะฉันพบว่าความยาวสูงสุดของรหัสคุณลักษณะคือ 30 อักขระ ปรากฎว่านี่ไม่ใช่ข้อ จำกัด จริง ๆ - มันเป็นค่าโดยพลการอย่างสมบูรณ์ที่กำหนดโดย

Mage_Eav_Model_Entity_Attribute::ATTRIBUTE_CODE_MAX_LENGTH.

ถ้าอย่างนั้นทำไมถึงมีข้อ จำกัด ? และทำไมค่าเริ่มต้น 30 แทนที่จะเป็นเช่น 255 ซึ่งเป็นขีด จำกัดจริงของคอลัมน์ฐานข้อมูล

PS หากใคร ๆ สามารถนึกถึงแท็กที่ดีกว่าสำหรับคำถามนี้ได้โปรดอัปเดตพวกเขา

คำตอบ:


8

นี่เกือบจะเปลี่ยนไปแน่นอนใน 1.6 ส่วนหนึ่งของการเพิ่มการรองรับ Oracle - ใน Oracle คอลัมน์สามารถมีความยาวได้ 30 ตัวอักษรดังนั้นคุณลักษณะ Magento จำนวนมากจึงสั้นลงและฉันคิดว่าข้อ จำกัด นี้ถูกเพิ่มในเวลาเดียวกัน

ดูhttp://m-chanaan.hr/wp-content/uploads/2013/04/RDBMS_Guide2.pdfสำหรับการอภิปรายมากมาย


1
นี้. ฉันแหย่ไปรอบ ๆ ฐานรหัสเบต้า 1.5 อันเก่า ๆ และATTRIBUTE_CODE_MAX_LENGTHค่าคงที่ไม่มีอยู่จริง
Alan Storm

6

ตัวอย่างที่สมบูรณ์แบบของทีมงานหรือนักพัฒนาบุคคลที่ไม่ได้พูดคุยกัน ในขณะที่eav_attributeตารางหลักatrtibute_codeคือ a varchar(255)ค่ารหัสนี้มักใช้ในตารางอื่น

ในcatalog_product_link_attributeมีproduct_link_attribute_codeแอตทริบิวต์ (ซึ่งเป็นรหัสแอตทริบิวต์) varchar(32)และคอลัมน์นี้เป็น ย้อนกลับไปในยุคก่อนประวัติศาสตร์เมื่อวัตถุการขายเป็นวัตถุ EAV พวกเขามีคอลัมน์ attribute_code ซึ่งมีvarchar(50)ความยาว

# Mage/Sales/sql/sales_setup/mysql4-upgrade-0.9.45-0.9.46.php
$installer->getConnection()->addColumn($this->getTable('sales_order'), $attribute['attribute_code'], 'varchar(50) NULL');

ฉันคิดว่ามีคนอื่นเช่นกัน

หากไม่มีข้อกำหนดหรือข้อตกลงที่แท้จริงเกี่ยวกับสิ่งที่ถูกสร้างขึ้นนักพัฒนาที่รับผิดชอบ UI สำหรับส่วนแอตทริบิวต์น่าจะดูที่attribute_codeคอลัมน์ทั้งหมดเลือกอันที่สั้นที่สุดและบังคับใช้ความยาวเพื่อให้แน่ใจว่าผู้ใช้ไม่สามารถสร้างรหัสแอตทริบิวต์ได้ ที่จะยาวเกินไปสำหรับหนึ่งในตารางต่างๆที่นักพัฒนาอื่นกำลังทำงานอยู่

สำหรับเหตุผลที่นักพัฒนาจะเลือกvarcharความยาวที่ไม่มี255- มีโรงเรียนแห่งความคิดเกี่ยวกับการออกแบบฐานข้อมูลที่บอกว่าคุณสร้างคอลัมน์ของคุณตราบเท่าที่พวกเขาจำเป็นต้องประหยัดพื้นที่ดิสก์ลด RAM ให้มีประสิทธิภาพมากขึ้นในการเข้าร่วม เป็นต้นนักพัฒนาบางคนยังคงยึดมั่นกับสิ่งนี้กับแนวโน้มที่ทันสมัยของ "ทำให้มันมีขนาดใหญ่ที่สุดเท่าที่จะเป็นไปได้และกังวลเกี่ยวกับผลกระทบด้านประสิทธิภาพในภายหลัง" ก็เป็นที่ชัดเจนมีความขัดแย้งกับความยาวสูงสุดvarcharสำหรับattribute_code's ในหมู่ทีมงานหลักวีโอไอพีที่จุดหนึ่งและตอนนี้ก็อาศัยอยู่ในรหัสเดิม


เป็นตัวอย่างที่สมบูรณ์แบบเช่นนี้ฉันคิดว่า @xyphoid มีคำตอบที่บ้าคลั่ง (และถูกต้อง) น้อยลง
Alan Storm

0

เช่นเดียวกับxyphoidกล่าวว่าที่ก่อนหน้านี้มีข้อ จำกัด ที่เกิดเมื่อออราเคิล BD เพราะได้รับการสนับสนุนใน Oracle คอลัมน์เท่านั้นที่สามารถจะยาว 30 ตัวอักษร

ตอนนี้

หลังจากการดัดแปลงแกนokorshenko ( PR # 10225 )

const ATTRIBUTE_CODE_MAX_LENGTH = 60;

ตารางต่อไปนี้อธิบายความยาวสูงสุดสำหรับตัวระบุแต่ละประเภท

| Identifier | Maximum Length (characters) |
|------------|-----------------------------|
| Column     | 64                          |

ค่าถูกกำหนดเป็น 60เพราะในรหัสคุณลักษณะโหมดแฟลตจะถูกเปลี่ยนเป็นชื่อคอลัมน์ MySQL อนุญาตให้ใช้เพียง 64 สัญลักษณ์ในชื่อคอลัมน์


-5

เพื่อแก้ไขข้อผิดพลาดนี้โปรดใช้รหัสนี้

CONST ATTRIBUTE_CODE_MAX_LENGTH = 30; ถึง 60

รหัสควรเป็น

CONST ATTRIBUTE_CODE_MAX_LENGTH = 60;

นี่จะช่วยแก้ปัญหาของคุณ


4
การปรับเปลี่ยนหลัก! แน่นอนว่าคุณล้อเล่น
philwinkle

1
ทำไม 60 และไม่ใช่ 212
Marius

1
ทำไมไม่ 5000000
Buttle Butkus

คุณจะไม่สามารถบันทึกตัวเลือกที่เกี่ยวข้องได้เมื่อแก้ไขผลิตภัณฑ์หากคุณทำเช่นนั้น ...
loeffel

@Marius: รหัสคุณลักษณะ EAV จะถูกเปลี่ยนเป็นชื่อคอลัมน์สำหรับตารางแบนและ MySQL ไม่รองรับชื่อคอลัมน์ที่มีสัญลักษณ์มากกว่า 64 สัญลักษณ์
Nolwennig
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.