MySQL අක්ෂර සමුහ පරීක්ෂා සහ සැකසුම් මාර්ගෝපදේශය: utf8 vs utf8mb4 පැහැදිලි කරයි

目次

1. හැඳින්වීම

MySQL යනු විවිධ යෙදුම් වල භාවිතා වන පුළුල් පරාසයක දත්ත ගබඩා කළමනාකරණ පද්ධතියකි. එහි බොහෝ වින්‍යාස අංග අතර, අක්ෂර සමුහ සැකසුම් ඉතා වැදගත් වේ, මන්ද ඒවා දත්ත අඛණ්ඩතාවය සහ කාර්ය සාධනයට සෘජුවම බලපාන බැවින්. කෙසේ වෙතත්, බොහෝ සංවර්ධකයන් අක්ෂර සමුහයන් නිවැරදිව වින්‍යාස කර පරීක්ෂා කරන ආකාරය පිළිබඳ සම්පූර්ණ අවබෝධයක් නොමැති නිසා ගැටළු වලට මුහුණ දේ.

මෙම ලිපිය MySQL අක්ෂර සමුහ සැකසුම් පරීක්ෂා කිරීමේ ක්‍රම, ඒවා වෙනස් කිරීමේ ක්‍රම, utf8 සහ utf8mb4 අතර වෙනස්කම් පැහැදිලි කිරීම, සහ කේතන ගැටළු වැළැක්වීමට ප්‍රායෝගික උපාය මාර්ග ආවරණය කරයි. මෙම මාර්ගෝපදේශය කියවීමෙන්, ඔබ MySQL අක්ෂර සමුහ කළමනාකරණය පිළිබඳ මූලික දැනුම සහ ප්‍රායෝගික කුසලතා දෙකම ලබා ගනී.

2. MySQL අක්ෂර සමුහ සහ කොලේෂන් පිළිබඳ මූලික දැනුම

අක්ෂර සමුහයක් කියන්නේ කුමක්ද?

අක්ෂර සමුහයක් යනු පරිගණකවලට පෙළ ඩිජිටල් දත්ත ලෙස නිරූපණය කිරීමට ඉඩ දෙන කේතන පද්ධතියකි. උදාහරණයක් ලෙස, UTF-8 විශාල පරාසයක භාෂා සහාය ලබා දීම නිසා පුළුල් ලෙස භාවිතා වේ. MySQL හි, utf8 සහ latin1 බොහෝ විට පෙරනිමි අක්ෂර සමුහ ලෙස භාවිතා කර තිබුණද, නවතම අවධියේ utf8mb4 නිර්දේශිත ප්‍රමිතිය වී ඇත.

කොලේෂන් කියන්නේ කුමක්ද?

කොලේෂන් යනු අක්ෂර මාලා (string) සසඳා වර්ගීකරණය කිරීමේ නීති නියම කරන එකකි. උදාහරණයක් ලෙස, utf8_general_ci සහ utf8_unicode_ci යන දෙකම UTF-8 සඳහා කොලේෂන් වේ, නමුත් utf8_unicode_ci Unicode ප්‍රමිතිය මත පදනම් වූ වඩා නිවැරදි සසඳීම් ලබා දෙයි.

අක්ෂර සමුහ සහ කොලේෂන් අතර සම්බන්ධතාවය

අක්ෂර සමුහය අක්ෂර කෙලවර (encoding) ක්‍රමය නියම කරන අතර, කොලේෂන් එම කෙලවර කළ අක්ෂර සසඳා වර්ගීකරණය කරන ක්‍රමය නියම කරයි. සුදුසු සංයෝජන තෝරා ගැනීම මඟින් කේතන ගැටළු සහ කාර්ය සාධන අඩු වීම වැළැක්විය හැක.

3. MySQL හි වත්මන් අක්ෂර සමුහය පරීක්ෂා කිරීමේ ක්‍රම

MySQL හි අක්ෂර සමුහයන් බහු මට්ටම්වල (server, database, table, column) වින්‍යාස කර ඇත. පහත මට්ටම් අනුව අක්ෂර සමුහ සැකසුම් පරීක්ෂා කිරීමේ ක්‍රම දැක්වේ.

