PDA

View Full Version : مشکل داشتن با کاراکتر های فارسی در دیتابیس



ho3ein.3ven
چهارشنبه 28 اسفند 1392, 15:19 عصر
سلام . من یه دیتابیس دارم که اطلاعات یکی از فیلد های اون به این صورت : ÍÑÝ Çæá ÇáÝÈÇí ÇäáíÓí¡ ÍÑÝ ÇÖÇÝå ãËÈÊ .

وقتی تو برنامه این فیلد رو می خونم بازم مقدارش همینه .
از کلاس Reshape هم استفاده کردم بازم مشکل حل نشد.

چطور می تونم این مشکل رو حل کنم ؟

#root#
چهارشنبه 28 اسفند 1392, 15:41 عصر
مدیر جان لطفا پاک کن

Mojtaba.Shateri
چهارشنبه 28 اسفند 1392, 16:01 عصر
به نظر میاد collation دیتابیست درست ست نشده. collation کدینگ ذخیره اطلاعات در دیتابیسه. یعنی اگه انگلیسی باشه ، شما اگه فارسی در جداولت ذخیره کنی کدینگش بهم میریزه.
بایستی در تنظیمات دیتابیست این مورد رو روی utf8_persian_ci تنظیم کنی.
دستور زیر دیتابیس فارسی برات میسازه :
CREATE DATABASE `dbname`
CHARACTER SET 'utf8'
COLLATE 'utf8_persian_ci';

ho3ein.3ven
پنج شنبه 29 اسفند 1392, 00:34 صبح
به نظر میاد collation دیتابیست درست ست نشده. collation کدینگ ذخیره اطلاعات در دیتابیسه. یعنی اگه انگلیسی باشه ، شما اگه فارسی در جداولت ذخیره کنی کدینگش بهم میریزه.
بایستی در تنظیمات دیتابیست این مورد رو روی utf8_persian_ci تنظیم کنی.
دستور زیر دیتابیس فارسی برات میسازه :
CREATE DATABASE `dbname`
CHARACTER SET 'utf8'
COLLATE 'utf8_persian_ci';




میشه بیشتر توضیح بدین ؟
این تنضیمات در کجا قرار داره ؟

Mojtaba.Shateri
پنج شنبه 29 اسفند 1392, 11:07 صبح
قبل از اینکه دیتابیسی ایجاد کنی بایستی دامنه کاراکترهایی که قرار هست در اون ذخیره بشه رو مشخص کنی.
این کار با تنظیم Collation در هنگام ساخت و یا تغییر تنظیمات دیتابیس انجام میشه. از اونجایی که شما میخوای کاراکترهای فارسی در دیتابیست ذخیره کنی ، پس باید collation روی گزینه ای تنظیم بشه که دامنه کاراکترهای فارسی رو شامل بشه.
یکی از این گزینه ها utf8_persian_ci هستش.
با این حساب شما میتونی روی این گزینه Collation خودتو تنظیم کنی.
البته گزینه های دیگه ای هم هست که ممکنه دوستان پیشنهاد بدن.
حالا برای اینکه تغییر بدی Collation دیتابیستو دو راه بلدم:
راه اول : از روش اسکریپت
وارد SSMS میشی و روی دیتابیست راست کلیک میکنی و New Query میزنی. در صفحه جدیدی که باز میشه کد زیر رو وارد میکنی و بعد F5 میزنی تا اجرا بشه.
ALTER DATABASE yourDB
COLLATE utf8_persian_ci ;
GO


راه دوم اینکه روی دیتابیست کلیک راست کنی و Properties بزنی. در کادری که باز میشه گزینه Options کلیک کنی و Collation میبینی .
کافیه لیست رو باز کنی و گزینه utf8_persian_ci را انتخاب کنی. و بعد اوکی کنی.

نکته اینکه اگه اطلاعات داخل دیتابیست مهم نیست جداولتو Truncate کن.

