Сохранить спецсимвол

0

У меня есть эта часть кода 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

  • 0
    попробуйте изменить его на utf8_unicode_ci.
  • 0
    utf8_encode (mysqli_real_escape_string ($ bd_to, $ data [$ counter]))
Показать ещё 10 комментариев
Теги:

3 ответа

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");
1

Если у вас есть доступ к базе данных, вы можете изменить набор символов и сортировку.

Для набора символов попробуйте utf8mb4 и для сортировки utf8mb4_spanish_ci

Этот подход проще, чем изменение кодировки "на лету". (Я использовал оба в прошлом.)

Многобайтовый набор символов позаботится о любых специальных символах, включая emojis.

Ссылка: https://dev.mysql.com/doc/refman/5.7/ru/charset-unicode-sets.html

  • 0
    Если вы можете, попробуйте phpMyAdmin, он перечисляет все доступные параметры. Я использую SQLyog (я не советую вам его покупать). Вы можете внести изменения из командной строки (немного больше работы).
0

После проверки ваших решений в комментариях и убедитесь, что проблема не была решена, я думал, что проблема не должна быть в базе данных mySQL, но символы PHP отправляются на нее.

Поэтому я искал настройки кодировки php-запросов, и я нашел, что он работает

bool mysqli_set_charset ( mysqli $link , string $charset )

Устанавливает набор символов по умолчанию, который будет использоваться при отправке данных с сервера базы данных и на сервер базы данных.

Поэтому после открытия соединения с mySQL я добавил:

mysqli_set_charset ( $bd_to , "utf8" );

Подробнее о функции (PHP.net)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню