@Toma: Не е забрането и сега ќе го оставам, само за да може да видат и останатите членови, но за кратко, па потоа ќе го избришам. А сега, ќе објаснам зошто ги бришам.
Податоците во SQL базата се зачувуваат во UTF-8 формат. Што ова значи. Во секоја „нормална“ комбинација, за опишување на UTF-8 симбол, потребни се 4 бајти. Но, бидејќи поддршката за UTF-8 во SQL е ставена уште многу одамна (мислам 2003-та или 2004-та), тогаш, се сметало дека, генерално земено, повеќе од доволно симболи ќе бидат опишани со само 3 бајти, а не 4. Ова било направено од практични причини, за да се намалат големините на базите. Еден бајт по симбол и не е баш така малку пред 15-тина години... сметајте дека во овој период, максималната големина на дисковите не надминуваше 200 или 250GB, а замислете да имате база со големина од 30, 40, 50GB (да, има и толкави бази) зачувани како UTF-8. Еден бајт по симбол може драстично да ја намали големината на базата (за 10, 20GB, зависи колкава е базата), а исто така и времето потребно за процесирање (запишување и исчитување на податоци од базата).
Но, како што поминуваше времето, големините на дисковите пораснаа, што практично значеше дека и овој стандард (UTF-8 симбол опишан со 3 бајти наместо со 4) слободно можеше да отиде во историјата. За жал, иако скоро целиот софтвер кој работи на серверите (PHP, SQL Engine, HTML сервер, итн.) е Open Source, сепак, не сите проекти се развиваат паралелно и ги имаа истите потреби од корисниците (развивачите на софтвер за определена платформа, на пример, PHP), што практично значеше дека, иако во SQL како data type беше воведен новиот начин на запишување на податоци (UTF8MB4, претходниот се викаше само UTF8, MB4 е ознака за Multi-Byte 4), тоа автоматски не повлекува дека развивачите на остантите софтери, кои може да остварат врска со SQL база, дека ќе мора да го имплементираат ова баш кога и тимот што работи на SQL ќе реши да го воведе UTF8MB4, нуту пак дека developer-ите на софтвер за овие платформи (на пример, PHP) ќе мора да го имплементираат ова во нивните програми (скрипти).
Практично, голем дел од развивачите на web апликации, не беа ни информирани дека кога во SQL ќе дефинираат data type како UTF8, дека всушност податоците се запишуваат со 3 бајти, а не 4.
Е сега, проблемот почна да испливува на површина кога компании како Microsoft, Apple а и многу други, почнаа да исфрлуваат на пазар производи кои користат emojis (emotions или „емоции“ на нашки). Емоциите како симболи, се дел од UTF-8 code page-от, но тое се дел од оние симболи кои спаѓаат во оној 4-ти бајт, а не во првите три. Практично, со 3-бајтниот запис, скратени беа сите овие симболи. Порано, никој воопшто не ни знаеше дека постојат, така да, ова и не беше баш некој голем проблем, но подоцна, кога екстремно се раширија, а згора на тоа и луѓе почнаа најчесто да ги користат нивните „паметни уреди“ за да сурфаат, се јави сериозен проблем, бидејќи голем дел од софтверот беше напишан да користи UTF8, а не UTF8MB4. Згора на тоа, многу hosting компании, не ни дозволуваа да се смени data type на нивните SQL инсталации на UTF8MB4 (го има во менито, менуваш, но откако ќе стиснеш Apply, пак се враќа назад на UTF8
).
Привремено решение беше да се доработат скриптите (софтверот) за да овие симболи бидат „преведени“ во HTML симболи и на овој начин запишани во базата, што практично значи дека наместо, на пример „Ш“ да имаш запишано, како карактер, при директно edit-ирање на базата со помош на некоја алатка (како што е phpMyAdmin), дури и ако можеш директно да го видиш симболот во data preview, ќе видиш само низа на карактери кои почнуваат со определен код за HTML... практично, нешто гледаш, но не знаеш што е тоа.
Ваков "patch" е применет и во скриптата која моментално го користи форумот бидејќи, прво, не сите администратори на форуми знаат што е база (ќе се изненадите колку е голем овој процент
), второ, дури и ако знае, не секој знае да влезе во неа и да edit-ира data type и да ги смени дел од колоните да користат UTF8MB4 наместо UTF8, а освен тоа, дури и ако знае, ако користи постара верзија од SMF (софтверот кој го користи форумов), софтверот можно е да не знае што му вратила назад базата (очекува карактер со големина од 3 бајти, а базата му враќа назад 4
).
Овој проблем е решен во поновите верзии од скритата (онаа верзија која моментално е активна на форумов, 2.0.15), но, бидејќи сеуште има дел од hosting сајтовите кои им забрануваат на корисниците да сменат data type во база на определена колона да биде UTF8MB4, што практично значи дека и скриптата за update или upgrade нема да може да смени, падната е одлука ова да не се прави во 2.0.x верзиите, туку систем за инсталација и upgrade кој ќе детектира дали SQL може да ги смени адекватните колони во UTF8MB4, да се имплементира во наредиот major upgrade, т.е. 2.1.x, кој, за жал, сеуште е во RC (Release Candidate), но не е final.
Значи, причините се практични. Бидејќи upgrade-ерите за скриптата, самите не се upgrade-ани од кој знае кога (мислам дека последниот edit на скриптата за upgrade на 2.0.x верзиите е направен некаде 2011-та, 2012-та), ова практично значи дека, кога би се подигнал upgrade-ер за 2.1.x верзијата, можно е се да помине без проблем, но можно е и да заглави некаде upgrade-ерот, а една од причините да биде токму некој „не знам каков emoticon“ кој, поради некоја причина, бил погрешно запишан во базата или скриптата не знае да го преведе или... не знам која друга причина. Може да има илјадинци причини, но да не тупам околу нив, поентата е: може да заглавиш со денови над компјутер, барајќи која е причината, на крајот да ја најдеш, да сватиш дека е emoticon во прашање, и да ти текне дека имаш милијарда emoticons во post-ови од членови
. Е ај иди дознај кој е оној кој прави проблем.
Затоа, за да си го олеснам животот, бидејќи многу мака си видов со претходниот upgrade, кога од 1.1.x се префрливме на 2.0.x, поради тоа што претходниот uber admin (BorceBT) имаше толку многу custom модификации направено, што практично, скриптата за upgrade заглавуваше на илјада места (реши едно, заглави на друго
) и поради тоа што не сакам пак да заглавувам со upgrades по месец и кусур над компјутер, со часови над него, трескај глава „шо к*р ти е проблемот сега
“, затоа решив, ако видам ваков симбол (emoticon) едноставно да го бришам. Ако можам да најдам адекватен симбол во класичните емоции кои ги поддржува форумот, во ред, ќе го сменам со таков, но ако нема... тоа е тоа, се брише.
Се надевам дека појаснив што е точно проблемот и зошто го правам тоа што го правам.