සේවාදායක-පරාස අක්ෂර සමුහ සැකසුම් පරීක්ෂා කිරීම

සේවාදායක මට්ටමේ අක්ෂර සමුහ වින්‍යාසය පරීක්ෂා කිරීමට, පහත කමාන්ඩ් ක්‍රියාත්මක කරන්න:

SHOW VARIABLES LIKE 'character_set_%';

ප්‍රතිඵලය පහත පරිදි පෙනේ:

+--------------------------+------------------+
| Variable_name            | Value            |
+--------------------------+------------------+
| character_set_client     | utf8mb4          |
| character_set_connection | utf8mb4          |
| character_set_database   | utf8mb4          |
| character_set_results    | utf8mb4          |
| character_set_server     | utf8mb4          |
| character_set_system     | utf8             |
+--------------------------+------------------+

එක් එක් අයිතමයේ අර්ථය:

  • character_set_server : සේවාදායකයේ පෙරනිමි අක්ෂර සමුහය.
  • character_set_database : දත්ත ගබඩාවේ පෙරනිමි අක්ෂර සමුහය.

නියමිත දත්ත ගබඩාවක් සඳහා අක්ෂර සමුහය පරීක්ෂා කිරීම

නියමිත දත්ත ගබඩාවක අක්ෂර සමුහ වින්‍යාසය තහවුරු කිරීමට, පහත කමාන්ඩ් භාවිතා කරන්න:

SHOW CREATE DATABASE database_name;

උදාහරණ ප්‍රතිඵලය:

CREATE DATABASE `database_name` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci */

වගු සහ තීරුවල (column) අක්ෂර සමුහය පරීක්ෂා කිරීම

වගුවක් හෝ එහි තීරුවල අක්ෂර සමුහය පරීක්ෂා කිරීමට, පහත කමාන්ඩ් භාවිතා කරන්න.

වගුව මට්ටම:

SHOW CREATE TABLE table_name;

තීරුව මට්ටම:

SHOW FULL COLUMNS FROM table_name;

උදාහරණ ප්‍රතිඵලය:

+----------------+--------------+----------------------+-------+
| Field          | Type         | Collation            | Null  |
+----------------+--------------+----------------------+-------+
| column_name    | varchar(255) | utf8mb4_unicode_ci   | YES   |
+----------------+--------------+----------------------+-------+

මෙම කමාන්ඩ් භාවිතා කිරීමෙන්, ඔබට සෑම මට්ටමකම අක්ෂර සමුහයන් නිවැරදිව වින්‍යාස කර ඇතිදැයි තහවුරු කළ හැක.

4. අක්ෂර සමුහයන් වින්‍යාස කිරීම සහ වෙනස් කිරීම

MySQL හි අක්ෂර සමුහ වෙනස් කිරීමේ ක්‍රමය ඔබ සර්වර් මට්ටම, දත්ත ගබඩා මට්ටම, වගුව මට්ටම, හෝ තීරුව මට්ටම වෙනස් කරනවාද යනුවෙන් වෙනස් වේ. පහත සෑම වින්‍යාස ක්‍රමයක් පිළිබඳ විස්තරාත්මක විස්තරයක් ඇත.

සර්වර්-පරාස සැකසුම් වෙනස් කිරීම

පෙරනිමි සර්වර්-මට්ටමේ අක්ෂර සමුහය වෙනස් කිරීමට, MySQL වින්‍යාස ගොනුව (සාමාන්‍යයෙන් my.cnf හෝ my.ini) සංස්කරණය කරන්න.

වින්‍යාස පියවරයන්:

  1. වින්‍යාස ගොනුව විවෘත කරන්න.
    sudo nano /etc/my.cnf
    
  1. පහත සැකසුම් එකතු කරන්න හෝ වෙනස් කරන්න:
    [mysqld]
    character-set-server=utf8mb4
    collation-server=utf8mb4_unicode_ci
    
  1. MySQL සර්වර්ය නැවත ආරම්භ කරන්න.
    sudo systemctl restart mysqld
    

දත්ත ගබඩා-මට්ටමේ සැකසුම් වෙනස් කිරීම

විශේෂිත දත්ත ගබඩාවක අක්ෂර සමුහය වෙනස් කිරීමට, පහත කමාන්ඩ් භාවිතා කරන්න:

