اشتباهات متداول در ارتباط با کاراکترهای فارسی در دیتابیس MySQL

بعد از SET NAMES نیازی به استفاده از SET character_set_connection نیست.

A SET NAMES ‘x’ statement is equivalent to these three statements:

SET character_set_client = x;
SET character_set_results = x;
SET character_set_connection = x;

Setting each of these character set variables also sets its corresponding collation variable to the default correlation for the character set. For example, setting character_set_connection to x also sets collation_connection to the default collation for x. It is not necessary to set that collation explicitly.

همونطور که میبینید، دستور SET NAMES درواقع سه دستور دیگه رو اجرا میکنه که SET character_set_connection هم جزو اونهاست. بنابراین نیازی نیست ما دوباره دستور SET character_set_connection رو اجرا کنیم.

ضمنا بعضیا ممکنه بعد از دستور SET NAMES از دستور SET CHARACTER SET استفاده بکنن که این اصلا کلا غلط هست و ممکنه مشکلاتی رو بوجود بیاره. چون درواقع دو دستور SET NAMES و SET CHARACTER SET هرکدوم یک جور این تنظیمات رو اعمال میکنن که باعث میشه اثر دستور دیگه تغییر بکنه. اون تنظیماتی هم که تغییری نمیکنن، در هر دو دستور وجود دارن و به یک صورت هستن، پس نیازی نیست ما از هر دو دستور بصورت همزمان استفاده کنیم. فقط از یکیش استفاده کنید. تاجایی که من دیدم، در همه جا SET NAMES دستور درست و کافی هست؛ اگر بعدش اشکالی هم هست اول باید جای دیگه دنبال علتش گشت یا شاید بعلت این بوده که ما قبلا کاراکترهایی رو به روش نادرست وارد دیتابیس کردیم و حالا با اون داده ها مشکل داریم. بهرصورت همیشه فقط یکی از این دو دستور معنا داره، نه دوتاش با هم! چون اونی که بعد میاد اثر دستور قبلی رو خنثی میکنه.

SET CHARACTER SET is similar to SET NAMES but sets character_set_connection and collation_connection to character_set_database and collation_database. A SET CHARACTER SET x statement is equivalent to these three statements:

SET character_set_client = x;
SET character_set_results = x;
SET collation_connection = @@collation_database;

Setting collation_connection also sets character_set_connection to the character set associated with the collation (equivalent to executing SET character_set_connection = @@character_set_database). It is not necessary to set character_set_connection explicitly.

منبع: http://dev.mysql.com/doc/refman/5.0/…onnection.html

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

*

شما می‌توانید از این دستورات HTML استفاده کنید: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>