Имя таблицы MySQL с ударением. Недопустимая строка символов utf8 при обновлении через PDO

Я нахожусь в ситуации, когда мне нужно обновить некоторые строки в таблице с именем «matrículas». Запрос выглядит примерно так:

UPDATE `matrículas` SET...

Когда я запускаю этот запрос в моей программе SQL (HeidiSQL) напрямую, он выполняется без проблем. Когда я делаю это в PHP через объект PDO, я получаю следующую ошибку:

SQLSTATE[HY000]: General error: 1300 Invalid utf8 character string: 'matr\xEDculas'

Мой объект PDO настроен так:

$db= new PDO(
'mysql:host='.$credentials['host'].';dbname='.$credentials['dbname'].';charset=utf8',
$credentials['user'],
$credentials['password'],
array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")
);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

Фактическое обновление выполняется путем выполнения вышеуказанного запроса и выполнения этого:

$query = $this->db->prepare($sql);
$query->execute($params);

И таблица, и база данных были созданы с использованием utf8_general_ci сверка.

Есть идеи, что я делаю не так? Кстати, я сейчас тестирую в Windows на случай, если это как-то связано с этим …

0

Решение

ERROR 1300 (HY000): Invalid utf8 character string: 'matr\xEDculas'

\xNN нотация дает шестнадцатеричное закодированное значение для недопустимых байтов в строке символов.

Кодовая точка Unicode 237 (í), когда кодируется в utf-8, является 2-байтовым символом, который кодируется как 0xC3 0xAD… но ошибка показывает 0xED, который случается ISO / IEC-8859-1 (Latin1) кодировка для символа í,

Поскольку ошибка связана с тем, что имя столбца передается из сценария, а не из внешних данных, это говорит о том, что проблема заключается в том, что сам сценарий PHP имеет неправильно закодированное имя столбца, поскольку набор символов, в котором был сохранен сценарий ISO-8859-1, а не UTF-8.

0

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

`matrículas`

это кодировка cp866-gp2312

пожалуйста, измените его на UTF-8, как matriculas

у меня другой стиль кодирования

0

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

То есть это не PDO проблема, но проблема кодирования — ваш исходный редактор / язык / что угодно.

0
По вопросам рекламы [email protected]