MySQL выдает ошибку 1304 с данными UTF-8 в столбце utf8mb4Php

Кемеровские программисты php общаются здесь
Anonymous
MySQL выдает ошибку 1304 с данными UTF-8 в столбце utf8mb4

Сообщение Anonymous »

У меня есть процесс на основе PHP (в данном случае с PHP 8.1.2), который регулярно запрашивает основной маршрутизатор в нашей сети, чтобы получить список текущих сетевых устройств, и сохраняет их в таблице для последующего использования в других процессах. . (Это также полезно в тех случаях, когда IP-адрес некоторого хоста по какой-либо причине не попал в DNS).
Одним из атрибутов, хранящихся в этой таблице, является имя хоста, как возвращается маршрутизатором. В (только) одном случае это имя хоста, очевидно, является значением, выходящим за пределы диапазона набора символов столбца UTF8MB4, выделенного для этого столбца, и MySQL выдает ошибку, когда для этого устройства поступает UPDATE:

Код: Выделить всё

General error: 1366 Incorrect string value: '\xE5\x01\x10p\xB4\xAF...' for column 'hostname' at row 1"
Чтобы определить правильный набор символов, я добавил

Код: Выделить всё

$lov->writeLogLine( ['Encoding for hostname is %s', mb_detect_encoding($data['hostname']) ] ) ;
в процесс, когда обнаружена ошибка SQL и возвращается результат «UTF-8».
Я знаю, что существуют разновидности UTF-8, и я не знаю, как определить, какого именно типа должен быть этот столбец (документация маршрутизатора не определяет) (и мы [пока] не будем вдаваться в подробности, почему маршрутизатор возвращает бессмысленные имена хостов - то есть снаружи моя сфера поддержки). Есть ли волшебное значение или волшебный метод, который я мог бы использовать, чтобы удовлетворить как PHP, так и MySQL - заставить их хорошо работать вместе?

Подробнее здесь: https://stackoverflow.com/questions/787 ... mb4-column

Вернуться в «Php»