امتیاز موضوع:
  • 1 رأی - میانگین امتیازات: 5
  • 1
  • 2
  • 3
  • 4
  • 5
تغییر Collation
نویسنده پیام
blackhat.net آفلاین
تازه وارد

ارسال‌ها: 11
موضوع‌ها: 4
تاریخ عضویت: تير ۱۳۸۸

تشکرها : 11
( 1 تشکر در 1 ارسال )
ارسال: #1
تغییر Collation
سلام
چطور میتونم یه تیبل که Collation اش روی latin1_swedish_ci هست رو به utf8_general_ci تبدیل کنم در حالی که اطلاعات داخل تیبل هم Convert بشه به UTF8 و مشکلی با متن های فارسی نباشه؟

پیشاپیش ممنون از جوابتون
۱۰-مرداد-۱۳۸۸, ۲۰:۴۱:۵۹
ارسال‌ها
پاسخ
far_222000 آفلاین
مدير بخش ديتابيس
*****

ارسال‌ها: 955
موضوع‌ها: 68
تاریخ عضویت: شهریور ۱۳۸۴

تشکرها : 468
( 1249 تشکر در 422 ارسال )
ارسال: #2
RE: تغییر Collation
ببین با این دستور می تونی:
کد:
ALTER DATABASE <dbname> COLLATE Latin1_General_BIN
ولی توی فروم MSDN، یه نفر به مشکل برخورده، من وقت نکردم کل تاپیک رو بخونم، خودت بخون ببین چی دستگیرت می شه، اینم لینکش: http://social.msdn.microsoft.com/forums/...42eb05464/

پارک24
مرجع خرید و فروش خودرو
۱۱-مرداد-۱۳۸۸, ۰۹:۳۶:۰۳
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : blackhat.net
ha_60 آفلاین
بنيانگذار سايت
******

ارسال‌ها: 4,637
موضوع‌ها: 216
تاریخ عضویت: آبان ۱۳۸۳

تشکرها : 560
( 6556 تشکر در 2385 ارسال )
ارسال: #3
RE: تغییر Collation
باید اکسپرت بگیری و مطمئن بشی که اکسپرت که گرفتی درسته یعنی انکودینگش utf-8 هست
بعد با یه ادیتور ریپلیس کنی کالیشن و انکودینگ رو
کار دردسر داریه تقریبا هیچ روش دیگه ای هم نداره یا من بلد نیستم

هادی امین زاده
دیدن چیزی که همه می بینند هنر نیست
بانک اطلاعات صنایع ایران.
۱۱-مرداد-۱۳۸۸, ۱۱:۰۹:۳۱
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : blackhat.net
blackhat.net آفلاین
تازه وارد

ارسال‌ها: 11
موضوع‌ها: 4
تاریخ عضویت: تير ۱۳۸۸

تشکرها : 11
( 1 تشکر در 1 ارسال )
ارسال: #4
RE: تغییر Collation
فایل بکاپ دیتابیس بیشتر از 1 گیگ حجمش میشه
راه دیگه ای نیست؟
انکودینگ پیج های سایت utf8 هست و اطلاعات بصورت unicode ذخیره شده
نمیشه مستقیم collection رو utf8_general_ci کرد؟
کد:
ALTER DATABASE <dbname> COLLATE utf8_general_ci

اینو تست کردم همش علامت سوال شد اینجوری: ؟؟؟ ؟؟؟؟؟؟ ؟؟؟ ؟؟؟؟؟؟ ؟؟؟؟؟
(آخرین ویرایش در این ارسال: ۱۳-مرداد-۱۳۸۸, ۲۰:۳۷:۴۸، توسط blackhat.net.)
۱۳-مرداد-۱۳۸۸, ۲۰:۳۵:۵۹
ارسال‌ها
پاسخ
ha_60 آفلاین
بنيانگذار سايت
******

ارسال‌ها: 4,637
موضوع‌ها: 216
تاریخ عضویت: آبان ۱۳۸۳

تشکرها : 560
( 6556 تشکر در 2385 ارسال )
ارسال: #5
RE: تغییر Collation
تقریبا راه دیگه ای نیست
به همون شکل علامت سوال در می یاد یه راه دیگه هم هست تک تک فیلد ها رو به باینری تبدیل کنی بعد به string با انکودینگ درست
که اینم کار سختیه

هادی امین زاده
دیدن چیزی که همه می بینند هنر نیست
بانک اطلاعات صنایع ایران.
۱۴-مرداد-۱۳۸۸, ۰۹:۱۳:۰۶
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : blackhat.net
far_222000 آفلاین
مدير بخش ديتابيس
*****

ارسال‌ها: 955
موضوع‌ها: 68
تاریخ عضویت: شهریور ۱۳۸۴

تشکرها : 468
( 1249 تشکر در 422 ارسال )
ارسال: #6
RE: تغییر Collation
چند تا سؤال:
1. شما چرا می خوای Collation رو عوض کنی؟
2. این کار فقط باید یک بار انجام بشه؟
3. چند تا Table داری و حدوداً هر کدوم چند تا Field دارن؟

پارک24
مرجع خرید و فروش خودرو
۱۴-مرداد-۱۳۸۸, ۱۰:۵۹:۰۰
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : blackhat.net
blackhat.net آفلاین
تازه وارد

ارسال‌ها: 11
موضوع‌ها: 4
تاریخ عضویت: تير ۱۳۸۸

تشکرها : 11
( 1 تشکر در 1 ارسال )
ارسال: #7
RE: تغییر Collation
نقل قول: یه راه دیگه هم هست تک تک فیلد ها رو به باینری تبدیل کنی بعد به string با انکودینگ درست
که اینم کار سختیه
اینو بیشتر توضیح میدی؟
-----------------------------------------------------------------
far_222000:

