Ошибка кодировка базы utf8mb4 отличается от кодировки соединения utf8

 

Пользователь 76561

Посетитель

Сообщений: 69
Баллов: 5
Авторитет:

0

Рейтинг пользователя:

0

Регистрация: 20.11.2010

Продукт — «Портал государственной организации»
Кодировка UTF-8
При тестировании конфигурации вижу следующее:

Кодировка таблицы b_perf_cluster (cp1251) отличается от кодировки базы (utf8)
Кодировка таблицы b_search_content_param (cp1251) отличается от кодировки базы (utf8)
Кодировка таблицы b_search_content_right (cp1251) отличается от кодировки базы (utf8)
Кодировка таблицы b_search_user_right (cp1251) отличается от кодировки базы (utf8)
Кодировка таблицы b_sticker (cp1251) отличается от кодировки базы (utf8)
Кодировка таблицы b_sticker_group_task (cp1251) отличается от кодировки базы (utf8)
Кодировка таблицы b_user_digest (cp1251) отличается от кодировки базы (utf8)

Еще есть 7 строк вида:

Сравнение (Collation) для таблицы «b_perf_cluster» (cp1251_general_ci) отличается от значения для базы (utf8_general_ci)
Сравнение (Collation) для таблицы «b_search_content_param» (cp1251_general_ci) отличается от значения для базы (utf8_general_ci)
Сравнение (Collation) для таблицы «b_search_content_right» (cp1251_general_ci) отличается от значения для базы (utf8_general_ci)
Сравнение (Collation) для таблицы «b_search_user_right» (cp1251_general_ci) отличается от значения для базы (utf8_general_ci)
Сравнение (Collation) для таблицы «b_sticker» (cp1251_general_ci) отличается от значения для базы (utf8_general_ci)
Сравнение (Collation) для таблицы «b_sticker_group_task» (cp1251_general_ci) отличается от значения для базы (utf8_general_ci)
Сравнение (Collation) для таблицы «b_user_digest» (cp1251_general_ci) отличается от значения для базы (utf8_general_ci)

и 266 строк вида:

Сравнение (Collation) для таблицы «b_adv_banner» (utf8_unicode_ci) отличается от значения для базы (utf8_general_ci)
Сравнение (Collation) для таблицы «b_adv_banner_2_country» (utf8_unicode_ci) отличается от значения для базы (utf8_general_ci)
Сравнение (Collation) для таблицы «b_adv_banner_2_day» (utf8_unicode_ci) отличается от значения для базы (utf8_general_ci)
Сравнение (Collation) для таблицы «b_adv_banner_2_group» (utf8_unicode_ci) отличается от значения для базы (utf8_general_ci)

Всего таблиц 275
Не затронуты лишь

b_iblock_offers_tmp
b_xml_tree

когда возникли ошибки не известно

Вопросы
1. Что произошло?
2. Могло ли это случиться из-за того, что на сайт импортировались файлы *.csv (сохраненные в кодировке Юникод utf8)
3. Всё плохо?
4. Что делать?

Заранее спасибо

 

Пользователь 76561

Посетитель

Сообщений: 69
Баллов: 5
Авторитет:

0

Рейтинг пользователя:

0

Регистрация: 20.11.2010

 

Администратор

Сообщений: 137
Баллов: 36
Авторитет:

1

Рейтинг пользователя:

2

Регистрация: 30.07.2009

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

Руководитель службы технической поддержки

 

Пользователь 76561

Посетитель

Сообщений: 69
Баллов: 5
Авторитет:

0

Рейтинг пользователя:

0

Регистрация: 20.11.2010

Сервер у меня свой, перекодировать таблицы я могу сам. Хотелось бы понять что вызывает смену кодировки во ВСЕХ таблицах. Устанавливался продукт под кодировкой UTF-8.

 

Пользователь 76561

Посетитель

Сообщений: 69
Баллов: 5
Авторитет:

0

Рейтинг пользователя:

0

Регистрация: 20.11.2010

Продукт недавно развернули, сейчас идет настройка. Не поздно переустановить. Но есть ли смысл?

 

Пользователь 12014

Эксперт

Сообщений: 1000
Баллов: 105
Авторитет:

1

Рейтинг пользователя:

4

Регистрация: 20.05.2007

Достаточно перекодироват таблицы

Не жмись, кликай «Мне нравится» на сообщении :)

 

Пользователь 76561

Посетитель

Сообщений: 69
Баллов: 5
Авторитет:

0

Рейтинг пользователя:

0

Регистрация: 20.11.2010

Перекодировать таблицы достаточно, а что необходимо сделать или чего нельзя делать, чтобы кодировка произвольно не изменялась

 

Пользователь 90944

Посетитель

Сообщений: 79
Баллов: 6
Авторитет:

0

Рейтинг пользователя:

0

Регистрация: 24.07.2011

Мужики подскажите как перекодировать базу,у меня такая же ерунда вышла.Переносил сайт с веб окружения на виртуалку и вот тебе на

Сравнение (Collation) для таблицы «b_adv_banner» (utf8_unicode_ci) отличается от значения для базы (utf8_general_ci)
Сравнение (Collation) для таблицы «b_adv_banner_2_country» (utf8_unicode_ci) отличается от значения для базы (utf8_general_ci)
Сравнение (Collation) для таблицы «b_adv_banner_2_day» (utf8_unicode_ci) отличается от значения для базы (utf8_general_ci)
Сравнение (Collation) для таблицы «b_adv_banner_2_group» (utf8_unicode_ci) отличается от значения для базы (utf8_general_ci)

и так далее…….

 

Администратор

Сообщений: 1193
Баллов: 238
Авторитет:

1

Рейтинг пользователя:

7

Регистрация: 20.12.2006

ALTER DATABASE XXX DEFAULT COLLATE utf8_unicode_ci;

 

Пользователь 34561

Постоянный посетитель

Сообщений: 287
Баллов: 35
Авторитет:

1

Рейтинг пользователя:

2

Регистрация: 12.12.2008

#10

5

29.07.2011 10:45:40

Было то же самое. Вот ответы техподдержки:

Посмотреть параметры кодировки БД можно следующим запросом (Настройки — Инструменты — SQL запрос):
SHOW VARIABLES LIKE «%char%»

Все параметры, кроме параметра character_set_filesystem необходимо установить в соответствие с кодировкой сайта. Это можно сделать в файле after_connect.php (bitrixphp_interfaceafter_connect.php), например:
$DB->Query(«SET character_set_results=utf8»);

Затем проверить кодировку в проверке сайта в «Тестировании конфигурации» (Настройки — Инструменты — Проверка сайта).

Для смены кодировки таблиц выполните, пожалуйста, запрос для каждой таблицы:
ALTER TABLE имя_таблицы CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;  

Проблема решается добавлением:
$DB->Query(«SET collation_connection = ‘utf8_unicode_ci’»);  
в /bitrix/php_interface/after_connect.php