වෙනස් කිරීමේ කමාන්ඩ්:

ALTER DATABASE database_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

උදාහරණය:

ALTER DATABASE my_database CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

මෙම කමාන්ඩ් දත්ත ගබඩාවේ පෙරනිමි අක්ෂර සමුහය වෙනස් කරයි, නමුත් පවතින වගු හෝ ගබඩා කර ඇති දත්ත වලට බලපාන්නේ නැත. ඔබට වගුද වෙනස් කිරීමට අවශ්‍ය නම්, ඊළඟ කොටසට යොමු වන්න.

වගු-මට්ටමේ සැකසුම් වෙනස් කිරීම

පවතින වගුවක අක්ෂර සමුහය වෙනස් කිරීමට, පහත කමාන්ඩ් භාවිතා කරන්න:

වෙනස් කිරීමේ කමාන්ඩ්:

ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

උදාහරණය:

ALTER TABLE users CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

මෙම කමාන්ඩ් වගුවේ සියලු තීරු වල අක්ෂර සමුහයද යාවත්කාලීන කරයි.

තීරුව-මට්ටමේ සැකසුම් වෙනස් කිරීම

ඔබට විශේෂිත තීරුවක් පමණක් අක්ෂර සමුහය වෙනස් කිරීමට අවශ්‍ය නම්, පහත කමාන්ඩ් භාවිතා කරන්න:

වෙනස් කිරීමේ කමාන්ඩ්:

ALTER TABLE table_name MODIFY column_name column_type CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

උදාහරණය:

ALTER TABLE users MODIFY username VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

5. utf8 සහ utf8mb4 අතර වෙනස්කම්

තාක්ෂණික වෙනස්කම්

  • utf8 : MySQL හි utf8 යනු ඇත්තෙන්ම UTF-8 හි උපසමූහයක් වන අතර අක්ෂරයක් සඳහා උපරිම 3 බයිට් පමණක් සහය දක්වයි. මෙම සීමා නිසා එය ඉමෝජි හෝ විශේෂ අක්ෂර (උදා: 𠮷) සුරකින්න නොහැක.
  • utf8mb4 : UTF-8 හි සම්පූර්ණ ක්‍රියාත්මක කිරීමක් වන අතර අක්ෂරයක් සඳහා උපරිම 4 බයිට් පමණක් සහය දක්වයි.

utf8mb4 නිර්දේශ කිරීමේ හේතු

  • අනුකූලතාව : නවීන වෙබ් සහ ජංගම යෙදුම් බොහෝවිට ඉමෝජි සහ විශේෂ අක්ෂර සමඟ කටයුතු කරයි.
  • ප්‍රමිතීකරණය : බොහෝ CMS වේදිකා (උදා: WordPress) utf8mb4 යනු පෙරනිමි අක්ෂර සමුහය ලෙස නිර්දේශ කරයි.

මාරු කිරීමේදී සැලකිලිමත් විය යුතු වැදගත් කරුණු

utf8 සිට utf8mb4 වෙත මාරු කරන විට පහත කරුණු සලකා බලන්න:

  1. දත්ත ගබඩා ප්‍රමාණය : utf8mb4 එක් අක්ෂරයක් සඳහා 4 බයිට් පමණක් භාවිතා කළ හැකි බැවින් දත්ත ගබඩා ප්‍රමාණය වැඩි විය හැක.
  2. පවතින දත්ත : වෙනස්කම් කිරීමේ පෙර ඔබේ දත්ත පිටපත් ගත කිරීම ඉතාමත් වැදගත් වේ.
  3. යෙදුම් වින්‍යාසය : යෙදුම භාවිතා කරන අක්ෂර සමුහය (උදා: ගනුදෙනුකරු සම්බන්ධතා අක්ෂර සමුහය) ද utf8mb4 ලෙස සකස් කර තිබිය යුතුය.

6. කේතනයේ ගැටළු (Mojibake) සඳහා හේතු සහ විසඳුම්

