विशेषता कोड की अधिकतम लंबाई क्यों होती है?


9

विशेषताएँ बनाने का प्रयास करते समय, मैंने पाया है कि विशेषता कोड की अधिकतम लंबाई 30 वर्ण है। हालांकि, यह वास्तव में किसी तरह का वास्तविक प्रतिबंध नहीं है - यह पूरी तरह से मनमाना मूल्य है, इसके द्वारा परिभाषित किया गया है

Mage_Eav_Model_Entity_Attribute::ATTRIBUTE_CODE_MAX_LENGTH.

तो यह देखते हुए कि, सभी पर प्रतिबंध क्यों है? और डिफ़ॉल्ट 255 क्यों है, उदाहरण के लिए 255, जो डेटाबेस कॉलम की वास्तविक सीमा है?

पुनश्च। यदि कोई इस प्रश्न के लिए बेहतर टैग के बारे में सोच सकता है, तो कृपया उन्हें अपडेट करें।

जवाबों:


8

ओरेकल सपोर्ट को जोड़ने के 1.6 भाग में यह लगभग निश्चित रूप से बदल गया था - ओरेकल में, कॉलम केवल 30 वर्ण लंबे हो सकते हैं, इसलिए बहुत सारे मैगेंटो विशेषताओं को छोटा कर दिया गया था, और मुझे लगता है कि यह प्रतिबंध उसी समय जोड़ा गया था।

इस पर बहुत चर्चा के लिए http://m-chanaan.hr/wp-content/uploads/2013/04/RDBMS_Guide2.pdf देखें ।


1
इस। मैं बस कुछ पुराने 1.5 बीटा कोड आधारों के आसपास खड़ा ATTRIBUTE_CODE_MAX_LENGTHथा और निरंतर मौजूद नहीं था।
एलन स्टॉर्म

6

टीमों या व्यक्तिगत डेवलपर्स का एक आदर्श उदाहरण एक दूसरे से बात नहीं कर रहा है। जबकि मुख्य eav_attributeतालिका atrtibute_codeएक है varchar(255), इस कोड मान को अक्सर अन्य तालिकाओं में उपयोग किया जाता है।

इसमें catalog_product_link_attributeएक product_link_attribute_codeविशेषता है (जो कि विशेषता कोड है), और यह कॉलम एक प्रकार है varchar(32)। प्रागैतिहासिक काल में जब बिक्री वस्तुएं ईएवी वस्तुएं थीं, तो उनके पास एक एट्रीब्यूट_कोड कॉलम था जिसकी 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- डेटाबेस डिज़ाइन के बारे में विचार का एक स्कूल है जो कहता है कि आप केवल अपने कॉलम बनाते हैं जब तक उन्हें डिस्क स्थान को बचाने के लिए होना चाहिए, रैम को कम करना, ऑपरेशन में शामिल होने में अधिक कुशल होना , आदि कुछ डेवलपर्स अभी भी इस बनाम "आधुनिक रुझान को जितना संभव हो उतना बड़ा बनाते हैं और बाद में प्रदर्शन निहितार्थ के बारे में चिंता करते हैं"। यह स्पष्ट है कि एक बिंदु पर मैगेंटो कोर टीम के varcharलिए एक की अधिकतम लंबाई पर असहमति थी attribute_code, और अब यह विरासत कोड पर रहता है।


एक उदाहरण के रूप में यह हो सकता है के रूप में सही है, मुझे लगता है कि @xyphoid का कम क्रैंक (और सही) उत्तर है।
एलन स्टॉर्म

0

जैसा कि एक्सफॉइड कहता है, पिछली सीमा तब हुई थी जब ओरेकल बीडी का समर्थन किया गया था क्योंकि ओरेकल में कॉलम केवल 30 वर्ण लंबा हो सकता है।

अभी,

ओकोरशेंको कोर संशोधन के बाद ( पीआर # 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
एक मुख्य संशोधन ?! निश्चित रूप से आप मज़ाक करते हैं।
सेप

1
60 और 212 क्यों नहीं?
मेरियस

1
5000000 क्यों नहीं?
बटल बुटकस

यदि आप ऐसा करते हैं तो उत्पादों को संपादित करते समय आप जिम्मेदार विकल्पों को नहीं बचा पाएंगे ...
loeffel

@ मार्स: ईएवी विशेषता कोड फ्लैट टेबल के लिए कॉलम के नाम में बदल जाएगा और MySQL 64 से अधिक प्रतीकों के साथ कॉलम नाम का समर्थन नहीं करता है
नॉलवेनिग
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.