1- برای اینکه بعضی کاراکتر های یونیکد در دیتابیس خراب میشن
دوما اگه بخوام اطلاعات رو با برنامه ای مثل phpmyadmin ویرایش کنم چون utf8 داخل latin1_swedish هست قابل خوندن نیست و اینجوری توی phpmyadmin نشون داده میشه: میزبانی وب Ùˆ Ø
بعد از ویرایش هم تیبل ها همشون به هم میریزه و اطلاعات علامت سوال میشن

2- بله.
بعضی از تیبل های اولیه توسط یه برنامه نویس دیگه درست شده بودن که حالا رفته
و مسئولیت کل دیتابیس به عهده منه و نیاز هست به حالت استاندارد برشون گردونم.

3- 20 تا تیبل ، هر کدوم تعداد متفاوتی بین 5 تا 18 تا فیلد دارن
و در دیتابیس چندین هزار رکورد وجود داره.
راستی بعضی از تیبل ها هم دارای collection درست (utf8_general_ci) هستن
اما بعضی ها که میخوام درست بشن latin_swedish هستن
و اینو هم مجدد بگم که اطلاعات تمام تیبل ها (هر دو نوع بالا) با انکودینگ utf8 ذخیره شدن

الان یه فکری به سرم زد....
نمیشه مثلا با یه اسکریپت PHP اطلاعات رو بخونیم و تو یه تیبل دیگه بریزیم؟
یه اسکریپتی مثل bigdump
(آخرین ویرایش در این ارسال: ۱۴-مرداد-۱۳۸۸, ۱۵:۱۳:۵۸، توسط blackhat.net.)
۱۴-مرداد-۱۳۸۸, ۱۵:۰۷:۰۳
ارسال‌ها
پاسخ
PouriaAmid آفلاین
مدیر بازنشسته
*****

ارسال‌ها: 272
موضوع‌ها: 15
تاریخ عضویت: شهریور ۱۳۸۳

تشکرها : 34
( 311 تشکر در 133 ارسال )
ارسال: #8
RE: تغییر Collation
اينجا رو ببين
کد php:
<?php
 
// this script will output the queries need to change all fields/tables to a different collation
// it is HIGHLY suggested you take a MySQL dump prior to running any of the generated
// this code is provided as is and without any warranty
 
die("Make a backup of your MySQL database then remove this line");
 
set_time_limit(0);
 
// collation you want to change:
$convert_from 'latin1_swedish_ci';
 
// collation you want to change it to:
$convert_to   'utf8_general_ci';
 
// character set of new collation:
$character_set'utf8';
 
$show_alter_table true;
$show_alter_field true;
 
// DB login information
$username 'user';
$password 'pass';
$database 'table';
$host     'localhost';
 
mysql_connect($host$username$password);
mysql_select_db($database);
 
$rs_tables mysql_query(" SHOW TABLES ") or die(mysql_error());
 
print 
'<pre>';
while (
$row_tables mysql_fetch_row($rs_tables)) {
    
$table mysql_real_escape_string($row_tables[0]);
    
    
// Alter table collation
    // ALTER TABLE `account` DEFAULT CHARACTER SET utf8
    
if ($show_alter_table) {
        echo(
"ALTER TABLE `$table` DEFAULT CHARACTER SET $character_set;\r\n");
    }
 
    
$rs mysql_query(" SHOW FULL FIELDS FROM `$table` ") or die(mysql_error());
    while (
$row=mysql_fetch_assoc($rs)) {
        
        if (
$row['Collation']!=$convert_from)
            continue;
 
        
// Is the field allowed to be null?
        
if ($row['Null']=='YES') {
            
$nullable ' NULL ';
        } else {
            
$nullable ' NOT NULL';
        }
 
        
// Does the field default to null, a string, or nothing?
        
if ($row['Default']==NULL) {
            
$default " DEFAULT NULL";
        } else if (
$row['Default']!='') {
            
$default " DEFAULT '".mysql_real_escape_string($row['Default'])."'";
        } else {
            
$default '';
        }
 
        
// Alter field collation:
        // ALTER TABLE `account` CHANGE `email` `email` VARCHAR( 50 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL
        
if ($show_alter_field) {
            
$field mysql_real_escape_string($row['Field']);
            echo 
"ALTER TABLE `$table` CHANGE `$field` `$field$row[Type] CHARACTER SET $character_set COLLATE $convert_to $nullable $default; \r\n";
        }
    }
}
 
?>
منبع هم اينجاست
http://www.phpwact.org/php/i18n/utf-8/mysql

Root is not accessible
(آخرین ویرایش در این ارسال: ۱۴-مرداد-۱۳۸۸, ۱۸:۱۷:۱۲، توسط PouriaAmid.)
۱۴-مرداد-۱۳۸۸, ۱۸:۱۶:۱۳
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : blackhat.net
ha_60 آفلاین
بنيانگذار سايت
******

ارسال‌ها: 4,637
موضوع‌ها: 216
تاریخ عضویت: آبان ۱۳۸۳

تشکرها : 560
( 6556 تشکر در 2385 ارسال )
ارسال: #9
RE: تغییر Collation
اونی که گفتم تایپ هر فیلدی که استرینگ هست رو بکن باینری دوباره برش گردون به استرینگ تو قسمت استراکچر تیبل
روش استفاده از یه کد php هم شدنیه

هادی امین زاده
دیدن چیزی که همه می بینند هنر نیست
بانک اطلاعات صنایع ایران.
۱۵-مرداد-۱۳۸۸, ۰۹:۵۹:۲۸
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : blackhat.net


پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 2 مهمان

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS