我有这段PHP代码:
$bd_to = mysqli_connect($to_mysql_hostname, $to_mysql_user, $to_mysql_password, $to_mysql_db);
if (!$bd_to) {
die('database to | Connect Error: ' . mysqli_connect_errno());
}
$data = ["Gener","Febrer",'Març',"Abril","Maig","Juny","Juliol","Agost","Setembre","Octubre","Novembre","Desembre"];
for ($counter = 0; $counter < count($data) ; $counter++){
$insert = "INSERT INTO estancia_mes(mes, numero) VALUES ('" . mysqli_real_escape_string($bd_to, $data[$counter]) . "', " . ($counter+1) . ")";
$result = mysqli_query($bd_to, $insert);
if (!$result){
echo "error: " . mysqli_error($bd_to) . "\n";
echo "\n" . $insert . "\n";
return;
}
}
echo "inserted rows to Estancia_mes table\n";
问题在于字符串"Març"
,因为在插入时,值会上传为Març
,因此ç
字符存在问题。
数据库有一个 utf8_spanish_ci 整理。
如果我手动编辑值并将ç
更改为ç
,则可以使用(使用桌面程序 - &gt; HeidiSQL)。可能是PHP没有发送ç
并且正在发送ç
?
这个php脚本由Windows CMD执行
答案 0 :(得分:1)
如果您有权访问数据库,则可以更改字符集和排序规则。
对于字符集,请尝试utf8mb4
并为整理utf8mb4_spanish_ci
这种方法比动态更改编码更容易。 (我过去曾经使用过这两种方式。)
多字节字符集将处理包括表情符号在内的任何特殊字符。
参考:https://dev.mysql.com/doc/refman/5.7/en/charset-unicode-sets.html
答案 1 :(得分:1)
添加$bd_to->set_charset("utf8");
。那就是
$bd_to = mysqli_connect($to_mysql_hostname, $to_mysql_user, $to_mysql_password, $to_mysql_db);
$bd_to->set_charset("utf8");
答案 2 :(得分:0)
在评论中测试你的解决方案后,看到问题没有解决,我认为问题不应该是mySQL数据库,而是PHP发送给它的字符。
所以我一直在寻找配置php查询的charset,我发现他的功能
bool mysqli_set_charset ( mysqli $link , string $charset )
设置从数据库服务器发送数据时使用的默认字符集。
因此在打开与mySQL的连接后,我添加了:
mysqli_set_charset ( $bd_to , "utf8" );