Saturday, February 20, 2010

My Sql සිංහලෙන් (6 වන ලිපිය)


character-set හා collation

Mysql හි character-set යනු සංකේතයන් හා කේතකරණයන් (symbols and encodings) සමූහයක්. Collation යනු character-set හි ඇති කේතීකරණ සංකේත සසඳා බලනු ලබන නීති මාළාවක්. ‍ඔබ සිතන්න “A”, ”B”, ”a”, ”b” යන අක්ෂර හතර හැඳින්වීමට පිළිවෙලින් 0,1,2,3 භාවිතා කරනවා කියා. මෙහි A යනු සංකේතයයි. එය හැඳින්වීමට භාවිතා කරන කේතීකරණය වන්නේ 0 යි. මෙසේ සංකේත හා කේතීකරණ අතර ඇති සම්බන්ධතාව සහ එම කේතකරණයන් character-set ලෙස හදුන්වයි. මෙය charset ලෙස කෙටියෙන් භාවිතා කෙරේ .

අපට A හා B සංසන්දනය කිරීමට අවශ්‍යයයි සිතමු. A=0 සහ B = 1 බැවින් Aහෙවත් A හි අගය B ට වඩා අඩුය ලෙස කිව හැකිය. එසේ කියන්නේ අප දැනටමත් අපේ character-set එක සහා collation (සංචයනයක්) එකක් හෙවත් නීතියක් භාවිතා කර ඇති නිසාය. එනම් කේතීකරණ සංසන්දනය කිරීමයි. අප මෙවැනි කුඩා සියලු සංචයනයන් ද්ව්‍යන්ගී සංචයනයන් (Binary collation) ලෙස පොදුවේ හුන්වන්නෙමු. මෙහි කැපිටල් A හා සිම්පල් a අකුරු ඉංග්‍රීසි භාෂාවේදී එකම තේරුමක් ගෙන දුන්නද මේ සංචයනයන්ට අනුව ඒවාට වෙනස් අගයන් පවතී. (A=0 සහ B=2) මෙම තත්ත්වය “විභක්ති අචේතන“ (case-insensitive collation) සංචයන ‍ලෙස හදුන්වයි.

සර්වර් එක හා ක්ලයන්ට් මෘදුකාංගය අතර දත්ත හුවමාරුවේදී character sets සහ collations වලට ප්‍රධාන අවස්ථා හතරකට මුහුණ පෑමට සිදුවේ. ඒවා නම් server, database, table, සහ column යන අදියර හතරයි. මේ අනුව මේ දෙක අතර දත්ත හුවමාරුව සහා character sets සහ collations විසින් සිදු කරන කාර්යය කාටත් තේරෙන උදාහරණකින් සලකා බලමු.
මගේ ල තියෙනවා A4 කඩදාසියක්. මට පරිගණකයක් මිළදී ගැනීමට අවශයයි. හබැයි මට වියදම් කරන්න පුළුවන් රු 25000/- යි. ඒ වගේම පරිගණකය ඩුවල් කෝ වෙන්න ඕන. රැම් එක 1gb ඕන. හාඩ් එක 160gb ඕන. DVD රයිටර් එකක් ඕන. ඔය මූලික අවශ්‍යතා අනිවාර්යයි. මම A4 කඩදාසියෙ“ මේ අවශ්‍යතා ලියනවා. මට තියෙන උවමනාව පරිගණකයක මිළදී ගැනීම. මූලික අවශ්‍යතා ටික තමයි නීති රීති. මගෙ නම “ක්යන්ට්“. මම මේ අවශ්‍යතා ටික කොළයක ලියාගෙන යනවා ටවුමෙ තියෙන “සර්වර පීසී“ පරිගණක ආයතනයට. මම මගෙ මේ අවශ්‍යතා ටික ලියල තියෙන කොලේ පරිගණක කඩේ මල්ලිට දීල කියනව මට ඔය අවශ්‍යතා තියෙන පරිගණකයක් ගන්න පුළුවන්ද කියල. මිනිහ දහ අතේ කල්පනා කරනව මේව මේ ගානට දෙන්නෙ කොහොමද කියල. එයාගෙ අදහස මට පරිගණකය විකිණීම ඒත් එයා ආයතනය විසින් නියම කළ නීති රීති වලට යටත්වයි පරිගණකය විකිණිය යුත්තේ. ඔබට පෙනෙනවා නේද, මම පරිගණකය මිළ දී ගැනීමටත් ඒ මල්ලි මට පරිගණකය විකිණීමටත්, යන කාර්යය සඵල වීමට මේ දෙපාර්ශවයේම නීති රීති වලට යටත්ව මධ්‍යස්ථ තීරණයකට පැමිණිය යුතු බව. ඔහු කියනවා මේ ගානට ක්ලයන්ට් අයියට දෙන්න පුළුවන් වෙන්නෙ 80gb හාඩ් එකක් දාල 512 Ram එකක් දාල used monitor එකක් දාලයි කියල මට “Print කරපු A4 කඩදාසියක් පෙන්නල කියනවා. මේකෙ තියෙන ගනන් වලට අඩුවෙන් බඩු දෙන්න මට ආයතනයෙන් අවසර නෑ කියල . මම කියනවා එහෙනම් රැම් එකයි හාඩ් එකයි වෙනස් නොකර මොනිටර් එක used වුනාට කමක් නෑ කියල. එහෙනම් අයිය තව රු 2000/- ක් වැඩිපුර දෙන්න. මම ඒකට එකවෙනවා. ඔහු පරිගණකය විකුණනවා. මම මිළදී ගන්නවා. කාර්යය සම්පූර්ණයි. මම එක නොවුනනම් කාර්යය අසම්පූර්ණයි. එහෙම වුණානම් මල්ලිගේ කටින් පිටවෙන්නේ එරර් මැසේජ් එකක්. මම ඒ එරර් මැසේජ් එකත් අහල හිතට අරන් ආපහු එනවා.
මම - අවශ්‍යතාව - “පරිගණකයක මිළදී ගැනීම“
නීති රීති - “අතින් ලියු A4 කඩදාසියේ“
කඩේ මල්ලි - අවශ්‍යතාව - “පරිගණකයක විකිණීම“
නීති රීති - “Print කරපු A4 කඩදාසියේ“
මේක ‍අදහසක් ගන්න උදාහරණයක් විතරයි. හරියටම කෙරෙන කාර්යය නෙමේ. ඉතිං මේ වැඩේම තමයි වෙන්නෙ සර්වර් එක හා ක්ලයන්ට් මෘදුකාංගය අතර දත්ත හුවමාරුවේදී. දෙපැත්තෙම තියෙන character sets සහ collations යන සිස්ටම් වේරියබල් වලට අනුකූලව දත්ත හුවමාරුව සිදු විය යුතුයි.


