PDA

View Full Version : ورود اطلاعات فارسی به دیتابیس



jeus
پنج شنبه 20 خرداد 1389, 00:53 صبح
من با یک مشکل مواجه شدم و اینکه بعد از ورود اطلاعات به دیتابیس اونها رو به صورت علامت سوال نشون می ده و من دارم از JEE6 و JSF استفاده می کنم .
مطمئنا مشکل از unicode اما چیرو باید تغییر بدم تا درست شه
ممنونم

rezatashtboland
پنج شنبه 20 خرداد 1389, 04:17 صبح
با سلام . دوست عزیز لطفا بگید که از چه Database استفاده میکنید

jeus
پنج شنبه 20 خرداد 1389, 22:04 عصر
من از دیتابیس mysql استفاده می کنم و مطمئن هستم که مشکل از mysql نیست و من encoding جدول را هم درست set شده است و این را هم بگم که دارم از JPA استفاده می کنم .

من همچنین در فایل sun-resources.xml را تغییر دادم و این تگ را هم به هش اضافه کردم .
اما هیچ فرقی نمی کند .

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE resources PUBLIC "-//Sun Microsystems, Inc.//DTD Application Server 9.0 Resource
Definitions //EN" "http://www.sun.com/software/appserver/dtds/sun-resources_1_3.dtd">
<resources>
<jdbc-connection-pool allow-non-component-callers="false" associate-with-thread="false"
connection-creation-retry-attempts="0" connection-creation-retry-interval-in-seconds="10"
connection-leak-reclaim="false" connection-leak-timeout-in-seconds="0" connection-validation-method="auto-commit"
datasource-classname="com.mysql.jdbc.jdbc2.optional.MysqlDataSource" fail-all-connections="false" idle-timeout-in-seconds="300"
is-connection-validation-required="false" is-isolation-level-guaranteed="true" lazy-connection-association="false"
lazy-connection-enlistment="false" match-connections="false" max-connection-usage-count="0" max-pool-size="32"
max-wait-time-in-millis="60000" name="mysql_water_master_rootPool" non-transactional-connections="false"
pool-resize-quantity="2" res-type="javax.sql.DataSource" statement-timeout-in-seconds="-1" steady-pool-size="8"
validate-atmost-once-period-in-seconds="0" wrap-jdbc-objects="false" >
<property name="serverName" value="localhost"/>
<property name="portNumber" value="3306"/>
<!--change this line-->
<property name="databaseName" value="water_master?useUnicode=true&characterEncoding=UTF-8"/>
<property name="User" value="root"/>
<property name="Password" value="6111191111"/>
<!--hand this line-->
<property name="URL" value="jdbc:mysql://localhost:3306/water_master?useUnicode=true&characterEncoding=UTF-8"/>
<property name="driverClass" value="com.mysql.jdbc.Driver"/>
</jdbc-connection-pool>
<jdbc-resource enabled="true" pool-name="mysql_water_master_rootPool" jndi-name="Water" object-type="user"/>
<admin-object-resource enabled="true" jndi-name="jms/specification" res-type="javax.jms.Queue" res-adapter="jmsra">
<property name="Name" value="PhysicalQueue"/>
</admin-object-resource>
<connector-connection-pool name="jms/specificationFactoryPool" connection-definition-name="javax.jms.QueueConnectionFactory"
resource-adapter-name="jmsra"/>
<connector-resource enabled="true" jndi-name="jms/specificationFactory" pool-name="jms/specificationFactoryPool" />
</resources>

jeus
شنبه 22 خرداد 1389, 03:08 صبح
خوب دوستان ار آنجایی که بنده مشکلم هنوز حل نشده و شاید هم کسی مشکل من را نفهمه و تا حالا باهاش روبرو نشده
برآن شدم که این که این مشکل را با درگیر کردن خود شما حل کنم .
شاید هم تا حالا اصلا کسی با javaEE 6 و JPA و jSF همزمان کار نکرده و با این مشکلات روبرو نشده
خوب پس کمک کنید با هم حلش کنیم تا هم من بتونم سر قولم باشم و کارم را تحویل بدم و هم شما با حس انسان دوستانه خودتون به همنوعتون کمک کنید و احسان رضایت معنوی در وجودتان لبریز بشه :لبخند:
دوستان از شوخی گذشته یک سورس اینجا می گذارم که یک نمونه کامل برنامه نوشته شده باmysql و derby و استفاده از jSF و jPA است .
شما با دیدن و نصب این سورس هم یک چیزی یاد می گیرید و هم می تونید کاری کنید که ورود اطلاعت فارسی درست انجام بشه .
این کار برام ارزش داره و هرکی کمکم کنه از خجالتش در می آم $
طریقه نصب را هم می توانید در اینجا ببینید
http://java.sun.com/developer/technicalArticles/glassfish/GFandMySQL_Part2.html
این سورس نرم افزار کاتالوگ حیوانات خانکی
http://www.4shared.com/file/m2OVGrHt/petcatalog.html

behrooj
شنبه 22 خرداد 1389, 13:22 عصر
من نمیدونم که شما از کدوم پیاده-سازی JSF استفاده می-کنید؛ این مشکلی که شما دارید از جای دیگه هم می-تونه باشه.

من حدس می-زنم که در حال حاضر در هدر صفحاتتون این رو دارید:

<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
اگه ندارید این رو هم تست کنید به علاوه-ی:


<%@ page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %> با این حال ممکنه باز هم این مشکل رو داشته باشید؛
یکی از راه-حلهایی که معمولا استفاده می-شه،
نوشتن یک CharacterEncodingFilter که برای هر request این کار رو انجام میده.
اگر از Spring هم استفاده می-کنید، یک نمونه پیاده-سازی این فیلتر رو داره و می-تونید
استفاده کنید:
http://forum.springsource.org/showthread.php?t=14063

اگر هم خوتون می-خواهید پیاده-سازی کنید یک نمونه:
http://seamframework.org/Community/JSFFaceletsAndSeam

jeus
شنبه 22 خرداد 1389, 15:56 عصر
دوستان بالاخره مشکل من حل شد
اول از همه این مطلب را بگم که به نظر تنظیمات encoding برای هر table در mysql بی فایده است و تنظیم کردن اونها با UTF_persian_ci id هیچ تاثیری در برنامه و ورود اطلاعات نداره اما شما باید تنظیمات درون فایل my.cf که توی لینوکس

/etc/mysql/my.cf
قرار داره را عوض کنید و فقط با اضافه کردن چند خصوصیات در بینن دو تا تگ به شکل زیر مشکلتون حل میشه


[mysqld]

lower_case_table_names=1
user = mysql
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
default-character-set=utf8
default-collation=utf8_persian_ci
skip-external-locking

key_buffer = 16M
max_allowed_packet = 16M
thread_stack = 192K
thread_cache_size = 8
# This replaces the startup script and checks MyISAM tables if needed
# the first time they are touched
myisam-recover = BACKUP
#max_connections = 100
#table_cache = 64
#thread_concurrency = 10
#
# * Query Cache Configuration
#
query_cache_limit = 1M
query_cache_size = 16M
#general_log = 1

log_error = /var/log/mysql/error.log



[mysqldump]

دو تا خط آبی برای encoding و خط قرمز برای case sensitive است که توی لینوکس برای نام جداول به وجود می آید .

