binyamina
binyamina

Reputation: 193

MySQL - Hebrew characters become question marks in DB

I have DB which all of its columns are set to be "hebrew_general_ci".

When I try to manually insert hebrew values to my DB, or through Postman, I can see that the values at the DB are indeed in hebrew.

But, When I try to insert the values from my app (android app - coded in java), the values become question marks - ????

I tried to code my text to UTF-8 at the app itself but it didn't work.

here is the code which suppose to do this:

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;
    }

Upvotes: 1

Views: 1366

Answers (1)

james-see
james-see

Reputation: 13176

You need to set your encoding for the database as utf8 / utf8_general_ci or utf8mb4 / utf8mb4_general_ci if you are running latest version of MySQL & need to handle emoji. Here is the documentation. Basically, you don't need to set your table to a specific char set for a particular language. I've used the above settings and it handles Arabic, Russian, Chinese, English, etc. out of the box, it is language agnostic and just works. Good luck.

Edit: You also need to make sure your query connection has the following two parameters: useUnicode=yes and characterEncoding=UTF-8

Upvotes: 3

Related Questions