У меня есть таблица 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
,
$db->set_charset('UTF-8');
Обратите внимание, что MySQL является особенным, имя, которое он использует внутри для набора символов UTF-8: utf8
(без черты), не обычный UTF-8
,
В случае сомнений обратитесь к SHOW CHARACTER SET;
😉
Попробуйте это, это может помочь.
$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% »%, и это сработало