2015-05-27 4 views
1

У меня есть DB, для которого все его столбцы установлены как "hebrew_general_ci".MySQL - hebrew charachters становятся вопросительными знаками в DB

Когда я пытаюсь вручную вставить значения иврита в мою БД или через Postman, я вижу, что значения в БД действительно находятся на иврите.

Но, когда я пытаюсь вставить значения из своего приложения (приложение для Android в кодировке java), значения становятся вопросительными знаками - ????

Я попытался закодировать свой текст в UTF-8 в самом приложении, но это не сработало.

вот код, который предположим, сделать это:

private String POST(String url, String jsonParamsAsString) { 
     String result = ""; 
     String fixedUrl = url.replace(" ","%20"); 
     try { 
      DefaultHttpClient httpClient = new DefaultHttpClient(); 
      HttpPost postRequest = new HttpPost(fixedUrl); 
      byte ptext[] = jsonParamsAsString.getBytes(); 
      jsonParamsAsString = new String(ptext, "UTF-8"); 
      StringEntity input = new StringEntity(jsonParamsAsString); 
      input.setContentType("application/json; charset=utf-8"); 
      //input.setContentType("application/json"); 
      postRequest.setEntity(input); 
      HttpResponse response = httpClient.execute(postRequest); 
      result = convertInputStreamToString(response.getEntity().getContent()); 
      /*byte ptext[] = result.getBytes(); 
      result = new String(ptext, "UTF-8");*/ 
     } catch (Exception e) { 
      Log.d("InputStream", e.getLocalizedMessage()); 
     } 
     return result; 
    } 

ответ

3

Вам необходимо установить кодировку для БД utf8/utf8_general_ci или utf8mb4/utf8mb4_general_ci если вы работаете последнюю версию MySQL & нужно обрабатывать смайлики. Here - это документация. В принципе, вам не нужно устанавливать таблицу для определенного набора символов для определенного языка. Я использовал вышеупомянутые настройки, и он обрабатывает арабский, русский, китайский, английский и т. Д. Из коробки, это язык агностик и просто работает. Удачи.

Edit: Кроме того, необходимо убедиться, что ваше соединение запроса имеет следующие два параметра: useUnicode=yes и characterEncoding=UTF-8

+0

ли соединение запроса вы имели в виду в том, что я ставлю выше? – binyamina

+0

@Binyamina нет вам нужно найти, где находится ваш java-коннектор базы данных, примерно так: 'con = DriverManager.getConnection (" jdbc: mysql: // localhost/embeddedChat? UseUnicode = true & characterEncoding = utf8 ");' – jamescampbell

+0

@Binyamina также см. [this] (http://stackoverflow.com/questions/11976074/writing-hebrew-to-mysql-using-java), так как в разделе ответов они, похоже, точно решают вашу проблему. – jamescampbell