Если к таблицам «b_search_phrase» и «b_search_suggest» будут ошибки, которые нельзя будет исправить (например восстановить таблицы), тогда мы рекомендуем Вам удалить модуль Поиск (Настройки — Настройки продукта — Модули) без сохранения данных в таблицах базы данных. Затем заново установите модуль Поиск, проведя переиндексацию сайта.

После выполнения всех процедур все выровнялось. Рекомендую.

 

Пользователь 90944

Посетитель

Сообщений: 79
Баллов: 6
Авторитет:

0

Рейтинг пользователя:

0

Регистрация: 24.07.2011

#11

0

29.07.2011 13:24:24

Цитата
Николай Рыжонин пишет:
ALTER DATABASE XXX DEFAULT COLLATE utf8_unicode_ci;

Большое спасибо,Помогло.

 

Пользователь 90944

Посетитель

Сообщений: 79
Баллов: 6
Авторитет:

0

Рейтинг пользователя:

0

Регистрация: 24.07.2011

#12

0

29.07.2011 13:35:03

Цитата
QODA пишет:
л

У меня еще одна проблема возникла,я думаю что данного характера,перенес сайт веб окружения на вертуалку,сначала были ошибки с кодировкой(это исправил)теперь обнаружил что часть портала а именно Интранет встал коряво,шаблон не тот что был,да и информация которая была отображается всего лишь на 30 процентов…было в базе забито около 100 сотрудников а после переноса стало человек 10 и т.п.

 

Пользователь 871

Посетитель

Сообщений: 70
Баллов: 6
Авторитет:

1

Рейтинг пользователя:

1

Регистрация: 24.10.2004

#13

3

16.09.2011 15:17:58

QODA, спасибо

Цитата
QODA пишет:
Для смены кодировки таблиц выполните, пожалуйста, запрос для каждой таблицы: ALTER TABLE имя_таблицы CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

помогло )

 

Пользователь 49702

Заглянувший

Сообщений: 10
Авторитет:

1

Рейтинг пользователя:

0

Регистрация: 30.09.2009

#14

0

19.09.2011 10:46:50

Цитата
Николай Рыжонин пишет:
ALTER DATABASE XXX DEFAULT COLLATE utf8_unicode_ci;

Огромное спасибо! Решение помогло!

 

Пользователь 109077

Заглянувший

Сообщений: 1
Авторитет:

0

Рейтинг пользователя:

0

Регистрация: 30.11.2011

#15

0

30.11.2011 15:49:58

При проверке сайта после восстановления из бэкапа вылезли следующие ошибки:

Кодировка соединения (check_mysql_connection_charset): Fail
Сравнение соединения с базой данных должно быть utf8_unicode_ci, текущее значение: utf8_general_ci.
Кодировка базы данных (check_mysql_db_charset): Warning Не удалось проверить из за ошибки кодировки соединения
Кодировки таблиц в БД (check_mysql_table_charset): Warning Не удалось проверить из за ошибки кодировки соединения
ALT ER DATABASE XXX DEFAULT COLLATE utf8_unicode_ci; — не помогло.

Дописывание $DB->Query(‘SET collation_connection = «utf8_unicode_ci»‘); в after_connect приводит к тому, что нельзя зайти даже на морду сайта.

Где ещё можно копать?

 

Пользователь 85035

Заглянувший

Сообщений: 32
Баллов: 1
Авторитет:

0

Рейтинг пользователя:

0

Регистрация: 04.03.2011

#16

0

14.12.2011 03:00:16

попробуй еще добавить в начало
$DB->Query(«SET NAMES ‘utf8′»;);

Вот мой файл after_connect.php
<?
$DB->Query(«SET NAMES ‘utf8′»;);
$DB->Query(«SET collation_connection = ‘utf8_unicode_ci’»;);
$DB->Query(«SET character_set_results=utf8»;);
?>
были аналогичные проблемы
1. кодировка соединения с базой данных должна быть utf8, текущее соединение cp1251 (лечилось $DB->Query(«SET NAMES ‘utf8′»;);
после вылезло
2. сравнение соединения с базой данных должно быть utf_unicode_ci, текущее значение utf_general_ci (лечилось $DB->Query(«SET collation_connection = ‘utf8_unicode_ci’»;);
$DB->Query(«SET character_set_results=utf8»;); )
после этого пункт»Кодировка соединения Успешно»
3. вылезло Кодировка базы данных Сравнение для базы (utf8_general_ci) отличается от сравнения для соединения (utf8_unicode_ci). [URL]Исправить давим на Исправить и получаем
[/URL]

Кодировка соединения Успешно
Кодировка базы данных Успешно
Кодировки таблиц в БД Успешно

4, повторяем Тестирование конфигурации. Все ок!

Удачи:)

 

Пользователь 99542

Заглянувший

Сообщений: 7
Авторитет:

0

Рейтинг пользователя:

0

Регистрация: 24.08.2011

#17

0

15.12.2011 17:35:57

Скачал виртуальную машину.
Развернул Совместная работа и на тесте сайта ошибка

Сравнение соединения с базой данных должно быть utf8_unicode_ci, текущее значение: utf8_general_ci.

Раньше такого не было.
Разворачивал несколько раз.

 

Пользователь 63180

Эксперт

Сообщений: 618
Баллов: 60
Авторитет:

1

Рейтинг пользователя:

3

Регистрация: 08.05.2010

#18

3

02.08.2012 17:04:10

а можно сменить кодировку всем таблицам сразу )
######кидаем в битриксе запрос типа чтобы потянуть строки с запросами на каждую таблицу:

SELECT CONCAT(‘ALT ER TABLE `’, t.`TABLE_SCHEMA`, ‘`.`’, t.`TABLE_NAME`, ‘` CONVERT TO CHARACTER SET cp1251 COLLATE cp1251_general_ci;’) as sqlcode

 FROM `information_schema`.`TABLES` t
WHERE 1
  AND t.`TABLE_SCHEMA` = ‘db_name
ORDER BY 1

(вместо db_name) имя вашей базы

в результате запроса вы увидете пару сотен строк )) типа

