Проблема с кодировкой MySQLi

У меня есть таблица MySQL, которую я установил, чтобы использовать кодировку utf8_swedish_ci, Два примера значения 2 Kung а также 1 Krön — обратите внимание на шведский характер. Мне нужно искать эти интернационализированные строки из скрипта PHP. Мой PHP-файл закодирован в UTF-8, Мой код с обработкой ошибок, очищенной для ясности, выглядит так:

$db = new mysqli($host, $user, $password, $user);
$db->set_charset('UTF-8');
$stm = $db->prepare('SELECT `id` FROM `myTable` WHERE `bok` LIKE ?');
echo "Searching on $value'...";
$stm->bind_param('s', $value);
$stm->execute();
$stm->bind_result($result);
$stm->close();
echo "Fetched '$result'.";

Теперь, если я установлю $ value в значение первого примера, я получу единственную подходящую строку. С другим значением примера я не получаю строк. Я проверил запросы для работы в PHPMyAdmin. Я полагаю, что ошибка связана с международным характером, и поэтому я где-то перепутал кодировки. Так что я сделал не так и как мне это исправить?

редактировать: линия $db->set_charset('UTF-8'); не удается, потому что я использовал неправильную кодировку. Так должно быть utf8, Оказывается, у меня было слишком мало обработки ошибок, я должен был проверить $db->error после set_charset,

0

Решение

$db->set_charset('UTF-8');

Обратите внимание, что MySQL является особенным, имя, которое он использует внутри для набора символов UTF-8: utf8 (без черты), не обычный UTF-8,

В случае сомнений обратитесь к SHOW CHARACTER SET; 😉

1

Другие решения

Попробуйте это, это может помочь.

$db = new mysqli($host, $user, $password, $user);
$db->set_charset('UTF-8');
$stm = $db->prepare('SELECT `id` FROM `myTable` WHERE `bok` LIKE ?');
$value = '%'.$value.'%'; //added this line
$stm->bind_param('s', $value);
$stm->execute();
$stm->bind_result($result);
$stm->close();
echo "Fetched '$result'.";

Я попытался LIKE » с символами UTF-8 в столбце char (180) с кодировкой utf8_general_ci, и он вернул 0 строк, поэтому я попробовал это с LIKE% »%, и это сработало

-1