У меня есть эта часть кода 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ç"
потому что когда она вставляет значение, загружается как Març
, поэтому возникает проблема с символом ç
.
База данных содержит команду utf8_spanish_ci.
Если я вручную отредактирую значение и измените ç
на ç
он работает (используя программу Desktop → HeidiSQL). Может быть, что PHP не посылает ç
и посылает ç
?
Этот php-скрипт выполняется Windows CMD
добавить $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");
Если у вас есть доступ к базе данных, вы можете изменить набор символов и сортировку.
Для набора символов попробуйте utf8mb4
и для сортировки utf8mb4_spanish_ci
Этот подход проще, чем изменение кодировки "на лету". (Я использовал оба в прошлом.)
Многобайтовый набор символов позаботится о любых специальных символах, включая emojis.
Ссылка: https://dev.mysql.com/doc/refman/5.7/ru/charset-unicode-sets.html
После проверки ваших решений в комментариях и убедитесь, что проблема не была решена, я думал, что проблема не должна быть в базе данных mySQL, но символы PHP отправляются на нее.
Поэтому я искал настройки кодировки php-запросов, и я нашел, что он работает
bool mysqli_set_charset ( mysqli $link , string $charset )
Устанавливает набор символов по умолчанию, который будет использоваться при отправке данных с сервера базы данных и на сервер базы данных.
Поэтому после открытия соединения с mySQL я добавил:
mysqli_set_charset ( $bd_to , "utf8" );