කේතනයේ ගැටළු ඇති වීමට ප්‍රධාන හේතු

  1. ගනුදෙනුකරු සහ සර්වර් අතර අක්ෂර සමුහ නොගැලපීම
  • උදාහරණය: ගනුදෙනුකරු latin1 භාවිතා කරන අතර සර්වර් utf8mb4 භාවිතා කරයි.
  1. දත්ත මාරු කිරීමේ අසමත් වීම
  • දත්ත ආයාත කිරීමේදී අක්ෂර සමුහය නිවැරදිව සඳහන් නොකෙරේ.
  1. යෙදුම් අසමත් වින්‍යාසය
  • දත්ත ගබඩාවට සම්බන්ධ වීමේදී සඳහන් කරන අක්ෂර සමුහය වැරදියි.

කේතනයේ ගැටළු වැළැක්වීමට ප්‍රායෝගික ක්‍රියාමාර්ග

  1. සර්වර් සැකසුම් තහවුරු කර ප්‍රමිතීකරණය කිරීම
  • සර්වර් අක්ෂර සමුහ සැකසුම් පරීක්ෂා කර සියලු මට්ටම් තුළ ඒකරාශීතාවය රැකගන්න.
    SHOW VARIABLES LIKE 'character_set_%';
    
  1. ගනුදෙනුකරු සැකසුම් සකස් කිරීම
  • ගනුදෙනුකරු සම්බන්ධතාවය ස්ථාපනය කරන විට අක්ෂර සමුහය පැහැදිලිව සඳහන් කරන්න.
    SET NAMES utf8mb4;
    
  1. දත්ත මාරු කිරීමේදී අවධානයෙන් සිටින්න
  • දත්ත ආයාත කරන විට නිවැරදි අක්ෂර සමුදාය නියම කරන්න.
    mysql --default-character-set=utf8mb4 -u username -p database_name < dump.sql
    

7. FAQ කොටස

නිතර අසන ප්‍රශ්න

  1. utf8mb4 වෙත වෙනස් කිරීම කාර්ය සාධනයට බලපානවාද?
  • utf8mb4 දත්ත ප්‍රමාණය වැඩි කරනු ඇති බැවින්, විශාල පරිමාණ දත්ත ගබඩා වල කාර්ය සාධනයේ සුළු බලපෑමක් ඇති විය හැක. නමුත් සාමාන්‍ය නිෂ්පාදන පරිසරවල මෙය අඩු ප්‍රමාණයක් වන අතර වැදගත් ගැටලුවක් නොවේ.
  1. utf8 සිට utf8mb4 වෙත මාරු කිරීමේදී කිසිදු අවදානමක් තිබේද?
  • මාරු කිරීමේ ක්‍රියාවලිය ස්වභාවිකව අවදානම්කාරී නොවේ. නමුත් අක්ෂර පරිවර්තනයේදී දත්ත අහිමි වීම හෝ යෙදුම් ගැටළු ඇති වීම වැළැක්වීමට, පෙර පූර්ණ පිටපතක් ගත කිරීම අත්‍යවශ්‍ය වේ.
  1. කොලේෂන් (collation) වෙනස් කිරීමේදී කුමක් වෙනස් වේ?
  • එය වඩාත් නිරවද්‍ය ස්ට්‍රින්ග් සැසඳීම සහ අනුක්‍රමණය කිරීම සක්‍රිය කරයි. බහුභාෂා යෙදුම් සඳහා utf8mb4_unicode_ci යෝජනා කරයි.

8. නිගමනය

මෙම ලිපියේ, MySQL අක්ෂර සමුදා පරීක්ෂා කිරීම, ඒවා සැකසීම සහ වෙනස් කිරීම, utf8 සහ utf8mb4 අතර වෙනස්කම්, සහ කේතනයේ ගැටළු වැළැක්වීම පිළිබඳව පැහැදිලි කර ඇත. අක්ෂර සමුදා සැකසීම දත්ත ගබඩා කළමනාකරණයේ මූලික අංගයක් වන අතර, නිවැරදි සැකසුම් දෝෂ වැළැක්වීමට සහ කාර්ය සාධනය වැඩිදියුණු කිරීමට සෘජු ලෙස දායක වේ. ඔබේ ව්‍යාපෘතිය සඳහා සුදුසු අක්ෂර සමුදාය තෝරා සැකසීමට මෙම මාර්ගෝපදේශය යොදා ගන්න.