6 回答
这样做
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));
}
类型不应该是 varchar,因为它不接受 Unicode 字符。将其更新为 nvarchar!
就像 Andries 所说,排序规则也应该设置为 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 没有返回任何错误,您应该重新启动!
我相信你的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";
然后执行以下SO答案中的代码
您应该将表排序规则更改为 utf8_general_ci 或任何其他 unicode 排序规则。Latin1 不能代表阿拉伯文字。
我有这个问题长达一周的时间并搜索和搜索,@biraj 建议的解决方案是解决这个问题的唯一方法!无需更改数据库或在 php 中设置 UTF-8 或 .... 使用此
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs, "UTF-8"));
这个问题永远消失了。
您需要将正确的 (UTF-8) Charset 传递给 UrlEncodedFormEntity 构造函数。