Цитата
ALT ER TABLE `kudin_55`.`b_stat_adv` CONVERT TO CHARACTER SET cp1251 COLLATE cp1251_general_ci;
ALT ER TABLE `kudin_55`.`b_stat_browser` CONVERT TO CHARACTER SET cp1251 COLLATE cp1251_general_ci;
ALT ER TABLE `kudin_55`.`b_stat_city_day` CONVERT TO CHARACTER SET cp1251 COLLATE cp1251_general_ci;
ALT ER TABLE `kudin_55`.`b_stat_city_ip` CONVERT TO CHARACTER SET cp1251 COLLATE cp1251_general_ci;
ALT ER TABLE `kudin_55`.`b_stat_city` CONVERT TO CHARACTER SET cp1251 COLLATE cp1251_general_ci;
ALT ER TABLE `kudin_55`.`b_stat_country_day` CONVERT TO CHARACTER SET cp1251 COLLATE cp1251_general_ci;
ALT ER TABLE `kudin_55`.`b_stat_country` CONVERT TO CHARACTER SET cp1251 COLLATE cp1251_general_ci;
ALT ER TABLE `kudin_55`.`b_stat_day_site` CONVERT TO CHARACTER SET cp1251 COLLATE cp1251_general_ci;
ALT ER TABLE `kudin_55`.`b_stat_day` CONVERT TO CHARACTER SET cp1251 COLLATE cp1251_general_ci;
ALT ER TABLE `kudin_55`.`b_stat_ddl` CONVERT TO CHARACTER SET cp1251 COLLATE cp1251_general_ci;
ALT ER TABLE `kudin_55`.`b_stat_event_day` CONVERT TO CHARACTER SET cp1251 COLLATE cp1251_general_ci;
………

затем ответ копируете и все эти строки бахаете как новый запрос )

вот и всё)

для утф посдатвляете  utf8 COLLATE utf8_general_ci;

 

Пользователь 576649

Заглянувший

Сообщений: 1
Авторитет:

1

Рейтинг пользователя:

0

Регистрация: 04.05.2016

#19

0

29.01.2017 22:58:19

 Кодировки таблиц имеют ошибки

2017-Jan-29 22:51:26 Кодировки таблиц в БД (check_mysql_table_charset): Fail
Кодировка поля «ACTIVE» таблицы «bxmod_seo» (utf8) отличается от кодировки базы (cp1251)
Кодировка поля «KEY» таблицы «bxmod_seo» (utf8) отличается от кодировки базы (cp1251)
Кодировка поля «SEO_TEXT» таблицы «bxmod_seo» (utf8) отличается от кодировки базы (cp1251)
Кодировка поля «META_KEYS» таблицы «bxmod_seo» (utf8) отличается от кодировки базы (cp1251)
Кодировка поля «META_DESC» таблицы «bxmod_seo» (utf8) отличается от кодировки базы (cp1251)
Кодировка поля «TITLE» таблицы «bxmod_seo» (utf8) отличается от кодировки базы (cp1251)
Кодировка поля «H1» таблицы «bxmod_seo» (utf8) отличается от кодировки базы (cp1251)
Кодировка поля «URL» таблицы «bxmod_seo» (utf8) отличается от кодировки базы (cp1251)

помогите разобраться

 

Пользователь 34550

Эксперт

Сообщений: 1579
Баллов: 128
Авторитет:

1

Рейтинг пользователя:

0

Регистрация: 12.12.2008

#20

0

30.01.2017 10:09:39

вам же все написано.
БД имеет кодировку cp1251
таблицы имеют кодировку utf
приведите все к одному виду и проблем не будет

 

Пользователь 307442

Заглянувший

Сообщений: 10
Авторитет:

1

Рейтинг пользователя:

0

Регистрация: 09.03.2015

#21

0

12.02.2019 11:46:47

А у меня тоже проблем но на команду

ALT ER   DATABASE XXX DEFAULT COLLATE utf8_unicode_ci;

приходит ответ [1044] Access denied for user ‘логин-базы_bitrix’@’localhost’ to database ‘XXX’! доступ запрещен

как мне быть  

MySQL

Большинство web-мастеров, владельцев сайтов и людей, так или иначе сталкивающихся с web-программированием, рано или поздно встают перед задачей переноса базы данных сайта с одного хостинга на другой. Кроме этого, зачастую, у людей, тесно связанных с web-технологиями, возникает необходимость развернуть сайт локально на компьютере, к примеру, под программным решением Denwer. И в той, и в другой ситуации пользователь может столкнуться с различными ошибками экспорта/импорта базы данных. Об устранении одной из таких ошибок и пойдёт речь дальше.

Содержание статьи:

Причины возникновения ошибки «#1273 — Unknown collation»

Итак, при импорте базы данных на хостинг или на Denwer процесс загрузки может быть прерван с ошибкой следующего содержания:

Ошибка
SQL-запрос:

CREATE TABLE  `wp_commentmeta` (

 `meta_id` BIGINT( 20 ) UNSIGNED NOT NULL ,
 `comment_id` BIGINT( 20 ) UNSIGNED NOT NULL DEFAULT  '0',
 `meta_key` VARCHAR( 255 ) COLLATE utf8mb4_unicode_520_ci DEFAULT NULL ,
 `meta_value` LONGTEXT COLLATE utf8mb4_unicode_520_ci
) ENGINE = INNODB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_520_ci;

Ответ MySQL: Документация

#1273 - Unknown collation: 'utf8mb4_unicode_520_ci' 

Последней строкой может быть указана и другая кодировка, например, utf8mb4_unicode_ci и тому подобное.

Вот как эта ошибка выглядит в браузере:

Ошибка #1273 - Unknown collation'utf8mb4_unicode_520_ci'

Причина возникновения ошибки #1273 в том, что в новых версиях СУБД MySQL добавляются новые кодировки сопоставления, которых может не оказаться на хостинге и в последних версиях продукта Denwer.
Исходя из озвученной причины ниже приведём три различных варианта решения проблемы Unknown collation.

Оптимальный вариант решения ошибки #1273, по нашему мнению, это обновление версии системы sql до актуального релиза. Главный минус данного способа заключается в том, что для его реализации вам необходимо иметь доступ до СУБД на сервере.
То есть, этот вариант подходит в том случае, если вы работаете с программным продуктом Denwer, расположенным на вашем компьютере (не рассматриваем ситуацию, при которой вы используете VDS — виртуальный выделенный сервер).

Чтобы обновить систему MySQL в установленном пакете Denwer на компьютере, в первую очередь, необходимо скачать нужные файлы новой версии sql. Предлагаем вам сделать это одним из двух способов:

  1. Скачать один из прикреплённых к статье файлов с архивом, соответствующих разрядности вашей операционной системы: mysql-5.7.19-winx86 или mysql-5.7.17-winx64
  2. Скачать на официальном сайте полный архив MySQL Community Server под вашу версию операционной системы и извлечь оттуда файлы mysql.exe, mysqlcheck.exe, mysqld.exe и mysql_upgrade.exe, расположенные в каталоге bin

Далее останавливаем Денвер запуском ярлыка Stop Denwer, переходим на компьютере в директорию MySQL установленного пакета Denwer. По умолчанию задан следующий путь:

C:WebServersusrlocalmysql-5.5bin

В этот каталог помещаем скачанные exe-файлы и соглашаемся на замену.
Запускаем Денвер ярлыком Start Denwer и повторно импортируем базу данных. Ошибка устранена.

Экспорт базы данных сайта в режиме совместимости со старым MySQL