smemamian
پنج شنبه 29 اسفند 1392, 11:31 صبح
@Mojtaba.Shateri (http://barnamenevis.org/member.php?302800-Mojtaba-Shateri) :

از پاسختون تشکر می کنم. Sqlite از 3 نوع Collation پشتیبانی می کنه :


[*=1] BINARY : که به صورت پیش فرض همین مورد انتخاب می شود.
[*=1] LOCALIZED : که با توجه به منطقه فعلی سیستم تغییر می کند.
[*=1] UNICODE : همه دوستان به این مورد آشنایی دارند.

ho3ein.3ven
پنج شنبه 29 اسفند 1392, 13:12 عصر
قبل از اینکه دیتابیسی ایجاد کنی بایستی دامنه کاراکترهایی که قرار هست در اون ذخیره بشه رو مشخص کنی.
این کار با تنظیم Collation در هنگام ساخت و یا تغییر تنظیمات دیتابیس انجام میشه. از اونجایی که شما میخوای کاراکترهای فارسی در دیتابیست ذخیره کنی ، پس باید collation روی گزینه ای تنظیم بشه که دامنه کاراکترهای فارسی رو شامل بشه.
یکی از این گزینه ها utf8_persian_ci هستش.
با این حساب شما میتونی روی این گزینه Collation خودتو تنظیم کنی.
البته گزینه های دیگه ای هم هست که ممکنه دوستان پیشنهاد بدن.
حالا برای اینکه تغییر بدی Collation دیتابیستو دو راه بلدم:
راه اول : از روش اسکریپت
وارد SSMS میشی و روی دیتابیست راست کلیک میکنی و New Query میزنی. در صفحه جدیدی که باز میشه کد زیر رو وارد میکنی و بعد F5 میزنی تا اجرا بشه.
ALTER DATABASE yourDB
COLLATE utf8_persian_ci ;
GO


راه دوم اینکه روی دیتابیست کلیک راست کنی و Properties بزنی. در کادری که باز میشه گزینه Options کلیک کنی و Collation میبینی .
کافیه لیست رو باز کنی و گزینه utf8_persian_ci را انتخاب کنی. و بعد اوکی کنی.

نکته اینکه اگه اطلاعات داخل دیتابیست مهم نیست جداولتو Truncate کن.

با تشکر به خاطر پاسخ کاملتون .
ببخشید شما با چه برنامه ای دیتابیس رو باز می کنین ؟ من با navicat بازش می کنم و این مراحل رو پیدا نکردم .
روش اول هم نشد .
بازم ممنون بابت پاسخ

Mojtaba.Shateri
پنج شنبه 29 اسفند 1392, 13:54 عصر
@Mojtaba.Shateri (http://barnamenevis.org/member.php?302800-Mojtaba-Shateri) :

از پاسختون تشکر می کنم. Sqlite از 3 نوع Collation پشتیبانی می کنه :


[*=1] BINARY : که به صورت پیش فرض همین مورد انتخاب می شود.
[*=1] LOCALIZED : که با توجه به منطقه فعلی سیستم تغییر می کند.
[*=1] UNICODE : همه دوستان به این مورد آشنایی دارند.



ممنون از توضیحتون :)

Mojtaba.Shateri
پنج شنبه 29 اسفند 1392, 13:58 عصر
با تشکر به خاطر پاسخ کاملتون .
ببخشید شما با چه برنامه ای دیتابیس رو باز می کنین ؟ من با navicat بازش می کنم و این مراحل رو پیدا نکردم .
روش اول هم نشد .
بازم ممنون بابت پاسخ

توضیحات من درباره SQL SERVER بود. از محیط SQL Server Management Studio توضیح دادم.

ho3ein.3ven
پنج شنبه 29 اسفند 1392, 14:59 عصر
توضیحات من درباره SQL SERVER بود. از محیط SQL Server Management Studio توضیح دادم.

ببخشید ولی دیتابیس من SQLITE هست .

Mojtaba.Shateri
پنج شنبه 29 اسفند 1392, 16:08 عصر
ببخشید ولی دیتابیس من SQLITE هست .

با دستور AlterTable Database میتونی ویژگیهای دیتابیستو عوض کنی. Collation از این ویژگیها مستثنا نیست.
توی برنامه مدیریت دیتابیست Query جدید بزن و دستورو اجرا کن.
اگر هم خطایی داد متن خطاشو بنویسید

ho3ein.3ven
جمعه 01 فروردین 1393, 20:07 عصر
با دستور AlterTable Database میتونی ویژگیهای دیتابیستو عوض کنی. Collation از این ویژگیها مستثنا نیست.
توی برنامه مدیریت دیتابیست Query جدید بزن و دستورو اجرا کن.
اگر هم خطایی داد متن خطاشو بنویسید

سلام . خطا داد :
[SQL] AlterTable main


[Err] 1 - near "AlterTable": syntax error