Вставьте специальные символы с помощью libmysql - PullRequest
0 голосов
/ 28 мая 2019

в программном обеспечении C ++, использующем libmysqlclient, я пытаюсь вставить строку в таблицу, содержащую html-кодированные символы, такие как & eacute ;. Запрос выглядит так:

INSERT INTO mytable ( field )  VALUES( 'Justificatif d\'achat numéro 1523641305' )

Сбой с ошибкой:

Incorrect string value: '\xE9ro 15...' for column 'field' at row 1

Если я скопирую свой запрос, например, скопирую его в рабочую среду и выполню, он будет работать. Но невозможно, чтобы это работало из моего кода.

Мой столбец находится в кодировке utf8 с сопоставлением по умолчанию.

Я подключаюсь к своей БД с помощью mysql_real_connect и вызываю "SET NAMES 'utf8'" сразу после выполнения подключения.

Первое редактирование: Я прочитал вопросы и ответы от Вставка строки в кодировке UTF-8 в таблицу mysql в кодировке UTF-8 завершается с ошибкой «Неверное значение строки» , и пытался применить предложенные решения, но у меня это не сработало , Насколько я понимаю проблему, моя проблема в другом, так как я пытаюсь вставить символ U + 00E9 в Unicode, и, следовательно, только на 2 байта. Кроме того, я могу вставить его в свою БД, но не из своего кода C ++.

1 Ответ

0 голосов
/ 30 мая 2019

e-sharp:

  • htmlentities: é - Избегайте этого в базах данных.
  • latin1: hex E9
  • utf8: hex C3A9
  • Unicode "кодовая точка": U+00E9 - Избегайте этого в базах данных.

При установлении соединения от вашего клиента C ++ к MySQL укажите, какая кодировка символов используетсяв клиенте .Основываясь на «Неправильное строковое значение: '\ xE9ro ...», я предполагаю, что это latin1.

Отдельно можно объявить столбец (field) в таблице как CHARACTER SET latin1 или utf8 или utf8mb4.В первом случае E9 пройдет без изменений.В остальных E9 будет превращен в C3E9.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...