我们的mysql数据库在将数据从模拟器发送到mysql数据库时显示Î Î¿Î»Ï Î³Î»Ï…ÎºÏŒÏ
代替希腊字符。其他字符保持不变。
更新:
使用后
@FélixGagnon-Grenier在我的代码中回答它给了我:
用于表创建的SQL
CREATE TABLE `cart` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`product_name` varchar(255) NOT NULL,
`product_price` double(3,2) NOT NULL,
`product_image` varchar(255) NOT NULL,
`quantity` int(11) NOT NULL,
`preferation1` varchar(50) NOT NULL,
`preferation2` varchar(50) NOT NULL,
`preferation3` varchar(50) NOT NULL,
`preferation4` varchar(50) NOT NULL,
`magazi_id` int(11) NOT NULL,
`servitoros_id` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8
PHP
<?php
error_reporting(E_ALL ^ E_NOTICE);
ini_set("default_charset", "UTF-8");
header('Content-type: text/html; charset=UTF-8');
mb_internal_encoding('UTF-8');
mb_http_input("utf-8");
try {
$handler = new PDO('mysql:host=localhost;dbname=database', 'username', 'password');
$handler->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES 'utf8' COLLATE 'utf8_general_ci' ");
$handler->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (Exception $e) {
echo $e->getMessage();
die();
}
$productName = $_POST['productName'];
$productPrice=$_POST['productPrice'];
$productImage = $_POST['productImage'];
$quantity = $_POST['quantity'];
$sugar = $_POST['sugar'];
$milk = $_POST['milk'];
$flavor=$_POST['flavor'];
$comment = $_POST['comment'];
$magazi = $_POST['magazi_id'];
$servitoros = $_POST['servitoros_id'];
$handler->query("INSERT INTO cart(id, product_name, product_price, product_image, quantity, preferation1, preferation2, preferation3, preferation4, magazi_id, servitoros_id) VALUES('', '$productName','$productPrice','$productImage', '$quantity', '$sugar', '$milk', '$flavor', '$comment', '$magazi', '$servitoros')");
die();
?>
爪哇
protected Void doInBackground(String... params) {
nameValuePairs = new ArrayList<>();
nameValuePairs.add(new BasicNameValuePair("productName", productName));
nameValuePairs.add(new BasicNameValuePair("productPrice", String.valueOf(price)));
nameValuePairs.add(new BasicNameValuePair("productImage", image));
nameValuePairs.add(new BasicNameValuePair("quantity", String.valueOf(quantityNumberFinal)));
nameValuePairs.add(new BasicNameValuePair("sugar", sugarPreference));
nameValuePairs.add(new BasicNameValuePair("milk", milkPreference));
nameValuePairs.add(new BasicNameValuePair("flavor", flavorPreference));
nameValuePairs.add(new BasicNameValuePair("comment", comment));
nameValuePairs.add(new BasicNameValuePair("magazi_id", String.valueOf(2)));
nameValuePairs.add(new BasicNameValuePair("servitoros_id", String.valueOf(13)));
try
{
HttpParams httpParams = new BasicHttpParams();
HttpProtocolParams.setContentCharset(httpParams, "UTF-8");
httpClient = new DefaultHttpClient(httpParams);
httpPost = new HttpPost(params[0]);
httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs, "UTF-8"));
response = httpClient.execute(httpPost);
httpEntity = response.getEntity();
is = httpEntity.getContent();
}
catch(Exception e)
{
Log.e("Fail 1", e.toString());
}
return null;
}
答案 0 :(得分:6)
您的问题与您的charset编码有关。您的整个代码具有相同的字符集非常重要,以避免字符显示不正确的问题。
有很多设置需要正确定义,我强烈推荐使用UTF-8,因为这里有大多数你需要的字母(斯堪的纳维亚语,希腊语,阿拉伯语,俄语等)。
这里有一些必须设置为特定字符集的事项列表。
<强>接头强>
将HTML和PHP标头中的字符集设置为UTF-8
PHP:
header('Content-Type: text/html; charset=utf-8');
(PHP标头必须放在任何输出之前(echo,空格, HTML)!)
HTML:
<meta charset=utf-8" />
(HTML标题放在<head>
/ </head>
标记内)
<强>连接强>
您还需要在连接本身中指定字符集。对于您的PDO示例,它就像这样
$handler = new PDO('mysql:host=localhost;dbname=database;charset=utf8', 'username', 'password', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET UTF8"));
请注意charset=utf8
- 属性。如果您将来使用其他东西,其他MySQL-API有不同的方法。
<强>数据库强>
您的数据库及其表格必须设置为UTF-8。请注意,字符集不与排序规则相同。我看到你已经将你的排序规则设置为UTF-8,所以这很好,但对整个数据库和所有表都这样做。
您可以通过为每个数据库和表运行一次以下查询(例如在phpMyAdmin中)
ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
请注意,已存储在数据库中的任何数据都不会自动修复其损坏的字符集。因此,在插入数据之前执行此操作非常重要,或者在设置字符集后重新插入数据。
php.ini规范
在php.ini
文件中,您应该为您的平台指定默认字符集,例如
default_charset = "utf-8";
文件编码的 强>
.php
文件本身是UTF-8编码也很重要。如果您使用Notepad ++编写代码,可以在任务栏的“格式”下拉列表中完成。 <强>表情符号强>
utf8mb4
字符集,而不是常规utf8
。 我对Java知之甚少,但是如果你也可以将属性设置为UTF-8,那就去做吧。实质上,可以设置为特定字符集的所有内容都应设置为相同。
如果你按照上面的所有指示,你的问题很可能会得到解决。如果没有,您可以查看此StackOverflow帖子:UTF-8 all the way through。
答案 1 :(得分:1)
在this blog中可以找到关于在PHP和Mysql中使用UTF8的优秀介绍。要点是:
jidStr
senderId
我猜你错过了第3点。
在PHP脚本中,您应该执行以下操作(未经测试):
default_charset = "utf-8";
答案 2 :(得分:1)
你的整个php / mysql设置好像是用utf-8编码的,但java代码不是从那里开始的:
httpClient = new DefaultHttpClient();
httpPost = new HttpPost(params[0]);
httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
首先,DefaultHttpClient
类似乎已被弃用。但是,文档说
,http默认字符集为如果未明确设置,此类将设置以下参数:
- ContentCharset:HTTP.DEFAULT_CONTENT_CHARSET
ISO-8859-1
HttpPost
本身似乎与字符集混合在一起。
但UrlEncodedFormEntity
确实如此。同样来自文档:
UrlEncodedFormEntity(Iterable parameters) Constructs a new UrlEncodedFormEntity with the list of parameters with the default encoding of HTTP.DEFAULT_CONTENT_CHARSET
由于ISO-8859-1
无法保留希腊字符,因此将它们传递给这些实例会修改它们,从而破坏php代码中的字符。
所有这些代码似乎都已弃用,但更改java以输出utf-8编码字符:
HttpParams httpParams = new BasicHttpParams();
HttpProtocolParams.setContentCharset(httpParams ,"UTF-8");
httpClient = new DefaultHttpClient(httpParams);
httpPost = new HttpPost(params[0]);
httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs,"UTF-8"));
并删除php中的冗余:
ini_set("default_charset", "UTF-8");
header('Content-type: text/html; charset=UTF-8');
mb_internal_encoding('UTF-8');
mb_http_input("utf-8");
标题将覆盖ini_set,因此您可以将其删除,http输入已经在utf8中(因为我们只是在java中对其进行了转换),所以您也可以删除它:
header('Content-type: text/html; charset=UTF-8');
mb_internal_encoding('UTF-8');
答案 3 :(得分:0)
将数据库varchar字段用作utf8_general_ci。
答案 4 :(得分:0)
如果您使用php脚本将数据插入数据库,则首先对要插入的数据使用utf8_encode
函数,然后对相同数据使用utf8_decode
,然后执行数据库插入操作。