保存特殊字符

时间:2018-05-17 10:35:43

标签: php mysql

我有这段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执行

3 个答案:

答案 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" );

More info about the function (PHP.net)