web counter

உதவாக்கரை
டாட்நெட், மை எஸ்க்யூஎல், மற்றும் தமிழ் ( வியாஷை, ஷௌஷ 4, 2005 )

விஷுவல் பேசிக் 6.0 வைத்துக்கொண்டு யூனிகோட் எழுத்துக்களைக் கையாள்வது அவ்வளவு உகந்த செயல் அல்ல. விஷுவல் பேசிக்கிலுள்ள நேட்டிவ் கண்ட்ரோல்கள் எல்லாமே ஆங்கில எழுத்துக்களான ASCII டெக்ஸ்ட்டை மட்டுமே ஏற்றுக்கொள்ளும். தமிழை உள்ளிடவோ, காண்பிக்கவோ முடியாது.

ஆனால் டாட்நெட்டில் உள்ள எல்லா கண்ட்ரோல்களுமே இயல்பாகவே யூனீகோடைக் கையாளும். எனவே, டாட்நெட்டுக்கும் மை எஸ்க்யூஎல்-லுக்கும் ஒரு சுபதின சுபவேளையில் தொடர்பு ஏற்படுத்தி ப்ராஜக்டை பெற்றெடுக்க ஆயத்தம் ஆனேன். சோதனை (யாருக்கு?) முயற்சிக்காக c# அப்ளிகேஷன் ஒன்று உருவாக்கி, தமிழ்ச் சொற்கள் சிலதை மை எஸ்க்யூஎல் டேட்டாபேசினுள் உள்ளிட்டு, உள்ளே இருப்பதைப் படித்துப் பார்க்க ஒரு சிறிய நிரல் எழுதினேன்.

வெற்றிகரமாக உள்ளிட்ட பிறகும், பார்க்கும் போது வெறும் கேள்விக்குறி மட்டுமே தெரிந்தது. கொடுத்த தகவல் சரிவரப் பதிப்பிக்கப்படவில்லை.

சரி, டாட்நெட்டுக்கும் மை எஸ்க்யூஎல்க்கும் தமிழ்க்குழந்தை பெற ஜாதகப்பொருத்தம் இல்லை என்றுதான் நினைக்கத் தோன்றியது.

ஒரு சில ஆராய்ச்சி(?!)க்குப் பின், என்ன தவறு, எது சரியான அணுகுமுறை என்பதை அறிந்து கொண்டேன். வேறு யாருக்கும் பயன்படுமோ இல்லையோ, குறைந்தபட்சம் எனக்கே மறந்தால் ஒரு ரெஃபரன்சாக இருக்க இந்தப் பதிவு.

SQL Serverஉடன் கூட OleDbConnection பயன்படுத்தித்தான் பழக்கம் என்பதால், OleDbConnectionஐயே முதலில் முயற்சித்தேன். ரன்-டைமில் கண்ணாபின்னா என்று திட்டு வாங்கியதுதான் மிச்சம், mysqlprov ஒழிக!

டாட்நெட்டில் தமிழுக்கான நிரல் என்று ஆரம்பித்ததும் முதலில் கவனிக்க வேண்டியது, ஃபார்ம் ஃபைலின் என்கோடிங்க். சாதாரணமாக ASCII கோப்பாகத்தான் ஒரு கோப்பு உருவாகும். .cs கோப்பை UTF-8 without signature வடிவில் முதலில் சேமிக்க வேண்டும். இல்லாவிட்டால் நிரலுக்குள் தமிழ்ச்சொற்கள் பயன்படுத்த முடியாது. File->Save formname.cs என்று தேர்ந்தெடுத்து Save optionஇல் Save with Encoding ஆப்ஷன் செலக்ட் பண்ணியவுடன், ஒரு ஆப்ஷன் லிஸ்ட் வரும். அதில் Unicode (UTF-8 without signature) என்பதைத் தேர்ந்தெடுக்கலாம்.

ஃபார்ம் ஃபைல் உருவாக்கியவுடன் டேட்டாபேசில் இரண்டு முக்கியமான பணிகள் இருக்கின்றன. அதாவது, தகவல்தளத்திலுள்ள டேபிள் UTF8 என்கோடிங்கில்தான் இருக்கிறது என்பதை உறுதி செய்து கொள்ள வேண்டும்.

