Saat mencoba membuat atribut, saya telah menemukan bahwa panjang maksimum kode atribut adalah 30 karakter. Ternyata, bahwa ini BUKAN sebenarnya semacam pembatasan nyata - ini adalah nilai yang sepenuhnya arbitrer, yang didefinisikan oleh
Mage_Eav_Model_Entity_Attribute::ATTRIBUTE_CODE_MAX_LENGTH.
Karena itu, mengapa ada batasan sama sekali? Dan mengapa 30 default, bukan misalnya 255, yang merupakan batas sebenarnya dari kolom database?
PS. Jika ada yang bisa memikirkan tag yang lebih baik untuk pertanyaan ini, harap perbarui.
sumber
ATTRIBUTE_CODE_MAX_LENGTH
konstanta tidak ada.Contoh sempurna tim atau pengembang individual yang tidak saling berbicara. Sementara
eav_attribute
tabel utamaatrtibute_code
adalah avarchar(255)
, nilai kode ini sering digunakan di tabel lain.Di
catalog_product_link_attribute
sana adalahproduct_link_attribute_code
atribut (yang merupakan kode atribut), dan kolom ini adalah avarchar(32)
. Kembali pada zaman prasejarah ketika objek penjualan adalah objek EAV, mereka memiliki kolom atribut_code yangvarchar(50)
panjangnya.Saya membayangkan ada orang lain juga.
Tanpa spesifikasi aktual atau kesepakatan tentang apa yang sedang dibangun, pengembang yang bertanggung jawab atas UI untuk bagian atribut cenderung melihat semua
attribute_code
kolom, memilih yang terpendek, dan menegakkan panjang untuk memastikan pengguna tidak dapat membuat kode atribut itu akan terlalu lama untuk salah satu dari berbagai tabel yang sedang dikerjakan pengembang lain.Adapun mengapa seorang pengembang akan memilih
varchar
panjang yang tidak255
- ada sekolah pemikiran tentang desain database yang mengatakan Anda hanya membuat kolom Anda selama mereka perlu menghemat ruang disk, mengurangi RAM, lebih efisien dalam bergabung operasi , dll. Beberapa pengembang masih berpegang pada ini vs tren modern "membuatnya sebesar mungkin dan khawatir tentang implikasi kinerja nanti". Jelas ada ketidaksepakatan pada panjang maksimumvarchar
untukattribute_code
di antara tim inti Magento pada satu titik, dan sekarang ia hidup dalam kode warisan.sumber
Seperti kata xyphoid , batasan sebelumnya disebabkan ketika Oracle BD didukung karena di Oracle, kolom hanya bisa sepanjang 30 karakter.
Sekarang,
Setelah modifikasi inti okorshenko ( PR # 10225 )
Nilai didefinisikan sebagai 60 karena dalam kode atribut mode datar akan ditransformasikan menjadi nama kolom. MySQL hanya mengizinkan 64 simbol dalam nama kolom.
sumber
Untuk mengatasi kesalahan ini, gunakan kode ini
CONST ATTRIBUTE_CODE_MAX_LENGTH = 30; ke 60
Kode seharusnya
CONST ATTRIBUTE_CODE_MAX_LENGTH = 60;
Ini akan menyelesaikan masalah Anda.
sumber