از behrooj (http://barnamenevis.org/forum/member.php?u=150006) هم متشکرم .
واز همه بیشتر از دوست خوبم آقای سعید زبر دست که منو راهنمایی کردند

trustmiracle
شنبه 22 خرداد 1389, 17:43 عصر
من با اینها کار نکردم ولی توی برنامه های دسکتاپ همین مشکل را داشتم. اگر اینجا هم از درایور مای اس کیو ال استفاده میشه، مشکل از همین هستش. درایور یونیکد را بطور پیش فرض پشتیبانی نمی کنه. در خط ساخت کانکشن باید جملاتی را اضافه کنید.
بگردید تو اینترنت پیداش می کنید.

ermia2008
شنبه 29 خرداد 1389, 17:56 عصر
سلام دوستان
آقا منم همین مشکل رو دارم ولی هر چی باهاش ور رفتم به هیچ صراطی مستقیم نبود.

من هم تو ویندوز تست کردم هم تو لینوکس ولی باز ؟؟؟ تحویل بنده میده ایشون!

من هم تغییراتی که جناب jeus گفته بودن داخل لینوکس دادم هم اینکه هدرهای مورد نیاز رو به صفحاتم اضافه کردم ولی باز مشکل حل نشد!
اینم بگم که وقتی اطلاعات فارسی رو به صورت دستی داخل MySql اضافه میکنم هیچ مشکلی نیست و داخل صفحاتم درست نشون میده ولی وقتی از داخل صفحه مورد نظر داده هارو از طریق یک تکست باکس تغییر میدم چیزی که داخل دیتابیس قرار میگیره چیزی نیست جز ؟؟؟؟ های دوست داشتنی!

دوستان اگه بتونن کمک کنن ممنون میشم.

ermia2008
شنبه 29 خرداد 1389, 20:20 عصر
دوستان مشکل منم حل شد.
اما چی شد که حل شد؟؟؟
راه حل:

در قسمت MySQL Server Instance Config Wizard مربوط به تنظیمات اولیه MySQL در بخش مربوط به انتخاب default character set گزینه manual selected default charachter set/collation را انتخاب کرده و در قسمت انتخاب charachter set گزینه utf8 را انتخاب کنید.
همین!

با تشکر از mshakeri

jeus
چهارشنبه 02 تیر 1389, 09:38 صبح
من هم تغییراتی که جناب jeus گفته بودن داخل لینوکس دادم هم اینکه هدرهای مورد نیاز رو به صفحاتم اضافه کردم ولی باز مشکل حل نشد!
اینم بگم که وقتی اطلاعات فارسی رو به صورت دستی داخل MySql اضافه میکنم هیچ مشکلی نیست و داخل صفحاتم درست نشون میده ولی وقتی از داخل صفحه مورد نظر داده هارو از طریق یک تکست باکس تغییر میدم چیزی که داخل دیتابیس قرار میگیره چیزی نیست جز ؟؟؟؟ های دوست داشتنی!
شما مشکلت این بود که سرور mysql را ریست نمی کردی تا بتونه با کانفیگ جدید کار کنه .



در قسمت MySQL Server Instance Config Wizard مربوط به تنظیمات اولیه MySQL در بخش مربوط به انتخاب default character set گزینه manual selected default charachter set/collation را انتخاب کرده و در قسمت انتخاب charachter set گزینه utf8 را انتخاب کنید.


این تنظیم دقیقا این تگ را به فایل کانفیگ اضافه می کنه .

default-character-set=utf8

modchip
چهارشنبه 27 مرداد 1389, 15:25 عصر
آقا منم این مشکل دارم البته برای من مشکل پایه‌ای تر از دیتابیس هست و کلاً فارسی نمی‌فهمه حتی زمان دیباگ هم تو netbeans متون فارسی رو درست نشون نمیده تو دیتابیی هم همونطور ذخیره میکنه، هرجایی که به‌فکرم می‌رسید رو هم encoding‌ رو به utf-8 تغییر دادم ولی بی‌فایدست. راه‌حل چیه تو ویندوز؟

modchip
چهارشنبه 27 مرداد 1389, 15:58 عصر
آقا مشکل حل شد ایراد از Encoding multipart بود.

alone.chenged
دوشنبه 18 اردیبهشت 1391, 12:55 عصر
سلام داداش منم این مشکل را دارم.داخل فایل پیکربندی هم گزینه ی پیش فرض را تغییر دادم ولی درست نشد.من اطلاعات را از یک تکست ارا می گیرم بعد با یک دستور انسرت وارد مای اس کیو ال میکنم ولی شبیه ؟؟؟ میشه.
ممنون میشم اگه جواب بدبد؟؟؟