PDA

View Full Version : وارد کردن داده های فارسی در mysql با جاوا



ali zi zeperto
یک شنبه 19 دی 1389, 15:17 عصر
سلام
یه جدول دارم که باید داده های فارسی واردش کنم.منتها علامت سوال نشون میده.نوع chararcter set دیتا بیس و جدول رو تغییر دادم ولی نتیجه تغییر نکرد.یه سرچ دوباره کردم فهمیدم که باید موقع کانکت شدن از داخل جاوا هم نوع charset رو تنظیم کنم.
راهنمایی کنید که از چی باید استفاده کنم؟
ممنون

Hadirj
یک شنبه 19 دی 1389, 16:07 عصر
charchter set رو به چه چیزی تغییر دادی؟ utf8? کدتون رو اگر قرار بدید بهتر مبشه راهنمایی کرد

L u k e
یک شنبه 19 دی 1389, 17:50 عصر
باید Connection_String تون این شکلی بشه
jdbc:mysql://localhost:3306/processor?useUnicode=true&characterEncoding=UTF-8

ali zi zeperto
یک شنبه 19 دی 1389, 18:43 عصر
connection string رو عوض کردم

private static String DB_URL = "jdbc:mysql://localhost/bourse?useUnicode=true&characterEncoding=UTF-8";
اینم بانک و تیبلش

mysql> alter database urls character set utf8 collate utf8_danish_ci;
Query OK, 1 row affected (0.03 sec)

mysql> alter table urls character set utf8 collate utf8_danish_ci;
Query OK, 1 row affected (0.01 sec)
Records: 1 Duplicates: 0 Warnings: 0بازم علامت سوال نشون میده.

Hadirj
یک شنبه 19 دی 1389, 19:00 عصر
اسم db مگه urls نیست؟ چرا تو کانکشن نوشتی bourse؟

کانکشن رو به این تغییر بده:



jdbc:mysql://hostname:3306/urls?useUnicode=yes&characterEncoding=UTF-8

Hadirj
یک شنبه 19 دی 1389, 19:02 عصر
اسم db مگه urls نیست؟ چرا تو کانکشن نوشتی bourse؟

کانکشن رو به این تغییر بده:



jdbc:mysql://hostname:3306/urls?useUnicode=yes&characterEncoding=UTF-8

ali zi zeperto
یک شنبه 19 دی 1389, 19:44 عصر
با عرض معذرت
اون یه دیتابیس دیگه بود که روش alter رو زده بودم.اما رو خود bourse هم زدم.جواب فرقی نکرد.
این کلاسیه که ساختم

public class db {

private static String DB_DRIVER = "com.mysql.jdbc.Driver";
private static String DB_URL = "jdbc:mysql://localhost/bourse?useUnicode=true&characterEncoding=UTF-8";
private Connection myConnection;



public db(){
try{
Class.forName(DB_DRIVER);
myConnection = DriverManager.getConnection(DB_URL,"root","text");
}
catch(ClassNotFoundException e){
e.printStackTrace();
}
catch(SQLException e){
e.printStackTrace();
}
}



public boolean insert_into(String namaad,String url){
try{
PreparedStatement myStatement = myConnection.prepareStatement("insert into urls(name,url)values(?,?)");
myStatement.setObject(1, namaad);
myStatement.setObject(2, url);
myStatement.execute();
}
catch(SQLException e){
e.printStackTrace();
return false;
}
return true;
}

ali zi zeperto
یک شنبه 19 دی 1389, 20:02 عصر
یه سوال دیگه البته مربوط به تاپیک نیست ولی به سوال من مربوطه
من یه سری کاراکتر یونی کد رو می خوام از جریان ورودی بخونم فرضا از فایل.این کدی که نوشتم ایرادی داره؟

InputStream in = myConnection.getInputStream();
StringBuffer str = new StringBuffer();
BufferedReader myStream = new BufferedReader(new InputStreamReader(in,"UTF-8"));
int ch;

while((ch = myStream.read()) != -1){
str.append((char)ch);
}

Hadirj
یک شنبه 19 دی 1389, 20:26 عصر
در مورد اول چیزی که به نظرم میرسه اینه که اول ورژن MySQL 4.1.18 باشه حداقل و اینکه مشخص کنید که مشکل از فرستادن جاوا هست یا سیو کردن mysql (جای اینکه تو db بریزید توی فایل UTF8) کد دوم هم درست بنظر میرسه حدث من اینکه فایل شما UTF8 نیست! با notepad++ مثلا فکر هم میکنم "UTF8" باشه نه "UTF-8"




FileInputStream fis = new FileInputStream("test.txt");
InputStreamReader isr = new InputStreamReader(fis,
"UTF8");
Reader in = new BufferedReader(isr);
int ch;
while ((ch = in.read()) > -1) {
buffer.append((char)ch);
}
in.close();

L u k e
یک شنبه 19 دی 1389, 21:10 عصر
نه درسته UTF-8 ه
مشکل از جای دیگش شما فیلدهاتونو varchar در نظر گرفتید ؟
اگه از Jsp استفاده می کنید به انکودینگ Request دقت کنید
شاید مشکل از Encoding جای دیگه ایه
یه بار چک کنید و یه Data ثابتی رو Add کنید ببینید بازم اینطوریه

ali zi zeperto
یک شنبه 19 دی 1389, 21:30 عصر
از جدولی که داده ها رو وارد می کردم تا حالا با خود جاوا داده ای رو نخونده بودم.اینبار از خود جاوا یه کویری اجرا کردم و داده ها علامت سوال نبودن!!!
فقط وقتی توی خود mysql کویری می گیرم علامت سوال میاد .چرا؟در حالیکه با لینوکس کار می کنم و کلا یونی کده.
البته فعلا کارم راه افتاد.از همه دوستان خیلی خیلی ممنونم.

Hadirj
دوشنبه 20 دی 1389, 02:49 صبح
نه درسته UTF-8 ه


Tutorial خود جاوا (http://download.oracle.com/javase/tutorial/i18n/text/stream.html) بر "UTF8" تاکید داره

vahid83
شنبه 09 بهمن 1389, 14:17 عصر
دوست عزیز
منم مشکل شما رو داشتم.
فکر کنم راه حلشو پیدا کردم:
1- اول شما باید Character set دیتابیستون رو utf8 -- UTF-8 Unicode و Collection اش رو utf8_general_ci در نظر بگیرید.
2- ثانیاً باید Encoding پروژتون به صورت UTF-8 در نظر بگیرید.
اگرم خواستی که این تنظیم رو با کد در پروژه جاوا انجام بدی به این صورته:

Charset utf8 = Charset.forName("UTF-8");