புதிதாக ஒரு டேபிள் உருவாக்கினால், கீழ்க்கண்ட SQL Query வருவது போல் இருக்கவேண்டும்.


CREATE TABLE mytable (
tableID bigint(20) NOT NULL default '0',
namecolumn varchar(255) character set utf8 NOT NULL default '',
anothercolumn varchar(255) character set utf8 not null default ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


இதில் இருப்பது போல், ஃபீல்டுகளுக்கு character set utf8 என்பதும், டேபிளுக்கு charset=utf8 என்ற வரையரையும் மிகவும் முக்கியம்.

சரி, இது இவ்வாறு இருக்க, ஏற்கனவே உருவாக்கப்பட்டு புழக்கத்தில் உள்ள டேபிள் என்றால் என்ன செய்வது? அதற்கு, முதலில் டேபிளில் உள்ள ஃபீல்ட் எல்லாவற்றையும் utf8க்கு மாற்ற வேண்டும். பிறகு டேபிளை utf8க்கு மாற்றவேண்டும்.

alter table mytable modify column namecolumn varchar(255) character set utf8
alter table mytable character set utf8

ஒருவாறாக, டேபிள் உருவாக்கம் முடிந்தது. அடுத்ததாக, கோடிங்க்.

ஒரு ஃபார்மில் ஒரு டெக்ஸ்பாக்ஸ், ஒரு கமாண்ட் பட்டன் இருக்கிறது. கமாண்ட் பட்டனை க்ளிக் பண்ணினால், டெக்ஸ்ட்பாக்ஸில் இருக்கும் சொற்றொடர் டேட்டாபேசின் மூன்றாவது column (anothercolumn)ல் சேர்ப்பிக்கப்படும். முதல் ஃபீல்டான tableIDக்கும், இரண்டாவதான namecolumnக்கும் நிரலில் இருந்தே டேட்டா தருவது போல் அமைக்கலாம். இதனால், பயனரிடமிருந்து பெறப்பட்ட டேட்டா, ப்ரோக்ராமின் உள்ளேயே இருக்கும் டேட்டா இரண்டும் எவ்விதம் கையாளப்படும் என்பதைப் பரிசோதித்து அறிய முடியும்.

Mysql Connector/Net என்ற ட்ரைவர் பற்றி இப்பொழுது குறிப்பிடுவது சாலப்பொருந்தும். MySQL உருவாக்கியவர்களின் அதிகாரபூர்வமான வெளியீடு MySQL Connector/NET. இதை நிறுவியபின் MySqlConnection, MySqlCommand போன்ற ஆப்ஜகள் பயன்படுத்தி நேரடியாக ட்ரைவர், ப்ரொவைடர் எதுவும் இன்றி MySQL டேட்டாபேசுடன் தொடர்பு கொள்ளலாம். இது முழுக்க முழுக்க (முழிக்க முழிக்க) சுத்தமான, கலப்படமற்ற C# கொண்டு எழுதப்பட்டது.

பதிவிறக்கிக்கொள்ள, http://dev.mysql.com/downloads/connector/net/1.0.html

நிறுவிக்கொண்ட பின், Project->Add Reference சென்று MySQL Data லைப்ரரி ஃபைலை சேர்த்துக்கொள்ள வேண்டும். Component Nameல் இது இருக்காது. எனவே, அருகிலிருக்கும் Browse பட்டனை க்ளிக் பண்ணி, MySQL.Data.DLL கோப்பை தேர்ந்தெடுக்கவும். MySQL Connector/NET நிறுவப்பட்ட ஃபோல்டருக்குள் இந்த கோப்பு இருக்கும்.

பிறகு using MySql.Data.MySqlClient; என்ற டிக்ளரேஷனை நிரலின் ஹெடர் பகுதியில் சேர்த்துக்கொள்ள வேண்டும்.

இப்பொழுது code...

MySqlConnection con=new MySqlConnection("Data Source=சர்வரின்பெயர்;Database=டேட்டாபேசின் பெயர்;User ID=பயனர்ப்பெயர்;Password=கடவுச்சொல்;CHARSET=utf8");
con.Open();
MySqlCommand com1=new MySqlCommand("INSERT into mytable(tableID,namecolumn,anothercolumn) values(1,'கோடிங்கில் இருந்து தரப்படும் தமிழ் எழுத்து','"+txt.Text+"')",con);
com1.ExecuteNonQuery();
com1.Dispose();
txt.Text="Finished inserting "+txt.Text;
MySqlCommand com=new MySqlCommand("select namecolumn,anothercolumn from mytable",con);
MySqlDataReader dread=com.ExecuteReader();
while(dread.Read())
{
txt.Text=txt.Text+" "+dread[0].ToString()+" "+dread[1].ToString()+" --------- ";
}
dread.Close();
com.Dispose();
con.Dispose();


இதில் மெரூன் நிறத்தில் அடிக்கோடிடப்பட்டு இருக்கும் CHARSET=UTF8 என்ற வரையரை மிக மிக முக்கியம். அப்படி ஒரு சொல் இருந்தால்தான் நம்முடைய mysql கனெக்ஷன் யூனிகோட் அடிப்படையில் இருக்கும்.

மேற்குறிப்பிட்டவைகளில் ஏதேனும் ஒன்று தவறினாலும், டேட்டாபேசிலுள்ள டேபிளில் வெறும் கேள்விக்குறிகள்தான் சேமிக்கப்படும். 'என்ன இது, வெறும் கேள்விக்குறி கேள்விக்குறியாக இருக்கே? எல்லா டேட்டாவும் போச்சா?' என்று அதிர்ச்சியடைய நேரிடும். :-)

