PDA

View Full Version : سوال: فيلدهاي سازگار با utf-8



ravand
جمعه 21 بهمن 1390, 17:10 عصر
سلام
كد زير رو نگاه كنيد:

<?php
$con = mysql_connect("localhost","root","");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
// Create database
if (mysql_query("CREATE DATABASE testi",$con))
{
echo "Database created";
}
else
{
echo "Error creating database: " . mysql_error();
}
// Create table
mysql_select_db("testi", $con);
$sql = "CREATE TABLE Persons
(
FirstName varchar(15),
LastName varchar(15),
Age int
)";
// Execute query
mysql_query($sql,$con);
mysql_close($con);
?>

اين كدها مشكلي نداره و ميشه باهاش ديتابيس ، جدول و فيلد رو ساخت ولي يه مشكل داره اونم اينكه جدول و فيلدي كه ميسازه با utf-8 سازگار نيست و اگه يه نفر بياد مطلب فارسي واردش كنه چون با فارسي سازگار نيست نوشته ها بهم ريخته ميشه.
الان اگه توي phpmyadmin در قسمت جدول Collation دقت كنيد بعد از اجرا اين كد مي نويسه :latin1_swedish_ci كه حتما بايد utf8_persian_ci باشد.
توي اين كدها بايد از چه كدي استفاده كنم؟
متشكرم

mohsen24000
جمعه 21 بهمن 1390, 21:20 عصر
به این صورت استفاده کنید:


FirstName varchar(15) character set utf8 collate utf8_persian_ci

ravand
جمعه 21 بهمن 1390, 22:02 عصر
آقا اين كاري كه شما گفتيد كردم نشد!

<?php
$con = mysql_connect("localhost","root","");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
// Create database
if (mysql_query("CREATE DATABASE testi",$con))
{
echo "Database created";
}
else
{
echo "Error creating database: " . mysql_error();
}
// Create table
mysql_select_db("testi", $con);
$sql = "CREATE TABLE Persons
(
FirstName varchar(15) character set utf8 collate utf8_persian_ci,
LastName varchar(15) character set utf8 collate utf8_persian_ci
)";
// Execute query
mysql_query($sql,$con);
mysql_close($con);
?>

mohsen24000
جمعه 21 بهمن 1390, 22:32 عصر
منظورتون از نشد چیه!؟
یه راهکار ساده برای تست، شما داخل خود PHPMyAdmin یک تیبل دلخواه با شرایطی که مدنظرتون هست رو ایجاد کنید اونوقت با Create PHP Code رشته کوئری رو بدست آورده و در برنامه خودتون تست کنید که آیا تیبل اون طوری که میخواهید ساخته میشه یا خیر!؟
(http://qaza.ir:2082/cpsess4609128105/3rdparty/phpMyAdmin/import.php?db=qaza_ganjineh&table=logs&sql_query=%0A+CREATE++TABLE++%60qaza_ganjineh%60.% 60logs1%60+%28++%60id%60+bigint%28+20++%29++unsign ed+NOT++NULL++auto_increment+%2C%0A+%60ip%60+varch ar%28+15++%29++character++set+latin1+collate+latin 1_general_ci+NOT++NULL+%2C%0A+%60win%60+varchar%28 +40++%29++character++set+latin1+collate+latin1_gen eral_ci+NOT++NULL+%2C%0A+%60cname%60+varchar%28+30 ++%29++character++set+utf8+collate+utf8_unicode_ci +NOT++NULL+%2C%0A+%60log_count%60+int%28+10++%29++ unsigned+NOT++NULL+%2C%0A+%60log_time%60+timestamp +NOT++NULL++default+CURRENT_TIMESTAMP++on++update+ +CURRENT_TIMESTAMP+%2C%0A+PRIMARY++KEY+%28++%60id% 60++%29+%2C%0A+UNIQUE++KEY++%60ip%60+%28++%60ip%60 +%2C++%60cname%60++%29++%29+ENGINE++%3D++MyISAM++D EFAULT+CHARSET++%3D+latin1%3B&show_query=1&show_as_php=1&token=361e547c6196267ce10459a007fe1fbe)

ravand
شنبه 22 بهمن 1390, 10:12 صبح
تا اينجا پيش رفتم :

<?php
$con = mysql_connect("localhost","root","");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
// Create database
if (mysql_query("CREATE DATABASE testi",$con))
{
echo "Database created";
}
else
{
echo "Error creating database: " . mysql_error();
}
// Create table
mysql_select_db("testi", $con);
$sql = "CREATE TABLE Persons
(
`FirstName` VARCHAR( 21 ) CHARACTER SET utf8 COLLATE utf8_persian_ci NOT NULL ,
`LastName` VARCHAR( 21 ) CHARACTER SET utf8 COLLATE utf8_persian_ci NOT NULL
)ENGINE = INNODB CHARACTER SET utf8 COLLATE utf8_persian_ci";
// Execute query
mysql_query($sql,$con);
mysql_close($con);
?>
تونستم فيلد ها رو همه رو با utf-8 سازگار كنم ولي نميدونم چرا پايين جدول نوشته شده :latin1_swedish_ci
به تصويري كه ضميمه كردم دقت كنيد:
82420

ravand
شنبه 22 بهمن 1390, 10:29 صبح
يه سوال ديگه ، هنوز من نمي دونم ENGINE رو چه گزينه اي انتخاب كنم؟INNODB خوبه يا چيز ديگه اي بذارم؟

mbf5923
شنبه 22 بهمن 1390, 10:36 صبح
چون Charset دیتابیستون Persian نیست
برای اینکه Persian بشه همون اول که نام دیتابیس رو برای ساختن توی PHPMyAdmin وارد میکنید باید Charset رو هم تعیین کنید
توی کد هم از این استفاده میشه برای این کار:

DEFAULT CHARSET=utf8 COLLATE=utf8_persian_ci

mbf5923
شنبه 22 بهمن 1390, 10:48 صبح
این سئوال رو من هم قبلا پرسیدم:
INNODB بیشترین امکانات رو در میان انجین ها داره ولی سرعتش پایین تره
MyISAM سرعت خوب و امکانات خوب و پشتیبانی از FullText
MEMORY برای ذخیره موقت داده ها
ARCHIVE ذخیره بلند مدت و یکی از قابلیت های سرچ و یا Insert رو نداشت دقیق یادم نیست

mbf5923
شنبه 22 بهمن 1390, 10:58 صبح
راستی:
انجین MyISAM فقط میتونه تعداد 4,284,867,296 ردیف اطلاعات رو در خودش ذخیره کنه و نهایتا براش 64تا ایندکس مشخص کنید
توی INNODB این محدودیت ها رو ندارید و تنها مشکلش؟! اینه که FullText ساپورت نمیکنه و قابلیت فشرده سازی اطلاعات رو هم نداره