Этот способ обхода ошибки Unknown collation: utf8mb4 может быть использован в том случае, если мы имеем возможность повторного экспорта базы данных. Данное условие вытекает из того, что основные действия в этом варианте производятся на этапе создания бэкапа, а не его загрузки на сервер.

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

Рассмотрим, как выгрузить базу сайта в режиме совместимости MySQL на примере web-приложения phpMyAdmin.
Заходим в phpMyAdmin, выбираем нашу базу в списке и переходим на вкладку Экспорт

Экспорта базы данных сайта в phpMyAdmin

На открывшейся странице в разделе Метод экспорта ставим флаг-галку у пункта Обычный — отображать все возможные настройки. Теперь прокручиваем страницу вниз до раздела Параметры формата и в пункте Максимальная совместимость с системой базы данных, или устаревшей версией MySQL: из выпадающего списка выбираем вариант MYSQL40.
Остальные параметры можно не менять, скроллим страницу до конца и нажимаем кнопку Вперёд.

Сохранение базы сайта в режиме совместимости MYSQL40

Сформированный архив будет импортироваться на сервер с MySQL старой версии без ошибок.

Если после этого при открытии страничек сайта будут проблемы с кодировкой: некорректное отображение текста, «иероглифы» и так далее — то дополнительно будет необходимо в файле конфигурации вашего CMS (к примеру, в WordPress это файл wp-config.php) заменить параметр, отвечающий за кодировку с utf8mb4 на utf8, сохранить внесённые изменения и обновить страницу

Ручное изменение кодировки базы данных сайта

И последний пример борьбы с ошибкой импорта базы данных сайта, который мы рассмотрим в рамках текущей публикации — это изменение кодировки SQL базы в таблице.
Проделать это можно как с помощью специальных sql-команд, так и вручную. Рассмотрим второй вариант.

Для того, чтобы отредактировать кодировку в базе, нам необходимо разархивировать бэкап сайта, если он находится в сжатой папке zip или rar. После этого открываем получившийся файл с расширением *.sql в удобном текстовом редакторе, например, в Notepad++
В окне текстового редактора нам необходимо заменить значения utf8mb4_unicode_ci и utf8mb4_unicod_520i на utf8_general_ci. Кроме этого, если в таблицах базы встречается значение utf8mb4, то, как и в предыдущем способе, его также надо изменить на utf8.

После проделанной корректировки сохраняем изменённый файл и повторяем импорт базы данных на сервер.

Мы рассмотрели три способа борьбы с ошибкой #1273 — Unknown collation: ‘utf8mb4_unicode_ci’.
Надеемся, что вам удалось побороть данную проблему одним из вариантов.

WordPress 4.2 introduced support for «utf8mb4» character encoding for security reasons, but only MySQL 5.5.3 and greater support it. The way the installer (and updater) handles this is that it checks your MySQL version and your database will be upgraded to utfmb4 only if it’s supported.

This sounds great in theory but the problem (as you’ve discovered) is when you are migrating databases from a MySQL server that supports utf8mb4 to one that doesn’t. While the other way around should work, it’s basically a one-way operation.

As pointed out by Evster you might have success using PHPMYAdmin’s «Export» feature. Use «Export Method: Custom» and for the «Database system or older MySQL server to maximize output compatibility with:» dropdown select «MYSQL 40«.

For a command line export using mysqldump. Have a look at the flag:

$ mysqldump --compatible=mysql4

Note: If there are any 4-byte characters in the database they will be corrupted.

Lastly, for anyone using the popular WP Migrate DB PRO plugin, a user in this WordPress.org thread reports that the migration is always handled properly but I wasn’t able to find anything official.

The WP Migrate DB plugin translates the database from one collation to the other when it moves 4.2 sites between hosts with pre- or post-5.5.3 MySQL

At this time, there doesn’t appear to be a way to opt out of the database update. So if you are using a workflow where you are migrating a site from
a server or localhost with MySQL > 5.5.3 to one that uses an older MySQL version you might be out of luck.

Озадачился я на днях с BB-редактором для модуля комментариев и оказалось, что Windows 10 Emoji не работают в utf8 кодировке, для 1C Битрикс Emoji нужна utf8mb4 кодировка.

Оказывается уже и кодировка utf8 считается морально устаревшей, вместо нее лучше использовать кодировку utf8mb4, т.к. она поддерживает гораздо большее количество символов выше 0xFFFD, в том числе Bitrix Emoji, полностью совместима с utf8 и поддерживается сервером MySQL с версии 5.5.3.

Итак, если кодировка (charset) будет utf8mb4, то сравнение (collation) будет utf8mb4_unicode_ci

Кодировка MySQL-сервера

Можно в самом конфиге MySQL (my.cnf) задать кодировку сервера и соединения по умолчанию.
Но если вы в этом ничего не понимаете или у вас шаред, то пропустите этот шаг, достаточно будет настроить это в конфигах Битрикса для конкретного сайта, а не всего сервера.

[mysqld]
character-set-server=utf8
collation-server=utf8_unicode_ci
init-connect="SET NAMES utf8 COLLATE utf8_unicode_ci"

Кодировка новой базы

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

Кодировка существующей базы

Это самое сложное, сделать конвертацию действующей базы на рабочем проекте, просто поменять сравнение у базы и таблиц будет недостаточно, еще нужно задать сравнение и кодировку всем полям таблицы типа: char, varchar, tinytext, text, mediumtext, longtext, enum, set, json

Для автоматизации конвертации всей базы я написал свой скрипт busconvert.php, его нужно залить на сайт на Битриксе, в любое место, главное открыть его в браузере и нажать кнопку Начать конвертацию.

BUSCONVERT v1.0.0

Сначала скрипт выводит текущие значения кодировки и сравнения до конвертации.
После нажатия на кнопку Начать конвертацию скрипт начнет конвертировать всю текущую базу сайта.

Выделено желтым — кодировка, в которую скрипт будет конвертировать.
Выделено красным- текущие значения.

По окончании работы выводит результаты После конвертации и Лог конвертации, а также количество затронутых таблиц  и новую кодировку базы, если все прошло успешно.

В таблице лога выводится новая кодировка и все SQL-запросы, которые совершал скрипт над данными полей каждой таблицы.

После успешной конвертации остается поменять настройки соединения с базой в 2-х файлах.
Здесь в запросах заменяем utf8 на utf8mb4

//bitrix/php_interface/after_connect.php
$DB->Query("SET NAMES 'utf8mb4'");
$DB->Query('SET collation_connection = "utf8mb4_unicode_ci"');

//bitrix/php_interface/after_connect_d7.php $connection = BitrixMainApplication::getConnection(); $connection->queryExecute("SET NAMES 'utf8mb4'"); $connection->queryExecute('SET collation_connection = "utf8mb4_unicode_ci"');

А также в файле /bitrix/.settings.php

'utf_mode' =>
  array(
     'value'    => true,
     'readonly' => true,
  ),

Еще желательно сбросить весь кэш сайта, либо в админке, либо удалив вот эти папки с диска.

/bitrix/cache
/bitrix/managed_cache
/bitrix/stack_cache
/bitrix/html_pages/example.com

Все, это должно помочь, других настроек нет.

Чтобы проверить новую кодировку откройте статью, новость или товар, и в форме редактирования, например, в названии вставьте Windows 10 Emoji комбинация Windows + . в английской раскладке.

Вот такая красота Emoji 🤞😜🤞 будет везде, и в заголовке страницы, и в хлебных крошках, и в заголовке окна браузера, и в результатах поиска Google и Yandex ваши материалы станут более заметны!

Заметки

1) Скрипт будет работать, даже если закрыть окно браузера, пока все не выполнит.

2) Скрипт тестировался только на кодировке utf8, для кириллицы cp1251 пока не подходит, позже постараюсь и этот момент доработать.

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

$charset = 'utf8mb4';
$collate = 'utf8mb4_unicode_ci';

4) Я базу тестового сайта конвертировал раз 50 и никаких проблем, если что, можно запускать скрипт несколько раз.

5) При конвертации тип и другие параметры поля не изменяются, тщательно все проверил, некоторые запросы почему-то изменяли тип поля text на mediumtext

А проверить это можно инструментом от 1С Битрикс Проверка системы.

Настройки - Инструменты - Проверка системы

Кодировка соединения — будет ругаться, пока Битрикс про это дело не в курсе.
Структура базы данных — Если успешно, значит конвертация прошла успешно, ни одно поле не изменилось в процессе конвертации, важно проверить этот момент еще до конвертации, чтобы потом не гадать, когда это случилось.
Если перед конвертацией скрипт найдет отличающиеся от базы поля, то надо все исправить, кроме случаев, когда вы сами изменяли  поля в таблицах и точно знаете, что делаете.

В этом случае следите за тем, что бы кто-нибудь из ваших разрабов или даже клиент не вернул тут все обратно, скрипт Битрикса может вернуть кодировки обратно в utf8.

6) На двух тестовых сайтах, которые у меня на OSPanel, никаких проблем с конвертацией не было, а вот на текущем пришлось повозиться с такой вот проблемой.

2017-12-05 03:20:12 - Host: tuning-soft.ru - UNCAUGHT_EXCEPTION - [BitrixMainDBSqlQueryException] 
Mysql query error: (1071) Specified key was too long; max key length is 767 bytes (400)
ALTER TABLE `b_user_option` MODIFY `NAME` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT  NULL ;

Ровно в 20 таблицах пришлось менять тип поля с varchar(255) на varchar(191)

Получется, что для хранения строки utf8 нужно 3 байта на символ, а utf8mb4 нужно 4 байта.
Предел для utf8 составляет 767/3 = ~255 символов, для utf8mb4 это 767/4 = ~191 символ.

  • utf8 VARCHAR(255)
  • utf8mb4 VARCHAR(191)

Но почему-то это не для всех полей varchar(255) требовал, только для некоторых, не знаю почему.

Менял я длину значения поля в базе с помощью своего модуля TSAdminer, вы можете это сделать в любом инструменте для работы с БД.

Ошибки возможно и у вас будут, их просто надо исправить все, пока конвертация не закончится.

Файлы к статье

  • busconvert v.1.0.0

Переходим с utf8 на utf8mb4 в MySQL.

Если ваша версия СУБД MySQL 5.5.3 и выше, то вам необходимо использовать кодировку utf8mb4, вместо utf8. Об этом упоминается здесь и здесь.

Следовательно, больше нет необходимости использовать ни utf8_general_ci, ни utf8_unicode_ci.

utf8mb4_general_ci или utf8mb4_unicode_ci

В настоящее время для баз данных и таблиц MySQL рекомендуется использовать кодировку utf8mb4_unicode_ci.

Настройка кодировки utf8mb4 для СУБД MySQL

Исходя из вышеизложенного нам необходимо произвести настройку основных параметров кодировки СУБД MySQL.

Если у вас уже есть базы данных, то обязательно создайте резервные копии всех баз данных.

В конфигурационном файле MySQL (my.ini(windows)/my.cnf(Linux)) необходимо изменить кодировку на utf8mb4:

[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

[mysqld]
character-set-client-handshake = FALSE
init_connect ='SET collation_connection = utf8mb4_unicode_ci'
init_connect ='SET NAMES utf8mb4'
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

Проверяем корректность работы применимых настроек:

SHOW VARIABLES WHERE Variable_name LIKE 'character_set_%' OR Variable_name LIKE 'collation%';

Результат:

+--------------------------+--------------------+
| Variable_name            | Value              |
+--------------------------+--------------------+
| character_set_client     | utf8mb4            |
| character_set_connection | utf8mb4            |
| character_set_database   | utf8mb4            |
| character_set_filesystem | binary             |
| character_set_results    | utf8mb4            |
| character_set_server     | utf8mb4            |
| character_set_system     | utf8               |
| collation_connection     | utf8mb4_general_ci |
| collation_database       | utf8mb4_unicode_ci |
| collation_server         | utf8mb4_unicode_ci |
+--------------------------+--------------------+
10 rows in set, 1 warning (0.00 sec)

Кодировка и сравнение для базы данных, таблиц и столбцов в MySQL

Запросы для измениния кодировки и сравнения для базы данных, таблиц и столбцов на utf8mb4.

Для базы данных:

ALTER DATABASE [db_name] CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;

Для таблицы:

ALTER TABLE [table_name] CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Для столбцов:

ALTER TABLE [table_name] CHANGE [column_name] [column_name] VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Восстановление и оптимизация всех таблиц

После обновления версии MySQL сервера и применения действий по смене кодировки и сравнений, необходимо произвести восстановление и оптимизацию всех баз данных и таблиц. Для этого вы можете выполнить следующие запросы для каждой таблицы:

REPAIR TABLE [table_name];
OPTIMIZE TABLE [table_name];

Или с использованием команды mysqlcheck:

$ mysqlcheck -u root -p --auto-repair --optimize --all-databases

Пример миграции для Yii2

В этом примере мы изменим кодировку для столбца content в таблице post:

/**
* @return void
* @throws yiidbException
*/
public function safeUp()
{
 $sql = "ALTER TABLE `post` CHANGE `content` `content` MEDIUMTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci";
 Yii::$app->db->createCommand($sql)->execute();
}

/**
* @return void
* @throws yiidbException
*/
public function safeDown()
{
 $sql = "ALTER TABLE `post` CHANGE `content` `content` MEDIUMTEXT CHARACTER SET utf8 COLLATE utf8_unicode_ci";
 Yii::$app->db->createCommand($sql)->execute();
}

Решение ошибки, которая возникала при импорте базы данных MySQL в панели управления phpMyAdmin.

При переносе базы данных WordPress с одного хостинга на другой возникла ошибка:

#1273 — Unknown collation: ‘utf8mb4_unicode_520_ci’

В целом сообщение об ошибке было таким:

Ошибка
SQL запрос:
— Структура таблицы `wp_subscribe_reloaded_subscribers`

CREATE TABLE `wp_subscribe_reloaded_subscribers` (
  `stcr_id` int(11) NOT NULL,
  `subscriber_email` varchar(100) COLLATE utf8mb4_unicode_520_ci NOT NULL,
  `salt` int(15) NOT NULL,
  `subscriber_unique_id` varchar(50) COLLATE utf8mb4_unicode_520_ci DEFAULT NULL,
  `add_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci

Ответ MySQL:
#1273 — Unknown collation: ‘utf8mb4_unicode_520_ci’

Причина оказалась в том, что таблица в базе данных MySQL плагина Subscribe To Comments Reloaded находилась в кодировке utf8mb4_unicode_520_ci. А для верной работы необходима кодировка utf8mb4_unicode_ci.

Ошибка Unknown utf8mb4_unicode_520 может возникнуть из-за неверного формата таблицы любого другого плагина. Например, в одном из случаев, у меня такая ошибка возникала сразу во многих других таблицах (не только относящихся к плагинам), например:

— Структура таблицы `wp_commentmeta`

CREATE TABLE `wp_commentmeta` (
  `meta_id` bigint(20) UNSIGNED NOT NULL,
  `comment_id` bigint(20) UNSIGNED NOT NULL DEFAULT ‘0’,
  `meta_key` varchar(255) COLLATE utf8mb4_unicode_520_ci DEFAULT NULL,
  `meta_value` longtext COLLATE utf8mb4_unicode_520_ci
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci

Любая ошибка такого рода (не важно что за таблица или плагин) исправляется одинаково. Причем операции со вкладкой «Структура» можно и пропускать и делать только «Операции» (об этом ниже). Но чтобы всё точно работало, лучше сделать и то и другое.

Если ИМЕЕТСЯ доступ к базе данных старого хостинга

Заходим в эту базу через phpMyAdmin.

В колонке слева выбираем таблицу wp_subscribe_reloaded_subscribers. Сверху панели выбираем вкладку «Структура».

Нажимаем изменить и меняем сравнение utf8mb4_unicode_520_ci на utf8mb4_unicode_ci.

Затем выбираем вкладку «Операции», снова выбираем кодировку utf8mb4_unicode_ci, отмечаем галочку Change all column collations. Нажимаем вперед, подтверждаем, что хотим выполнить эту операцию.

После этого можно экспортировать свою базу данных и импортировать на новый хостинг. На этот раз всё должно пройти гладко.

Если доступа к базе данных старого хостинга НЕТ

В этом случае надо открыть базу данных через специализированные программы, например, Notepad++ или Transmit в Mac OS. Там найти строчки utf8mb4_unicode_520_ci и заменить их на utf8mb4_unicode_ci. Сохранить и дальше импортировать к себе на хостинг.

Если ошибку вызывает другой плагин, не обязательно wp_subscribe_reloaded_subscribers или какая иная таблица, то действовать нужно по аналогии с этой инструкцией, но уже для другой таблицы.


WordPress, Программное обеспечение

  • 20.11.2015
  • 47 190
  • 10
  • 19.01.2020
  • 13
  • 12
  • 1

Исправляем ошибку: #1273 - Unknown collation:'utf8mb4_unicode_ci'

  • Содержание статьи
    • Решение проблемы
      • Правильный способ
      • НЕ Правильный способ
    • Комментарии к статье ( 10 шт )
    • Добавить комментарий

После покупки очередного сайта и переносе его на свой старенький хостинг, столкнулся с этой ошибкой. Сайт на CSM WordPress. Данная проблема возникает из-за того, что начиная с версии MySQL 5.5.3 и выше — появилось сравнение utf8mb4_unicode_ci, которое не поддерживается более старыми версиями. Из-за этого при импорте базы из дампа более новой версии (в моем случае это Mysql 5.5.45) на старую версию — 5.1.73 и вылезла данная ошибка.

error #1273 — Unknown collation: ‘utf8mb4_unicode_ci’

utf8mb4_unicode_ci

Решение проблемы

Итак, проблему можно решить как минимум двумя разными способами:

Правильный способ

Просто обновить MySQL до версии 5.5.3 или выше. После этого данная ошибка должна самоустраниться

НЕ Правильный способ

Открываем дамп базы данных любым текстовым редактором и делаем замену строки «utf8mb4_unicode_ci» на «utf8_general_ci» для всех найденных совпадений. После этого сохраняем новую версию дампа и уже её импортируем в MySQL. Если у вас вылезет ошибка «Unknown character set: ‘utf8mb4’«, то прочитайте эту статью.

Хостинг 1С БитриксОфициальный сертифицированный
хостинг для продуктов 1С Битрикс

Битрикс-стандарт INFO Оптимизированные тарифы для быстрой работы корпоративных и информационных сайтов на 1С Битрикс.

14.02.2020

При тестировании конфигурации в 1С Битрикс может возникать ошибка:

Ошибка! Сравнение для базы (utf8_general_ci) отличается от сравнения для соединения (utf8_unicode_ci).

Данная ошибка не является критично, но рекомендуется исправить ее. В системе есть возможность автоматического исправления. Нажмите на ссылку «Исправить» и продолжите операцию.

После автоматического исправления снова запустите тестирование конфигурации. Ошибка должна исчезнуть.

Обратите внимание:

Ошибки связанные с кодировкой таблиц и структуры базы данных должны исправляться ПОСЛЕ исправления текущей, в противном случае база данных может повредиться. Строго следуйте порядку исправления ошибок по списку.

Концепция и все материалы с сайта btrxboost.com включающие в себя текстовую, графическую, видео, аудио и маркетинговую информацию, защищены российским и международным законодательством. В соответствии с соглашением об охране авторских прав и интеллектуальной собственности (ст. №1259, №1260, гл. 70 “Авторское право” ГК РФ от 18.12.2006 № 230-ФЗ) и согласно сертификату собственности авторских прав на информационные материалы RID 07N-4M-48 от 12.08.2012, а также сертификата DMCA id: f25cb914-aba8-4988-a116-13afb399bba2 от 21.06.2019.

В случае нарушений данных правил, применяются следующие меры: подача официального заявления в судебные органы в т.ч. с эскалацией запроса хостинг-провайдеру на котором расположен сайт-нарушитель, а также подача запроса на исключение сайта-нарушителя из поисковых систем согласно “Online Copyright Infringement Liability Limitation Act” по ч. II, раздел 512 к закону об авторском праве по DMCA.

Хостинг 1С БитриксОфициальный сертифицированный
хостинг для продуктов 1С Битрикс

Ошибка кодировки таблиц без возможности автоматического исправления

19.04.2023

В случае появления ошибки при проверке системы (тестирование конфигурации): «Ошибка! Кодировки таблиц имеют ошибки, общее число ошибок N, из них автоматически могут быть исправлены: 0» требуется:

  1. Выполнить резервное копирование базы данных сайта перед началом проведения процедуры во избежание получения неисправимых ошибок в случае неверных действий.
  2. Кликнуть на иконку вопросительного знака в правой части строки с вышеуказанной ошибкой.
  3. В открывшемся окне кликнуть по ссылке «Подробности в журнале проверки системы».
  4. На экране будет отображен список ошибок по каждой таблице и полям с неверной кодировкой. Скопируйте все строки с ошибками кодировки.
  5. Вставьте текст с ошибками в расширенный текстовый редактор, например Notepad++ (Windows) или Sublime Text (Mac).
  6. Удалите все строки, где указаны ошибки кодировки в полях. Оставьте только строки с ошибками таблиц.

Например, из текста ошибок:

Кодировка таблицы «b_b24connector_button_site» (utf8mb4) отличается от кодировки базы (utf8)
Кодировка поля «SITE_ID» таблицы «b_b24connector_button_site» (utf8mb4) отличается от кодировки базы (utf8)
Кодировка таблицы «b_calendar_event_connection» (utf8mb4) отличается от кодировки базы (utf8)
Кодировка поля «VENDOR_EVENT_ID» таблицы «b_calendar_event_connection» (utf8mb4) отличается от кодировки базы (utf8)
Кодировка поля «SYNC_STATUS» таблицы «b_calendar_event_connection» (utf8mb4) отличается от кодировки базы (utf8)
Кодировка поля «ENTITY_TAG» таблицы «b_calendar_event_connection» (utf8mb4) отличается от кодировки базы (utf8)
Кодировка поля «VERSION» таблицы «b_calendar_event_connection» (utf8mb4) отличается от кодировки базы (utf8)
Кодировка поля «VENDOR_VERSION_ID» таблицы «b_calendar_event_connection» (utf8mb4) отличается от кодировки базы (utf8)
Кодировка поля «RECURRENCE_ID» таблицы «b_calendar_event_connection» (utf8mb4) отличается от кодировки базы (utf8)
Кодировка поля «DATA» таблицы «b_calendar_event_connection» (utf8mb4) отличается от кодировки базы (utf8)
Кодировка таблицы «b_calendar_section_connection» (utf8mb4) отличается от кодировки базы (utf8)
Кодировка поля «VENDOR_SECTION_ID» таблицы «b_calendar_section_connection» (utf8mb4) отличается от кодировки базы (utf8)
Кодировка поля «SYNC_TOKEN» таблицы «b_calendar_section_connection» (utf8mb4) отличается от кодировки базы (utf8)
Кодировка поля «PAGE_TOKEN» таблицы «b_calendar_section_connection» (utf8mb4) отличается от кодировки базы (utf8)
Кодировка поля «ACTIVE» таблицы «b_calendar_section_connection» (utf8mb4) отличается от кодировки базы (utf8)
Кодировка поля «LAST_SYNC_STATUS» таблицы «b_calendar_section_connection» (utf8mb4) отличается от кодировки базы (utf8)
Кодировка поля «VERSION_ID» таблицы «b_calendar_section_connection» (utf8mb4) отличается от кодировки базы (utf8)
Кодировка поля «IS_PRIMARY» таблицы «b_calendar_section_connection» (utf8mb4) отличается от кодировки базы (utf8)
Кодировка таблицы «b_catalog_exported_product» (utf8mb4) отличается от кодировки базы (utf8)
Кодировка поля «SERVICE_ID» таблицы «b_catalog_exported_product» (utf8mb4) отличается от кодировки базы (utf8)
Кодировка поля «ERROR» таблицы «b_catalog_exported_product» (utf8mb4) отличается от кодировки базы (utf8)
Кодировка таблицы «b_catalog_exported_product_queue» (utf8mb4) отличается от кодировки базы (utf8)

Должен получиться следующий текст:

Кодировка таблицы b_b24connector_button_site (utf8mb4) отличается от кодировки базы (utf8)
Кодировка таблицы b_calendar_event_connection (utf8mb4) отличается от кодировки базы (utf8)
Кодировка таблицы b_calendar_section_connection (utf8mb4) отличается от кодировки базы (utf8)
Кодировка таблицы b_catalog_exported_product (utf8mb4) отличается от кодировки базы (utf8)
Кодировка таблицы b_catalog_exported_product_queue (utf8mb4) отличается от кодировки базы (utf8)

Затем требуется оставить только названия таблиц. Должно получиться:

b_b24connector_button_site
b_calendar_event_connection
b_calendar_section_connection
b_catalog_exported_product
b_catalog_exported_product_queue

После необходимо добавить следующие запросы в начало строк и после названия таблиц: ALTER TABLE — CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;

Должен получиться следующий текст:

ALTER TABLE b_b24connector_button_site CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_calendar_event_connection CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_calendar_section_connection CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_catalog_exported_product CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_catalog_exported_product_queue CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;

Копируем получившийся результат. Затем переходим в раздел администраторской части сайта «SQL запрос» и в текстовое поле вставляем ранее скопированный текст результата. Нажать кнопку «Выполнить запрос».

Таким образом одновременно выполняется множество запросов по изменению кодировки таблиц базы данных для исправления ошибки.

Концепция и все материалы с сайта btrxboost.com включающие в себя текстовую, графическую, видео, аудио и маркетинговую информацию, защищены российским и международным законодательством. В соответствии с соглашением об охране авторских прав и интеллектуальной собственности (ст. №1259, №1260, гл. 70 “Авторское право” ГК РФ от 18.12.2006 № 230-ФЗ) и согласно сертификату собственности авторских прав на информационные материалы RID 07N-4M-48 от 12.08.2012, а также сертификата DMCA id: f25cb914-aba8-4988-a116-13afb399bba2 от 21.06.2019.

В случае нарушений данных правил, применяются следующие меры: подача официального заявления в судебные органы в т.ч. с эскалацией запроса хостинг-провайдеру на котором расположен сайт-нарушитель, а также подача запроса на исключение сайта-нарушителя из поисковых систем согласно “Online Copyright Infringement Liability Limitation Act” по ч. II, раздел 512 к закону об авторском праве по DMCA.

def connect():
    conn = mysql.connector.connect(host='localhost', database='otrs',     user='root', password='password', autocommit=True)
    if conn.is_connected():
        print('connected')
    sqlstr = "SELECT ticket.id, article.id, ticket_history.create_time, article.a_body FROM ticket, ticket_history, article WHERE ticket_history.ticket_id=ticket.id AND ticket_history.article_id=article.id AND (ticket.ticket_state_id=2 OR ticket.ticket_state_id=3) AND ticket_history.name ='%%Close' ;"

    cursor.execute(sqlstr)
    for row in cursor.fetchall():
        print row
        val= row[3].replace(''','')
        print val
        sqlstr1 = "INSERT INTO temp VALUES (%s, %s, '%s','%s')" %(row[0], row[1], row[2], val)
        cursor.execute(sqlstr1)
        print 'done'

I wrote a python query to insert select data from tables in mysql table and write them to a temp table. When I execute the query, after few data rows are inserted, it raises an exceptions like

DatabaseError: 1366 (HY000): Incorrect string value: 'xE2x80x8BWil...'
DatabaseError: 1366 (HY000): Incorrect string value: 'xE2x80x8BVid...'
DatabaseError: 1366 (HY000): Incorrect string value: 'xE2x80x8BSol...'

Entries which raise issues are,

(2932, 10503, datetime.datetime(2016, 10, 19, 17, 2, 7), u'Hi Arshadh,nnThis has been configured on PR FWSM device onlynnBR,nu200bVidunanxa0')
(3136, 13353, datetime.datetime(2016, 11, 25, 12, 40, 35), u'This has been postponed as we need support from forinet TAC team to resolventhis.nWaiting for their feedback.nu200bWill raise new ticket when we get update from themn')
(3661, 18395, datetime.datetime(2017, 1, 27, 15, 34, 45), u'This request has been performed on 1/26/2017,nu200bSince the testing is getting delayed- closing the crxa0nwe can reopen this again if there is any problem.n')

But the below data set doesn’t raise an error,

(3672, 18393, datetime.datetime(2017, 1, 27, 15, 28, 9), u'This request has been performed on 1/26/2017,nSince the testing is getting delayed- closing the crxa0nwe can reopen this again if there is any problem.n')

So it raises an issue if with there is nu200b instead of n .
I searched everywhere, but couldn’t find a solution. I think error is because of ASCII special characters. But I don’t know how to solve the issue.

09.11.2021

После установки Битрикса на новый сервер возникла проблема, при «самопроверке» CMS, сообщение:
Ошибка! Кодировка соединения с базой данных должна быть utf8, текущее значение: utf8mb3

pic1

Сам Битрикс рекомендовал:

pic1

но в конфигурационных файлах все был прописано верно.

Проверка Битрикса выполняется через НастройкиИнструментыПроверка системы (/bitrix/admin/site_checker.php)

.

В итоге пришлось решать вопрос исправлением файла bitrix/modules/main/classes/general/site_checker.php, в блоке ниже, заменил
utf8 на utf8mb3 и
utf8_unicode_ci на utf8mb3_unicode_ci

 
if (defined('BX_UTF') && BX_UTF === true)
{
	if ($character_set_connection != 'utf8mb3')
		$strError = GetMessage("SC_CONNECTION_CHARSET_WRONG", array('#VAL#' => 'utf8', '#VAL1#' => $character_set_connection));
	elseif ($collation_connection != 'utf8mb3_unicode_ci')
		$strError = GetMessage("SC_CONNECTION_COLLATION_WRONG_UTF", array('#VAL#' => $collation_connection));
}

Ошибка! Сравнение для базы (utf8_general_ci) отличается от сравнения для соединения (utf8_unicode_ci)


Переходим с utf8 на utf8mb4 в MySQL.

utf8 или utf8mb4

Если ваша версия СУБД MySQL 5.5.3 и выше, то вам необходимо использовать кодировку utf8mb4, вместо utf8. Об этом упоминается здесь и здесь.

Следовательно, больше нет необходимости использовать ни utf8_general_ci, ни utf8_unicode_ci.

utf8mb4_general_ci или utf8mb4_unicode_ci

В настоящее время для баз данных и таблиц MySQL рекомендуется использовать кодировку utf8mb4_unicode_ci.

Настройка кодировки utf8mb4 для СУБД MySQL

Исходя из вышеизложенного нам необходимо произвести настройку основных параметров кодировки СУБД MySQL.

Если у вас уже есть базы данных, то обязательно создайте резервные копии всех баз данных.

В конфигурационном файле MySQL (my.ini(windows)/my.cnf(Linux)) необходимо изменить кодировку на utf8mb4:

[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

[mysqld]
character-set-client-handshake = FALSE
init_connect ='SET collation_connection = utf8mb4_unicode_ci'
init_connect ='SET NAMES utf8mb4'
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

Проверяем корректность работы применимых настроек:

SHOW VARIABLES WHERE Variable_name LIKE 'character_set_%' OR Variable_name LIKE 'collation%';

Результат:

+--------------------------+--------------------+
| Variable_name            | Value              |
+--------------------------+--------------------+
| character_set_client     | utf8mb4            |
| character_set_connection | utf8mb4            |
| character_set_database   | utf8mb4            |
| character_set_filesystem | binary             |
| character_set_results    | utf8mb4            |
| character_set_server     | utf8mb4            |
| character_set_system     | utf8               |
| collation_connection     | utf8mb4_general_ci |
| collation_database       | utf8mb4_unicode_ci |
| collation_server         | utf8mb4_unicode_ci |
+--------------------------+--------------------+
10 rows in set, 1 warning (0.00 sec)

Кодировка и сравнение для базы данных, таблиц и столбцов в MySQL

Запросы для измениния кодировки и сравнения для базы данных, таблиц и столбцов на utf8mb4.

Для базы данных:

ALTER DATABASE [db_name] CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;

Для таблицы:

ALTER TABLE [table_name] CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Для столбцов:

ALTER TABLE [table_name] CHANGE [column_name] [column_name] VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Восстановление и оптимизация всех таблиц

После обновления версии MySQL сервера и применения действий по смене кодировки и сравнений, необходимо произвести восстановление и оптимизацию всех баз данных и таблиц. Для этого вы можете выполнить следующие запросы для каждой таблицы:

REPAIR TABLE [table_name];
OPTIMIZE TABLE [table_name];

Или с использованием команды mysqlcheck:

$ mysqlcheck -u root -p --auto-repair --optimize --all-databases

Пример миграции для Yii2

В этом примере мы изменим кодировку для столбца content в таблице post:

/**
* @return void
* @throws yiidbException
*/
public function safeUp()
{
 $sql = "ALTER TABLE `post` CHANGE `content` `content` MEDIUMTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci";
 Yii::$app->db->createCommand($sql)->execute();
}

/**
* @return void
* @throws yiidbException
*/
public function safeDown()
{
 $sql = "ALTER TABLE `post` CHANGE `content` `content` MEDIUMTEXT CHARACTER SET utf8 COLLATE utf8_unicode_ci";
 Yii::$app->db->createCommand($sql)->execute();
}

Понравилась статья? Поделить с друзьями:
  • Ошибка кодировка базы latin1 отличается от кодировки соединения utf8
  • Ошибка кодировка базы cp1251 отличается от кодировки соединения utf8
  • Ошибка кодирования кодирование не поддерживается
  • Ошибка кодирования код ошибки 0x2104
  • Ошибка кодирования аудио код 1624