தொகுத்து பாய்ண்ட் பாய்ண்டாக சொல்லவேண்டுமென்றால்...

டாட்நெட் மற்றும் மை எஸ்க்யூஎல் கொண்டு தமிழ் சார்ந்த மென்பொருள் உருவாக்க:

  1. ஃபார்ம் ஃபைல் Save with encoding, Unicode (UTF-8 without signature) என்று சேமிக்கப்படவேண்டும். இல்லாவிட்டால் நிரலுக்குள் தமிழ்ச்சொற்கள் பயன்படுத்த முடியாது.
  2. கனெக்ஷன் ஸ்ட்ரிங்கில் CHARSET=UTF8 என்பது மிக, மிக முக்கியம். மை எஸ்க்யூஎல்லுடனான தொடர்பு யூனீகோட் அடிப்படையில் அமைய இக்குறிப்பீடு மிகவும் அவசியம்.
  3. டேபிள் உருவாக்கும் போது, ஃபீல்ட் பண்புகளில் character set=UTF8 என்ற வரையரை வேண்டும்
  4. டேபிள் encoding characterset=utf8 என்று இருக்குமாறு பார்த்துக்கொள்ள வேண்டும்



17 dharma adigal

ஜூப்பருப்பா
8/4/2005 3:36:29 AM      kvr     Home Page


அப்பாடி! :-)
8/4/2005 5:37:15 AM      சு. க்ருபா ஷங்கர்     Email    Home Page


அட. ஜாவச்ச்ரிப்ட் கொஇன்ஷமி நேர் தனோஒ
8/4/2005 5:54:16 AM      eswar     Email    Home Page


//குறைந்தபட்சம் எனக்கே மறந்தால் ஒரு ரெஃபரன்சாக இருக்க இந்தப் பதிவு//
ஆமாம் இப்படி பதிவு போட்டால்தான் தொலையாமல் இருக்கும்.. ஆனா ந்-ஆனெல்லாம் இதை செய்தால் அடிக்கவருவார்கள்

8/4/2005 7:16:18 AM      thaasu    


ஈஸ்வர்,

ஷங்கர், ராம்கி, நான் மூணு பேருமே இதே துறைலதான் டஸ்ட் கொட்டறோம். சொல்லிட்டேன் அக்காங்.

தாஸ், டைனமிக் ஃபாண்ட்க்கு ஸ்டைல்ஷீட் கோடையே 'ரெஃபரன்சா'தான் வெச்சு யூஸ் பண்ணறேன். நீங்க வேற

8/4/2005 7:33:37 AM      சு. க்ருபா ஷங்கர்     Email    Home Page


க்ருபா, புரியும்படியாக உள்ளது.
8/4/2005 9:42:19 AM      karthikramas     Email   


>>பிறகு டேபிளை உட்f8க்கு மாற்றவேண்டும்.

த்ஹிச் நொன்'ட் பெ நெசெச்சர்ய். Mய்ச்ஃல் அல்லொந்ச் யொஉ டொ ச்டொரெ ஊத்F-8 அண்ட் நொன்-உட்f இன் தெ சமெ டப்லெ. ஸொ இட் நொஉல்ட் சுffஇசெ இf யொஉ செட் தெ சொஉல்ம்ன்ச் டொ உட்f-8. ஸவெச் ச்பசெ ;)


>>>>ஈD=பயனர்ப்பெயர்;Pஅச்ச்நொர்ட்=கடவுச்சொல்;ஸ்ரீHஆற்ஸேத்=உட்f8")

Hம்ம்ம்... ஈ ஹவெ ட்ரிஎட் செரெண்டிபிட்ய்(ச்9ய்.சொம்) ஒன் ம்ய் லொசல் செர்வெர் அண்ட் டொன்'ட் ரெமெம்பெர் ஹவிங் திச் செட். ஞ்ஹட் ஹப்பென்ச் ந்ஹென் யொஉ சொன்னெச்ட் நிதொஉட் தெ உட்f8 ஷர்செட்?

.:ட்Yணொ:.

8/4/2005 11:38:29 AM      .:dYNo:.    


>>தூஈªதூஈநதூஈஎதூஈ•தூஉ தூஈŸதூஉக்ஷதூஈªதூஈநதூஈஐதூஉஜ் utf8தூஈ•தூஉதூஈ•தூஉ தூஈஈதூஈததூஈஎதூஉதூஈஎதூஈஓதூஉக்ஷதூஈ£தூஉதூஈŸதூஉதூஈஈதூஉ.

This won't be necessary. Mysql allows you to store UTF-8 and non-utf in the same table. So it would suffice if you set the coulmns to utf-8. Saves space ;)


>>>>ID=தூஈªதூஈஉதூஈ©தூஈஊதூஉதூஈªதூஉதூஈªதூஉஹதூஈஉதூஈஊதூஉ;Password=தூஈ•தூஈŸதூஈஓதூஉதூஈஞுதூஉதூஈஞுதூஉஸ்தூஈஏதூஉ;CHARSET=utf8")

Hmmm... I have tried serendipity(s9y.com) on my local server and don't remember having this set. What happens when you connect without the utf8 charset?

.:dYNo:.

8/4/2005 11:41:37 AM      .:dYNo:.    


ஹாய்ய்ய்ய்ய்! கார்த்திக்! ஹாக்ஸா ப்ளேடை நினைத்துக்கொண்டேதான் எழுதினேன். புரியும்படியாக உள்ளதுன்னு சொன்னதைக் கேட்டதும் சந்தோஷமா இருக்கு. அப்பறம், என்ன பொண்ணு கடைச்சுதா? ம்ம்ம்ம். சீக்கரம், ஈழநாதனும் ரேஸ்ல இருக்கார். :-))
8/4/2005 2:01:02 PM      S Krupa Shankar     Email    Home Page


Dyno, I am unable to mix english & tamil in my comment section at this moment. Since yours is in English... eppadiyo ezuththu kootti naanum english-laye sollidarane.

This won't be necessary. Mysql allows you to store UTF-8 and non-utf in the same table. So it would suffice if you set the coulmns to utf-8. Saves space ;)

No dyno, there is problem with inserting data itself if the table is not UTF-8. I wasted 3-4 days just because it was not UTF8.

Also, if the MySQL is in a Linux environment, there is no problem with the .NET running on Windows; enough if the columns are UTF8.

With regard to "saves space", are you sure? I dont think so. Because, space wont be allocated for table definition as such on the basis of encoding type, right? Is not the encoding type is just a specification for data exchange mode?

Hmmm... I have tried serendipity(s9y.com) on my local server and don't remember having this set. What happens when you connect without the utf8 charset?
If the connection string does not have a "charset=utf8", the Tamil data exchanged between the DB Server and the .NET app is simply question marks. File-based database engines somehow assumes the encoding type based on the operating system default. I am not sure about server-based DB engines. The connection object assumes it is a swedish/latin encoding if the connection string does not explicitly contain charset info. I was able to fix the problem only after I gave charset as UTF at last.

