𝗠𝗮𝗴𝗲𝗻𝘁𝗼 𝟮-ஐ 𝘂𝘁𝗳𝟴-லிருந்து 𝘂𝘁𝗳𝟴𝗺𝗯𝟰-க்கு மாற்றுதல்
ஒரு வாடிக்கையாளர் தனது பெயரில் ஒரு emoji-ஐப் பயன்படுத்தினார். அந்த emoji-க்கு அடுத்ததாகவே தரவுத்தளம் (database) பெயரைச் சுருக்கிவிட்டது. பதிவுகளில் (logs) எந்தத் தவறும் (error) தெரிய வரவில்லை.
பிரச்சனை MySQL utf8-இல் உள்ளது. இது உண்மையான UTF-8 அல்ல. இது மூன்று பைட்டுகளுக்கான (three-byte) வரம்பு கொண்டது.
Emojis மற்றும் பல நவீன குறியீடுகளுக்கு நான்கு பைட்டுகள் தேவைப்படுகின்றன. நீங்கள் பழைய utf8-ஐப் பயன்படுத்தினால், MySQL உங்கள் தரவைச் சுருக்கிவிடும் (truncates). உங்கள் SQL mode 'strict' ஆக இல்லையென்றால், இது அமைதியாகவே நடக்கும். நீங்கள் அறியாமலேயே தரவை இழப்பீர்கள்.
இதற்கான தீர்வு utf8mb4 ஆகும். இது ஒரு எழுத்திற்கு நான்கு பைட்டுகளை ஆதரிக்கிறது.
ஒரு பெரிய Magento store-இல் நீங்கள் எளிதாக ஒரு conversion command-ஐ இயக்க முடியாது. நீங்கள் ஒரு பிழையை (error) சந்திக்க நேரிடும். உங்கள் key மிகவும் நீளமாக உள்ளது என்று அந்தப் பிழை கூறும்.
ஏனெனில் MySQL, சாத்தியமான அதிகபட்ச பைட்டுகளைக் கொண்டு index அளவைக் கணக்கிடுகிறது. utf8-இல் ஒரு VARCHAR(255) column 765 பைட்டுகளைப் பயன்படுத்துகிறது. utf8mb4-இல், அதே column 1020 பைட்டுகளைத் தேவைப்படும். இது பழைய 767-byte வரம்பைத் தாண்டுகிறது.
இதை எவ்வாறு சரி செய்வது:
- MySQL 8.0 அல்லது innodb_large_prefix செயல்படுத்தப்பட்ட MySQL 5.7-ஐப் பயன்படுத்தவும். இது உங்கள் வரம்பை 3072 பைட்டுகளாக அதிகரிக்கும்.
- நீங்கள் பழைய சர்வரைப் பயன்படுத்தினால், indexed VARCHAR columns-ஐ 191 எழுத்துக்களாகக் குறைக்கவும். 191 எழுத்துக்கள் $\times$ 4 பைட்டுகள் = 764 பைட்டுகள். இது வரம்பிற்குள் அடங்கும்.
வெற்றிகரமான migration செய்ய மூன்று படிகள் தேவை:
- தரவுத்தளம் மற்றும் அட்டவணைகளை (tables) புதுப்பிக்கவும்.
ALTER TABLE CONVERT TO CHARACTER SET utf8mb4என்பதைப் பயன்படுத்தவும். இது ஏற்கனவே உள்ள தரவை மீண்டும் எழுதும். - உங்கள் my.cnf கோப்பில் (file) சர்வர் defaults-ஐப் புதுப்பிக்கவும். இது புதிய அட்டவணைகள் சரியான அமைப்புகளைப் பயன்படுத்துவதை உறுதி செய்யும்.
- application connection charset-ஐப் புதுப்பிக்கவும். இணைப்பு utf8-லேயே இருந்தால், தரவு தரவுத்தளத்தை அடைவதற்கு முன்பே சிதைந்துவிடும் (corrupt).
இந்த அபாயங்களைக் கவனத்தில் கொள்ளவும்:
- Table locks. CONVERT TO என்பது முழு அட்டவணையையும் மீண்டும் எழுதும். பெரிய அட்டவணைகள் லாக் (lock) ஆகக்கூடும். உங்கள் store ஆன்லைனில் இருப்பதை உறுதி செய்ய pt-online-schema-change போன்ற கருவிகளைப் பயன்படுத்தவும்.
- Collation mismatches. இணைக்கப்பட்ட (joined) அனைத்து அட்டவணைகளும் ஒரே collation-ஐப் பயன்படுத்த வேண்டும். உங்கள் முழு schema முழுவதும் utf8mb4_unicode_ci என்பதைப் பயன்படுத்தவும்.
நீங்கள் இன்னும் utf8-ஐப் பயன்படுத்தினால், உங்கள் store Unicode-பாதுகாப்பானது (Unicode-safe) அல்ல. தவறான எழுத்து உங்கள் தரவைச் சிதைக்கும் வரை நீங்கள் காத்திருப்பதாகவே அர்த்தம்.