1. සර්වර් එකෙහි(Server) =



character_set_server/collation_server





2. ක්ලයන්ට් එකෙහි(client) =
character_set_client/collation_ client
3. ඩේටා බේස් එකෙහි(database) =
character_set_database/collation_database
4. ඩේටා බේස් තීරු (colomn) =
character_set_ colomn/collation_ colomn
මුලින් සහන් කළ පරිදි නම් server, database, table, සහ column යන අදියර හතරටම character_set සහ collation බලපානව. එනම් ක්ලයන්ට් මෘදුකාංගයේ දත්ත ඇතුළත් කළ විට එය දත්ත ගබඩාවක දත්ත තැන්පත් වන ස්ථානය දක්වා ස්ථාන හතරකදී චෙක් පොයින්ට් හතරක් හමු වෙනවා. ඒ ස්ථාන වලදී සපුරා ලිය යුතු අවශ්‍යතා collation එකට පටහැනි වුවහොත් එතැනදී එරර් එකක් මතු වෙනවා එතැනින් ඉදිරියට යන්න දත්තයට බෑ. අපට මුලින් වුනා ‍වගේ sumudu කියන ඩේටා බේස් එකක් සර්වර් එක තුළ තිබියදී තවත් ඒ නමින්ම ඩේටා බේස් එකක් සෑදීමට යාමේදී මතු වූ එරර් එක මතකද?
mysql> create database sumudu;
ERROR 1007 (HY000): Can't create database 'sumudu'; database exists
මේ විදියට එරර් එකක් එන්නේ අප කරන කාර්යය සර්වර් එකේ collation වලට පටහැනි නිසයි. දැනට ඔබ භාවිතා කරන character set හා collation එක කුමක්ද? මේ සහා සමාගම විසින් ඉදිරිපත් කළ character set 36 ක් සහ collation 127ක් තිබේ.කොහොමද ඒවා බලා ගන්නේ.
mysql> show CHARACTER SET; හෝ mysql> show CHARSET;
mysql> show COLLATION;
මේ කමාන්ඩ් දෙක කොන්සෝල් එකේ දීල බලන්න. මෙයින් Mysql සහය දක්වන සියළුම CHARACTER SET සහ COLLATION බලා ගන්නට පුළුවන්. මෙහිදී ලැබෙන වගුවේ පරිදි ඕනෑම character_set එකක් හා collation එකක් මේ සඳහා භාවිතා කළ හැකිය. නමුත් සමාගම විසින් default value එක ලෙස සකසා ඇත්තේ අපිට මුලින් අන්ඩර දෙමළයක් වී තිබූ latin1 හා latin1_swedish_ci යන දෙකයි. කලින් C:\wamp\bin\mysql\mysql5.1.36\data\ පාත් එකේ sumudu ෆෝල්ඩර් එක තුළ තුළ තිබූ db.opt ෆයිල් එකේ තිබූ අන්ඩර දෙමළය දැන් ශුද්ධ සිංහල වූවා නේද?
default-character-set=latin1
default-collation=latin1_swedish_ci




දැන් අපි මේ default character set වෙනුවට වෙනත් character set එකක් භාවිතා කර ඩේටා බේස් එකක් සාදමු. පහත ආකාරයට කමාන්ඩ් දෙන්න.
mysql> CREATE DATABASE db1 CHARACTER SET dec8 COLLATE dec8_swedish_ci;
Query OK, 1 row affected (0.01 sec)

දැන් පෙර පරිදිම මීට අදාලC:\wamp\bin\mysql\mysql5.1.36\data\db1 හි ඇති db.opt විවෘත කරන්න. එහි ඇත්තේ අප ලබා දුන් character set එක හා collation එක නේද.


default-character-set=dec8
default-collation=dec8_swedish_ci
මීලග ලිපියෙන් හමු වෙමු.

1 comment:

  1. බොහොම සරල පැහැදිලි කිරීමක්.. අනර්ඝයි! :-)

    ReplyDelete

මගේ ලිපිය ගැන ඔබේ වටිනා අදහස මා හට ලබා දෙන්නට කාරුණික වන්න. ඒක මට ගොඩක් වටිනවා.