I came to know about serendipity just through you. However, Obviously it is PHP, there is no issue with PHP and MySQL as of now even in Windows environment (as PHP has built-in support for MySQL).

8/4/2005 2:20:19 PM      S Krupa Shankar     Email    Home Page


hey, i cant seem to find links to your old blog entries anymore. Did ya remove them?
8/11/2005 10:10:51 AM      mexicomeat     Email    Home Page


மெக்ஸிகோ மீட், எல்லாமே அப்படியேதான் இருக்கு. நான் பழசுக்கெல்லாம் லிங்க் எதுவும் குடுக்கலை. இந்த ப்ளாக் கோடிங்க் எழுதும்போதே பண்ணலை. சும்மா கடைசி நாலு ஆர்ட்டிகில்ஸ்க்கு மட்டும் வலது பக்கம் லின்க்க் குடுத்து இருக்கேன். அவ்வளவுதான்.
8/12/2005 3:45:35 AM      சு. க்ருபா ஷங்கர்     Email    Home Page


கிருபா நான் கார்த்திக்குக்கெல்லாம் காத்திருக்கப் போவதில்லை அவசர உலகில் அண்ணனை தம்பி முந்தினால் தான் என்னவாம்
8/12/2005 6:31:01 AM      ஈழநாதன்     Email   


நல்ல வேளை ஈழநாதன். என் ரூட்டு க்ளியர். ஐயோ பாவம் கார்த்திக்.

அப்பாலிக்கா, ஈழநாதன். 'சே' எங்க ஊர்ல பாக்கவே முடியல. ஊருக்கு நீங்க போஇட்டு வந்தது பத்தின பதிவை பதிப்பிச்ச அன்னிக்கே படிச்சுட்டேன், ப்ராக்ஸி சர்வர் வெச்சு. ஆனா கமெண்ட் எல்லாம் குடுக்க முடியலை. எங்க ஐ.எஸ்.பி.-ல, யாழ்.நெட், தமிழா.நெட் எல்லாம் தடை பண்ணிட்டாங்க போலருக்கு. :-((

8/12/2005 8:46:28 AM      சு. க்ருபா ஷங்கர்     Email    Home Page


ப்ல்ழ் கிவெ மெ சம்ப்லெ சொடெ டொ ப்ஹ்ப்-ம்ய்ச்ஃல்
டமில் ச்டொரகெ ப்ரொசெடுரெ ஒர் கிவெ உர் சொன்தச்ட் நும்பெர் இ டிஅல்/சல்ல் யொஉ.........
இ நன்த் இம்மெடிஅடெல்ய் இf இட் இச் பொச்சிப்லெ
தன்க் உ இன் அட்வன்செ

4/8/2006 9:44:09 AM      suresh     Email   


நெரம் வெனும்
1/5/2010 4:32:50 AM      59.90.1.99    


ஹி
8/20/2010 2:19:15 PM      125.17.164.170    


ஷைளிஷ ஷைலாஷ, ஷைழாஷ, ஷௌஷ ஷைவாஷௌ ஷௌஷௌ .....
ஷௌலீஷ ஷௌ?ஷை, ஷை ஷைɧஷை ஷை ஷௌயிஷௌ?

ஷை ஷௌ
(ஷௌஷ Ӹஷௌஷௌ):
ஷௌஷௌ:
Ũஷௌஷௌ/ஷௌஷௌஷ:
ஷௌஷௌ ஷէஷை, ஷௌèஷ! Preview
Listed in tamizmaNam.com, where bloggers and readers meet :: தமிழ்மணம்.காம்-ல் பட்டியலிடப்பட்டு, திரட்டப்படுகிறது
ஷைǨஷை ஷைΦஷைறி
(ஷௌஷலாஷ ஷௌஷ ஷௌஷௌ யாஷ ஷؾஷ??!!!)

RSS Feed
(ஷௌஷலாஷ ஷௌஷை ஷைரா ஷைரி¨ஷ?)

Powered By

(ஷௌஷ ஷௌ...ஷௌ ஷௌ?)