从Android手机发送阿拉伯语文本到在线MySQl数据库

时间:2013-09-25 15:50:37

标签: php android mysql sql database

我创建了一个应用程序,它将几个文本输入从android发送到我的在线数据库。我的应用程序运行良好,但有些用户报告他们无法使用阿拉伯语文本。所以我尝试了,当我在数据库中发送阿拉伯语文本时,它显示为????? ????? ??????

我的php脚本:

<?php
$connect = mysql_connect($db_host,$db_uid,$db_pass) or die('could not connect');
mysql_select_db($db_name);

if(mysql_errno($connect))
{
die("Failed to connect to MySQL: " . mysql_error());
}
else
{
    echo "success";
mysql_query("SET NAMES 'utf8'"); mysql_query('SET CHARACTER SET utf8');
}

$name = isset($_POST['name']) ? $_POST['name'] : '';
$sex = isset($_POST['sex']) ? $_POST['sex'] : '';
$nationality = isset($_POST['nationality']) ? $_POST['nationality'] : '';

$query = mysql_query( "insert into people (name, sex, nationality) values (N'$name' ,N'$sex', N'$nationality') ", $connect);

print_r($_POST);
if(!$query) echo mysql_error();
mysql_close($connect);
?>

我的Android代码:

                DefaultHttpClient httpclient= new DefaultHttpClient();
                HttpPost httppost = new HttpPost("http://www.xxxxxxxx.com/thescript.php");
                Log.e("done 1st","its here");

                try
                {
                    ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
                    nameValuePairs.add(new BasicNameValuePair("name", Name.getText().toString()));
                    nameValuePairs.add(new BasicNameValuePair("sex",  Sex.getText().toString()));
                    nameValuePairs.add(new BasicNameValuePair("nationality",  Nationality.getText().toString()));

                    httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                    HttpResponse response = httpclient.execute(httppost);
                    Log.e("done", String.valueOf(response));
                }

我尝试了很少的东西你可以看到,但都没有用。

当使用插入使用在线电脑 .php 时,我会这样:لببي

---------

我的数据库设置为:

表格整理utf8_general_ci ,其类型MyISAM

和其中的列(姓名,性别,国籍)

类型varchar整理utf8_general_ci

离。 输出应该是علي,但它是???

6 个答案:

答案 0 :(得分:2)

这样做

DefaultHttpClient httpclient= new DefaultHttpClient();
                HttpPost httppost = new HttpPost("http://www.xxxxxxxx.com/thescript.php");
                Log.e("done 1st","its here");

                try
                {
                    ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
                    nameValuePairs.add(new BasicNameValuePair("name", Name.getText().toString()));
                    nameValuePairs.add(new BasicNameValuePair("sex",  Sex.getText().toString()));
                    nameValuePairs.add(new BasicNameValuePair("nationality",  Nationality.getText().toString()));

                    httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs, "UTF-8")); //UPDATE HERE
                    HttpResponse response = httpclient.execute(httppost);
                    Log.e("done", String.valueOf(response));
                }

答案 1 :(得分:1)

Type不应该是varchar,因为它不接受Unicode字符。将其更新为nvarchar!

就像安德里斯所说,整理也应该设置为utf8_general_ci或其他Unicode整理。

编辑:

所以,既然你在MySQL v5.x上,你应该有一个配置文件(比如my.cnf)。您应该确保没有使用超级用户访问数据库。将其添加到配置文件中。

[mysqld]
init_connect='SET collation_connection = utf8_general_ci; SET NAMES utf8;'
default-character-set=utf8
character-set-server=utf8
collation-server=utf8_general_ci

这将触发任何连接以使用utf8_general_ci进行任何连接。

重新启动MySQL,如果mysqld.log没有返回任何错误,你应该集会!

答案 2 :(得分:1)

我相信你的java代码是对的。

在后端,尝试使用此代码:(如果您可以切换到PDO)

$conn= mysql_connect($db_host,$db_uid,$db_pass, true) or die('could not connect');
mysql_select_db($db_name);
mysql_query("SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'", $conn);
mysql_set_charset('utf8', $conn); 

使用以下命令调试以了解编码:

<?php
$charset = mysql_client_encoding($conn);
echo "The current character set is: $charset\n";
?>

,然后

以root身份执行以下命令:

ALTER DATABASE YOUR_DATABASE_ NAME CHARACTER SET utf8 COLLATE utf8_general_ci;
update mysql.proc set character_set_client = "utf8", collation_connection = "utf8_general_ci", db_collation = "utf8";

然后执行following SO answer

中的代码

答案 3 :(得分:0)

您应该将表格排序更改为utf8_general_ci或任何其他unicode排序规则。 Latin1不能代表阿拉伯文字。

答案 4 :(得分:0)

您需要将正确的(UTF-8)Cha​​rset传递给UrlEncodedFormEntity构造函数。

答案 5 :(得分:0)

我有这个问题一个星期很长时间搜索和搜索,解决方案@biraj建议以唯一的方式来解决这个问题!无需更改数据库或在php中设置UTF-8或.... 使用这个

httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs, "UTF-8"));

这个问题永远消失了。