Почему исчезают русские символы в MySQL INSERT?

Вся кодировка mysql - utf8.
Пытаюсь загрузить текстовый файл в кодировке ANSI (как говорит notepad++)
Читаю строки и загружаю в колонку с кодировкой utf8_general_ci.
Проблема в том, что русские символы изчезают.
Загружать файлы будут пользователи с кодировкой utf8 и ANSI, поэтому проблему надо как-то решить.
Делать iconv каждой строке слишком дорого, поэтому надо найти другое решение.

UPD:
Сейчас я сделал это так:
$data = [];
			if ($handle = fopen($_FILES['file']['tmp_name'], "r")) {
				while (!feof($handle)) {
					$line = fgets($handle, 4096);
					$line = trim($line);
					$encode = mb_detect_encoding($line, ['UTF-8'], true); // false если русские символы
					if ($encode === false)
					{
						$line = iconv("windows-1251", 'utf-8', $line);
					}
					if (!empty($line))
					{
						$data[] = [
							'good_id' => $goodId,
							'data' => $line
						];
					}
				}
				fclose($handle);
			}
  • Вопрос задан
  • 4448 просмотров
Пригласить эксперта
Ответы на вопрос 1
FanatPHP
@FanatPHP
Чебуратор тега РНР
Во-первых, "слишком дорого" - это фантазии.
Во-вторых, загружая данные в БД, надо ей говорить, в какой они кодировке.
В-третьих, кодировка тут не при чём. При проблемах с кодировкой текст может либо выглядеть как знаки вопроса, либо как нечитаемые символы. Но не пропадать совсем.

В общем, не зная никаких вообще деталей, сложно дать конкретные рекомендации, но если предположить, что используется запрос INSERT и mysql_query(), то после соединения с БД надо писать
mysql_set_charset('кодировка');
где кодировка - utf8 или cp1251 в зависимости от исходной кодировки файла.

Для других способов вставки могут понадобиться другие способы указания кодировки.
Если символы продолжают пропадать - дело не в базе.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы