Сайт давно не обновлялся, стоял на старом php5.3 и само обновление сайта от 17 года. Поставил 7.3 работал нормально, обновил до последней версии до конца не обновилось и полетело все. SEL ECT NULL AS SITE_ID, NAME, VALUE /var/www/vhosts/site.ru/httpdocs/bitrix/modules/main/lib/db/mysqliconnection.php:137 Пытался сменить кодировку на utf8_unicode_ci не помогло, помогите пожалуйста решить проблему |
|
Пользователь 2856829 Постоянный посетитель Сообщений: 8 |
#2 30.09.2019 11:19:06 Зайдите в используемую бд и выполните: ALTER слитно
|
||
Пользователь 125357 Постоянный посетитель Сообщений: 152 |
#3 01.10.2019 16:38:54 Спасибо! Реально решилась проблема. Идем на хостинг в phpMyAdmin и выполняем запрос в SQL
В начале ALTER слитно Нужен проект или доработка? Пиши в личку, я всегда на связи! Скайп — sangro0307 |
||
Спасибо! + к карме, тоже помогло! |
|
Человеческое спасибо. Помогло. +1 |
|
Пользователь 2560551 Заглянувший Сообщений: 1 |
#9 11.12.2019 16:14:39
Спасибо, добрый человек! |
||||
Спасибо, добрый человек и от меня! |
|
Пользователь 64241 Заглянувший Сообщений: 7 |
#17 30.03.2020 13:21:41
Спасибо большое! С уважением, |
||||
Добрый день. [BitrixMainDBConnectionException] Mysql connect error [h812298539.mysql]: (1045) Access denied for user ‘h812298539_fit’@’10.12.2.156’ (using password: YES) (400) Подскажите, пожалуйста, в чем может быть дело? |
|
Пользователь 136059 Гуру Сообщений: 5418 |
#19 09.04.2020 15:13:08
Файлы /bitrix/.settings.php и /bitrix/php_interface/dbconn.php Голосуй за идеи по развитию API Bitrix: |
||
Пользователь 1544393 Заглянувший Сообщений: 2 |
#20 11.04.2020 11:16:21
Спасибо, нашла. |
||||
Пользователь 180446 Эксперт Сообщений: 684 |
#21 11.04.2020 12:22:55
Олесь, это отговорки. Не нужен номер, используй текст
|
||||
После ввода запроса админка вернулась, но появилась другая ошибка Fatal error: Cannot use inteccorebaseObject as Object because ‘Object’ is a special class name in /var/www/www-root/data/www/red34025.rdock.ru/bitrix/modules/intec.constructorlite/classes/models/Build.php on line 6 Вообще изначально делалось обновление Битрикса, модулей. На половине отвалился. |
|
Пользователь 2090153 Постоянный посетитель Сообщений: 190 |
#24 05.06.2020 13:05:33
/modules/intec.constructorlite/ — так это вам уже к авторам модуля. |
||
Пользователь 4319440 Заглянувший Сообщений: 14 |
#25 12.06.2020 12:18:42 Короче дело было в PHP, пришлось вернуть старую версию. |
После обновления сайт полетел
Сайт давно не обновлялся, стоял на старом php5.3 и само обновление сайта от 17 года. Поставил 7.3 работал нормально, обновил до последней версии до конца не обновилось и полетело все.
С такой ошибкой
[BitrixMainDBSqlQueryException]
Mysql query error: (1271) Illegal mix of collations for operation ‘UNI ON’ (400)
SEL ECT NULL AS SITE_ID, NAME, VALUE
FR OM b_option
WHERE MODULE_ID = ‘main’
UNION
SEL ECT SITE_ID, NAME, VALUE
FR OM b_option_site
WH ERE MODULE_ID = ‘main’
/var/www/vhosts/site.ru/httpdocs/bitrix/modules/main/lib/db/mysqliconnection.php:137
#0: BitrixMainDBMysqliConnection->queryInternal(string, array, NULL)
/var/www/vhosts/site.ru/httpdocs/bitrix/modules/main/lib/db/connection.php:330
#1: BitrixMainDBConnection->query(string)
/var/www/vhosts/site.ru/httpdocs/bitrix/modules/main/lib/config/option.php:200
#2: BitrixMainConfigOption::load(string)
/var/www/vhosts/site.ru/httpdocs/bitrix/modules/main/lib/config/option.php:38
#3: BitrixMainConfigOption::get(string, string, string)
/var/www/vhosts/site.ru/httpdocs/bitrix/modules/main/lib/httprequest.php:392
#4: BitrixMainHttpRequest->prepareCookie(array)
/var/www/vhosts/site.ru/httpdocs/bitrix/modules/main/lib/httprequest.php:69
#5: BitrixMainHttpRequest->__construct(object, array, array, array, array)
/var/www/vhosts/site.ru/httpdocs/bitrix/modules/main/lib/httpapplication.php:46
#6: BitrixMainHttpApplication->initializeContext(array)
/var/www/vhosts/site.ru/httpdocs/bitrix/modules/main/lib/application.php:122
#7: BitrixMainApplication->initializeExtendedKernel(array)
/var/www/vhosts/site.ru/httpdocs/bitrix/modules/main/include.php:22
#8: require_once(string)
/var/www/vhosts/site.ru/httpdocs/bitrix/modules/main/include/prolog_before.php:14
#9: require_once(string)
/var/www/vhosts/site.ru/httpdocs/bitrix/modules/main/include/prolog.php:10
#10: require_once(string)
/var/www/vhosts/site.ru/httpdocs/bitrix/header.php:1
#11: require(string)
/var/www/vhosts/site.ru/httpdocs/index.php:2
Пытался сменить кодировку на utf8_unicode_ci не помогло, помогите пожалуйста решить проблему
Зайдите в используемую бд и выполните:
Спасибо! Реально решилась проблема.
Идем на хостинг в phpMyAdmin
и выполняем запрос в SQL
Цитата |
---|
Виталий Шестаков написал: Зайдите в используемую бд и выполните: |
Цитата |
---|
Виталий Шестаков написал: Зайдите в используемую бд и выполните: |
Добрый день.
Была ошибка «Mysql query error: (1271) Illegal mix of collations for operation ‘UNION’ (400)»
После выполнения в SQL указанного выше запроса ошибка на сайте стала такой:
Источник
MySQL Error (1271): Illegal mix of collations for operation ‘UNION’ in query #185
Comments
tonyarnold commented Feb 17, 2012
I’m seeing this when querying a datasource containing an subsection that only allows a single entry. What information can I provide to help track this down (and potentially fix it myself). I don’t know enough about SSM at this point to make an educated guess 🙁
The text was updated successfully, but these errors were encountered:
brendo commented Feb 17, 2012
It means the two tables have been created in different encodings. You’ll probably find one is latin1 and one is utf8 .
Curiously, this has been occurring more of late I can’t pick why as there have been no core level changes to trigger this. Perhaps we are just at that tipping point where half the extensions specify UTF8 and half specify nothing.
Or it might coincide with a recent MySQL update.
tonyarnold commented Feb 17, 2012
That was exactly it. I think I went the wrong way and removed the specified collation from the tables being compared, but it works now.
nilshoerrmann commented Feb 17, 2012
Just so I get this right: this is not a problem caused by Subsection Manager? It’s either caused by Symphony or manual database changes?! I’m a bit confused at the moment.
tonyarnold commented Feb 17, 2012
It’s not SSM. It does need addressing, but it’s a bit of a manual change for everyone who is including SQL in their extensions.
I’ll need to get @brendo to explain it in a way that makes sense — basically, MySQL defaults are conflicting with the SQL in some extensions (depending on your MySQL server’s configuration) which specify strict collations. It’s not really my area of expertise, so I’d need to do more reading to not make a balls-up of the explaining.
nilshoerrmann commented Feb 17, 2012
Additional question: Are you using an build that has been updated from Subsection Manager 1 to 2? In this case the tables sym_fields_subsectionmanager (version 1) and sym_fields_subsectiontabs (version 2) would have been created at different times – maybe this is a source of this problem?
tonyarnold commented Feb 17, 2012
Good call: yes, I am. I updated it today. That could definitely be the cause of the collation changes.
Footer
© 2023 GitHub, Inc.
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Источник
Русские Блоги
MySQLSQL error1271Illegal mix of collations for operation UNION
MySQL При использовании Union Queries или создает вид: исключение:
Такие проблемы вызваны различными последовательностями характера с сопоставлением поля, когда таблица Union MySQL отличается.
Поэтому я изменил чек, объединенный в UTF8_General_Ci всей таблицы MySQL.
Позже я обнаружил ту же ошибку, а потом посмотреть поля таблиц, еще раньше, поэтому я должен изменить каждое поле, проблема в том, что мой стол имеет много, один за другим, которые тоже изменились. Итак, Существует метод следующего:
С помощью приведенного выше способа вы можете запросить оператор модификации столбца, который я хочу изменить, затем экспортировать эти операторы, и выполнить его, конечно, вы также можете написать на партии в соответствии с этой идеей. Отказ Отказ
Когда вы выполняете экспортируемый оператор SQL, вы завершили модификацию, хорошо
Интеллектуальная рекомендация
Andorid Авторитетное программирование Руководство
1 Создайте фрагмент 2 tools:text а такжеandroid:textразница android:text —> what you would see while running the app tools:text —> what you would see just on preview window (when you need to d.
003.JDK Скачать и установка Подробное объяснение (Graking Gine)
Как разработчик,Должен мастерСтроительство среды развития,ЭтоСамый основной шагВ будущем еще много ситуаций в программном обеспечении для установки и связанной с этим конфигурации. Java 8 — наиболее ш.
Почему регуляризация может быть уменьшена
Запишите его сначала, а затем организуйте его в будущем. 1CS231N Примечания курса 2Учитель Wu Enda Учебная программа. Чрезмерные переменные признака могут привести к переоснащению. Чтобы предотвратить.
Перенести пространство из / home, установленного по умолчанию в CentOS7, в корневой каталог /
Стандарты набора персонала Unicorn Enterprise Heavy для Python-инженеров 2019 >>> 1. Основные концепции Cent0S 7 включает LVM2 (Диспетчер логических томов) по умолчанию и делит жесткий диск м.
Фильтрующие экраны Известной группе, возвращает элемент или объект, который верно или формирует новый массив
Определение и использование Фильтр () Метод создает новый массив, а элементы в новом массиве являются проверкой всех элементов, которые соответствуют условиям в указанном массиве. Возвращает массив, к.
Источник
После обновления сайт полетел
Сайт давно не обновлялся, стоял на старом php5.3 и само обновление сайта от 17 года. Поставил 7.3 работал нормально, обновил до последней версии до конца не обновилось и полетело все.
С такой ошибкой
[BitrixMainDBSqlQueryException]
Mysql query error: (1271) Illegal mix of collations for operation ‘UNI ON’ (400)
SEL ECT NULL AS SITE_ID, NAME, VALUE
FR OM b_option
WHERE MODULE_ID = ‘main’
UNION
SEL ECT SITE_ID, NAME, VALUE
FR OM b_option_site
WH ERE MODULE_ID = ‘main’
/var/www/vhosts/site.ru/httpdocs/bitrix/modules/main/lib/db/mysqliconnection.php:137
#0: BitrixMainDBMysqliConnection->queryInternal(string, array, NULL)
/var/www/vhosts/site.ru/httpdocs/bitrix/modules/main/lib/db/connection.php:330
#1: BitrixMainDBConnection->query(string)
/var/www/vhosts/site.ru/httpdocs/bitrix/modules/main/lib/config/option.php:200
#2: BitrixMainConfigOption::load(string)
/var/www/vhosts/site.ru/httpdocs/bitrix/modules/main/lib/config/option.php:38
#3: BitrixMainConfigOption::get(string, string, string)
/var/www/vhosts/site.ru/httpdocs/bitrix/modules/main/lib/httprequest.php:392
#4: BitrixMainHttpRequest->prepareCookie(array)
/var/www/vhosts/site.ru/httpdocs/bitrix/modules/main/lib/httprequest.php:69
#5: BitrixMainHttpRequest->__construct(object, array, array, array, array)
/var/www/vhosts/site.ru/httpdocs/bitrix/modules/main/lib/httpapplication.php:46
#6: BitrixMainHttpApplication->initializeContext(array)
/var/www/vhosts/site.ru/httpdocs/bitrix/modules/main/lib/application.php:122
#7: BitrixMainApplication->initializeExtendedKernel(array)
/var/www/vhosts/site.ru/httpdocs/bitrix/modules/main/include.php:22
#8: require_once(string)
/var/www/vhosts/site.ru/httpdocs/bitrix/modules/main/include/prolog_before.php:14
#9: require_once(string)
/var/www/vhosts/site.ru/httpdocs/bitrix/modules/main/include/prolog.php:10
#10: require_once(string)
/var/www/vhosts/site.ru/httpdocs/bitrix/header.php:1
#11: require(string)
/var/www/vhosts/site.ru/httpdocs/index.php:2
Пытался сменить кодировку на utf8_unicode_ci не помогло, помогите пожалуйста решить проблему
Зайдите в используемую бд и выполните:
Спасибо! Реально решилась проблема.
Идем на хостинг в phpMyAdmin
и выполняем запрос в SQL
Цитата |
---|
Виталий Шестаков написал: Зайдите в используемую бд и выполните: |
Цитата |
---|
Виталий Шестаков написал: Зайдите в используемую бд и выполните: |
Добрый день.
Была ошибка «Mysql query error: (1271) Illegal mix of collations for operation ‘UNION’ (400)»
После выполнения в SQL указанного выше запроса ошибка на сайте стала такой:
Источник
Странно иногда MySQL код ошибки 1271
Я хочу сделать запрос к БД, который подсчитывает количество записей на основе беспорядка критериев. Вот что у меня так далеко:
Это сообщение в ответ на мою попытку передать серверу mySQL этот запрос через PHP. Тем не менее, когда я пытаюсь передать тот же сервер MySQL с тем же запросом через phpMyAdmin, запрос выполняется без ошибок как показано на этом связанном изображении .
Я провел дополнительное тестирование и обнаружил, что Illegal mix of collations происходит от:
Как именно PHP-запрос можно рассматривать как Illegal mix of collations в то время как запрос с поддержкой phpMyAdmin будет считаться работоспособным? мне нужно ph.end>=TIME_FORMAT( TIMESTAMPADD( MINUTE,(CASE book_period WHEN 1 THEN 60 WHEN 2 THEN 120 WHEN 6 THEN 30 ELSE 15 END) ,NOW() ), «%H:%i:%s») запрос должен быть предоставлен с помощью PHP, а не phpMyAdmin, поэтому мне нужны пояснения о том, как происходит ошибка в PHP, а не в phpMyAdmin, и как это исправить.
PS: запрос в блоке кода уже сокращен согласно Тим Бигелейзен запрос. Исходный запрос намного дольше, как показано на этом связанном изображении .
PPS: добавлены дополнительные материалы по запросу Lbu . Однако я не понимаю, в чем его смысл.
Решение
В конце концов я сам решил этот вопрос. Благодаря rkosegi для подсказок.
В частности, проблема в моем коде заключалась в том, что collation_connection моей БД не было явно определено. Это означает, что БД использует свое значение по умолчанию, latin1 , в CASE номера выписки. Поскольку столбец будет CASE д, book_period , сопоставлено в utf8_general_ci , это вызывает ошибку 1271 для операторов MySQL, работающих на PHP.
Источник
I’ve various tables for storing comments of various parts of a website that have the same structure. I want to moderate the comments on the admin panel but I can’t do a page for each, so I want to select it all and then LIMIT it. I asked how to do this here on SO and they solved my question but I get the error: 1271 — Illegal mix of collations for operation ‘UNION’.
SELECT *
FROM (
SELECT *
FROM (
SELECT *
FROM noticias_comentarios
ORDER BY
ts_creado DESC
LIMIT 10
) q
UNION ALL
SELECT *
FROM (
SELECT *
FROM carruseles_comentarios
ORDER BY
ts_creado DESC
LIMIT 10
) q
) q
JOIN usuarios u
ON u.id = q.id_usuario
ORDER BY
ts_creado DESC
LIMIT 0, 10
All the 3 tables have the character set utf8 and the collation utf8_spanish_ci.
How can I solve it?
Thank you in advance.
UPDATED with the answer of Larry:
SELECT *
FROM (
SELECT id, id_noticia, id_usuario, comentario, ts_creado
FROM noticias_comentarios
ORDER BY ts_creado DESC
LIMIT 0, 10
UNION ALL
SELECT id, id_carrusel, id_usuario, comentario, ts_creado
FROM carruseles_comentarios
ORDER BY ts_creado DESC
LIMIT 0, 10
) q
JOIN usuarios u ON u.id = q.id_usuario
ORDER BY ts_creado DESC
LIMIT 0, 10
Now produces the error: 1221 — Incorrect usage of UNION and ORDER BY
Обратите внимание: при редактировании файлов баз данных сторонними программами (Sublime Text, Notepad++ и др.) всегда учитывайте кодировку в которой открывается и сохраняется .sql файл базы данных. В случае допуска ошибки могут проявляться малопредсказуемые последствия работы сайта.
Duplicate entry ‘1’ for key ‘PRIMARY’
Требуется заменить во всей базе данных INSERT INTO на REPLACE INTO.
Multiple primary key defined
Убедитесь, что в базе в которую производится импорт нет каких-либо данных (база должна быть полностью очищена).
[BitrixMainDBSqlQueryException] Mysql query error: Illegal mix of collations for operation ‘UNION’ (400)
Проблема с разными кодировками таблиц (collation utf8_unicode_ci и utf8_general_ci).
Требуется заменить DEFAULT CHARSET=utf8 на DEFAULT CHARSET=utf8 COLLATE utf8_unicode_ci во всей базе данных.
MySQL Query Error: SELECT DISTINCT BE.ID as ID … which is not in SELECT list; this is incompatible with DISTINCT
Необходимо очистить содержимое папки /bitrix/tmp/
[BitrixMainDBConnectionException] Mysql connect error [localhost]: (1045) Access denied for user ‘***’@’localhost’ (using password: YES) (400)
Неверные данные для подключения к базе данных. Проверьте название базы данных, имя назначенного пользователя и его пароль в панели хостинга и отредактируйте данные в файлах /bitrix/php_interface/dbconn.php и /bitrix/.settings.php
Переменная sql_mode в MySQL должна быть пустая, текущее значение…
/bitrix/php_interface/after_connect_d7.php
добавить $connection->queryExecute(«SET sql_mode=»»);
/bitrix/php_interface/after_connect.php
добавить $DB->Query(«SET sql_mode=»»);
Ошибка innodb_strict_mode=ON, требуется OFF или Ошибка! Переменная sql_mode в MySQL должна быть пустая, текущее значение…
/bitrix/php_interface/after_connect.php
$DB->Query(«SET sql_mode=»»);
$DB->Query(«SET innodb_strict_mode=0»);
/bitrix/php_interface/after_connect_d7.php
$connection = BitrixMainApplication::getConnection();
$connection->queryExecute(«SET sql_mode=»»);
$connection->queryExecute(«SET innodb_strict_mode=0»);
Получаем ошибку ниже при попытке выполнить выбор в хранимой процедуре в MySQL.
Нелегальное сочетание сортировок (latin1_general_cs, IMPLICIT) и (latin1_general_ci, IMPLICIT) для операции ‘=’
Любая идея о том, что здесь может быть неправильным?
Сравнение таблицы latin1_general_ci
, а столбца в предложении where — latin1_general_cs
.
Ответ 1
Как правило, это вызвано сравнением двух строк несовместимого сопоставления или попыткой выделить данные другого сопоставления в объединенный столбец.
Предложение COLLATE
позволяет указать параметры сортировки, используемые в запросе.
Например, следующее предложение WHERE
всегда будет содержать сообщение об ошибке, которую вы опубликовали:
WHERE 'A' COLLATE latin1_general_ci = 'A' COLLATE latin1_general_cs
Ваше решение состоит в том, чтобы указать общее сопоставление для двух столбцов в запросе. Вот пример, который использует предложение COLLATE
:
SELECT * FROM table ORDER BY key COLLATE latin1_general_ci;
Другой вариант — использовать оператор BINARY
:
BINARY str — сокращение от CAST (st как AS BINARY).
Ваше решение может выглядеть примерно так:
SELECT * FROM table WHERE BINARY a = BINARY b;
или
SELECT * FROM table ORDER BY BINARY a;
Ответ 2
TL; DR
Либо измените сопоставление одного (или обоих) строк так, чтобы они соответствовали, либо добавили в выражение выражение COLLATE
.
-
Что это за «сортировка» в любом случае?
Как описано в Наборы символов и сортировки в целом:
A набор символов представляет собой набор символов и кодировок. сопоставление — это набор правил для сравнения символов в наборе символов. Позвольте сделать различие понятным на примере мнимого набора символов.
Предположим, что у нас есть алфавит с четырьмя буквами: «
A
» , «B
» , «A
» , «B
» . Мы даем каждой букве число: «A
» = 0, «B
» = 1, «A
» = 2, «B
» = 3. Буква «A
» является символом, число 0 является кодировкой для «A
» , а комбинация всех четырех букв и их кодировок — это набор символов .Предположим, что мы хотим сравнить два строковых значения: «
A
» и «B
» . Самый простой способ сделать это — посмотреть кодировки: 0 для «A
» и 1 для «B
» . Поскольку 0 меньше 1, мы говорим: «A
» меньше «B
» . Мы только что применили сопоставление с нашим набором символов. Сопоставление — это набор правил (только одно правило в этом случае): «сравнить кодировки». Мы называем это простейшее из всех возможных сопоставлений двоичным сопоставлением.Но что, если мы хотим сказать, что строчные и прописные буквы эквивалентны? Тогда у нас будет по крайней мере два правила: (1) обрабатывать строчные буквы «
A
» и «B
» как эквивалентные «A
» и «B
» ; (2), затем сравните кодировки. Мы называем это нечувствительным к регистру сопоставлением. Это немного сложнее, чем двоичная сортировка.В реальной жизни большинство наборов символов имеют много символов: не только «
A
» и «B
» , но целые алфавиты, иногда несколько алфавитов или восточные системы письма с тысячами символов, а также множество специальных символов и знаков препинания Метки. Кроме того, в реальной жизни большинство коллайлов имеют много правил, а не только для того, чтобы различать буквенный регистр, но также и для того, чтобы отличить акценты ( «акцент» — это знак, прикрепленный к персонажу, как на немецком языке «Ö
» ), и для многосимвольные сопоставления (например, правило «Ö
» = «OE
» в одном из двух германских сопоставлений).Другие примеры приведены в примерах эффекта сортировки.
-
Хорошо, но как MySQL решает, какое сопоставление использовать для данного выражения?
Как описано в Сочетание выражений:
В подавляющем большинстве утверждений очевидно, что используется MySQL для сопоставления операции сравнения. Например, в следующих случаях должно быть ясно, что сортировка — это сортировка столбца
charset_name
:SELECT x FROM T ORDER BY x; SELECT x FROM T WHERE x = x; SELECT DISTINCT x FROM T;
Однако с несколькими операндами может быть неоднозначность. Например:
SELECT x FROM T WHERE x = 'Y';
Если сравнение использует сортировку столбца
x
или строкового литерала'Y'
? Обаx
и'Y'
имеют сопоставления, так что сопоставление имеет приоритет?Стандартный SQL разрешает такие вопросы, используя то, что раньше называлось правилами «принуждаемости».
[ deletia ]
MySQL использует значения коэрцитивности со следующими правилами для устранения неоднозначностей:
-
Используйте сопоставление с наименьшим значением принуждения.
-
Если обе стороны имеют одну и ту же коэрцитивность, то:
-
Если обе стороны являются Unicode или обе стороны не являются Unicode, это ошибка.
-
Если одна из сторон имеет набор символов Unicode, а другая сторона имеет набор символов, отличных от Юникода, выигрывает сторона с символьным набором Unicode, а автоматическое преобразование набора символов применяется к стороне, отличной от Юникода. Например, следующий оператор не возвращает ошибку:
SELECT CONCAT(utf8_column, latin1_column) FROM t1;
Он возвращает результат, имеющий набор символов
utf8
и ту же сортировку, что иutf8_column
. Значенияlatin1_column
автоматически преобразуются вutf8
перед конкатенацией. -
Для операции с операндами из того же набора символов, но которые смешивают сортировку
_bin
и a_ci
или_cs
, используется сортировка_bin
. Это похоже на то, как операции, в которых смешиваются недвоичные и двоичные строки, оценивают операнды как двоичные строки, за исключением того, что они предназначены для сопоставлений, а не для типов данных.
-
-
-
Итак, что такое «незаконное сочетание сортировок»?
«Неправильное сочетание сопоставлений» возникает, когда выражение сравнивает две строки разных сопоставлений, но имеет равную совместимость, а правила принуждения не могут помочь разрешить конфликт. Эта ситуация описана в третьей цитате в приведенной выше цитате.
Конкретная ошибка, заданная в вопросе
Illegal mix of collations (latin1_general_cs,IMPLICIT) and (latin1_general_ci,IMPLICIT) for operation '='
, говорит нам о том, что было проведено сравнение равенства между двумя строками, не относящимися к Unicode, с равной совместимостью. Кроме того, он говорит нам, что сопоставления не были указаны явно в заявлении, а скорее подразумевались из источников строк (например, метаданных столбца). -
Все это очень хорошо, но как решить такие ошибки?
Как показывают приведенные выше выдержки из руководства, эта проблема может быть решена несколькими способами, из которых два являются разумными и рекомендуемыми:
-
Измените сортировку одной (или обеих) строк так, чтобы они совпадали, и больше не существует двусмысленности.
Как это можно сделать, зависит от того, откуда пришла строка: Литеральные выражения принимают сопоставление, указанное в системной переменной
collation_connection
; значения из таблиц берут сопоставление, указанное в их метаданных столбцов. -
Настроить одну строку, чтобы она не была принудительной.
Я пропустил следующую цитату из вышеперечисленного:
MySQL присваивает значения коэрцитивности следующим образом:
-
Явное предложение
COLLATE
обладает способностью к нулю (не является коэрцитивной). -
Конкатенация двух строк с разными сопоставлениями имеет коэрцитивность 1.
-
Сопоставление столбца или параметра хранимой процедуры или локальной переменной имеет совместимость с 2.
-
«Системная константа» (строка, возвращаемая такими функциями, как
USER()
илиVERSION()
) обладает способностью 3. -
Сопоставление литерала имеет коэрцитивность 4.
-
NULL
или выражение, полученное изNULL
, имеет коэрцитивность 5.
Таким образом, просто добавление предложения
COLLATE
в одну из строк, используемых при сравнении, заставит использовать эту сортировку. -
В то время как другие были бы ужасно плохой практикой, если бы они были развернуты только для устранения этой ошибки:
-
Принудите одну (или обе) строки к некоторым другим значениям коэрцитивности, чтобы иметь преимущество.
Использование
CONCAT()
илиCONCAT_WS()
приведет к тому, что строка с способностью 1; и (если в хранимой процедуре) использование параметров/локальных переменных приведет к строкам с способностью 2. -
Измените кодировку одной (или обеих) строк так, чтобы она была Unicode, а другая — не.
Это можно сделать путем перекодирования с помощью
CONVERT(expr USING transcoding_name)
; или путем изменения базового набора символов (например, изменение столбца, изменениеcharacter_set_connection
для литеральных значений или отправка их с клиента в другую кодировку и изменениеcharacter_set_client
/добавление средства ввода символов). Обратите внимание, что изменение кодировки приведет к другим проблемам, если некоторые желаемые символы не могут быть закодированы в новом наборе символов. -
Измените кодировки одной (или обеих) строк так, чтобы они были одинаковыми и изменили одну строку, чтобы использовать соответствующую сортировку
_bin
.Методы изменения кодировок и сопоставлений были подробно описаны выше. Этот подход был бы малопригодным, если бы на самом деле требовалось применять более сложные правила сопоставления, чем предлагалось с помощью сортировки
_bin
.
-
Ответ 3
Добавление моего 2c к обсуждению будущих googlers.
Я изучал аналогичную проблему, когда я получил следующую ошибку при использовании пользовательских функций, которые получили параметр varchar:
Illegal mix of collations (utf8_unicode_ci,IMPLICIT) and
(utf8_general_ci,IMPLICIT) for operation '='
Используя следующий запрос:
mysql> show variables like "collation_database";
+--------------------+-----------------+
| Variable_name | Value |
+--------------------+-----------------+
| collation_database | utf8_general_ci |
+--------------------+-----------------+
Я смог сказать, что БД использовала utf8_general_ci, а таблицы были определены с помощью utf8_unicode_ci:
mysql> show table status;
+--------------+-----------------+
| Name | Collation |
+--------------+-----------------+
| my_view | NULL |
| my_table | utf8_unicode_ci |
...
Обратите внимание, что представления имеют NULL-сопоставление. Похоже, что представления и функции имеют определения сортировки, хотя этот запрос показывает null для одного представления. Используемая сортировка — это сортировка БД, которая была определена при создании представления/функции.
Печальное решение заключалось в том, чтобы изменить сортировку db и воссоздать представления/функции, чтобы заставить их использовать текущую сортировку.
-
Изменение сортировки db:
ALTER DATABASE mydb DEFAULT COLLATE utf8_unicode_ci;
Надеюсь, это поможет кому-то.
Ответ 4
Иногда бывает сложно конвертировать кодировки, особенно в базы данных с огромным количеством данных. Я думаю, что лучший вариант — использовать «двоичный» оператор:
e.g : WHERE binary table1.column1 = binary table2.column1
Ответ 5
У меня была аналогичная проблема, я пытался использовать процедуру FIND_IN_SET со строкой переменной.
SET @my_var = 'string1,string2';
SELECT * from my_table WHERE FIND_IN_SET(column_name,@my_var);
и получал ошибку
Код ошибки: 1267. Недопустимое сочетание сортировок (utf8_unicode_ci, IMPLICIT) и (utf8_general_ci, IMPLICIT) для операции «find_in_set»
Короткий ответ:
Не нужно менять переменные collation_YYYY, просто добавьте правильную сортировку рядом с объявлением переменной, т.е.
SET @my_var = 'string1,string2' COLLATE utf8_unicode_ci;
SELECT * from my_table WHERE FIND_IN_SET(column_name,@my_var);
Длинный ответ:
Сначала я проверил переменные сортировки:
mysql> SHOW VARIABLES LIKE 'collation%';
+----------------------+-----------------+
| Variable_name | Value |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
+----------------------+-----------------+
| collation_database | utf8_general_ci |
+----------------------+-----------------+
| collation_server | utf8_general_ci |
+----------------------+-----------------+
Затем я проверил сортировку таблицы:
mysql> SHOW CREATE TABLE my_table;
CREATE TABLE `my_table` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`column_name` varchar(40) COLLATE utf8_unicode_ci DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=125 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Это означает, что моя переменная была настроена со значением по умолчанию utf8_general_ci, тогда как моя таблица была настроена как utf8_unicode_ci.
Добавив команду COLLATE рядом с объявлением переменной, сопоставление переменных соответствовало настройке сопоставления для таблицы.
Ответ 6
Вы можете попробовать этот script, который преобразует все ваши базы данных и таблицы в utf8.
Ответ 7
Решение, если речь идет о литералах.
Я использую интеграцию данных Pentaho и не могу указать синтаксис sql.
Использование очень простого поиска в БД дало ошибку
Msgstr «Недействительное сочетание сортировок (cp850_general_ci, COERCIBLE) и (latin1_swedish_ci, COERCIBLE) для операции ‘='»
Сгенерированный код был
«SELECT DATA_DATE AS last_DATA_DATE FROM hr_cc_normalised_data_date_v WHERE PSEUDO_KEY =?»
Сокращение истории сократило поиск до представления, и когда я выпустил
mysql> show full columns from hr_cc_normalised_data_date_v;
+------------+------------+-------------------+------+-----+
| Field | Type | Collation | Null | Key |
+------------+------------+-------------------+------+-----+
| PSEUDO_KEY | varchar(1) | cp850_general_ci | NO | |
| DATA_DATE | varchar(8) | latin1_general_cs | YES | |
+------------+------------+-------------------+------+-----+
который объясняет, откуда берется «cp850_general_ci».
Вид был просто создан с помощью ‘SELECT’ X ‘,……’
В соответствии с такими литералами, как это, следует наследовать их набор символов и сортировку из настроек сервера, которые были правильно определены как «latin1» и «latin1_general_cs»,
так как этого явно не случилось, я заставил его создать вид
CREATE OR REPLACE VIEW hr_cc_normalised_data_date_v AS
SELECT convert('X' using latin1) COLLATE latin1_general_cs AS PSEUDO_KEY
, DATA_DATE
FROM HR_COSTCENTRE_NORMALISED_mV
LIMIT 1;
теперь он показывает latin1_general_cs для обоих столбцов, и ошибка исчезла.:)
Ответ 8
MySQL действительно не любит смешивать сортировки, если только он не может принудить их к одному (что явно не возможно в вашем случае). Не можете ли вы просто заставить ту же сортировку использовать предложение COLLATE? (или более простой BINARY
ярлык, если применимо…).
Ответ 9
Если столбцы, с которыми у вас возникают проблемы, являются «хэшами», тогда рассмотрим следующее…
Если «хэш» является двоичной строкой, вы действительно должны использовать тип данных BINARY(...)
.
Если «хеш» — это шестнадцатеричная строка, вам не нужно utf8, и этого следует избегать из-за проверки символов и т.д. Например, MySQL MD5(...)
дает 32-байтовую строку с фиксированной длиной. SHA1(...)
дает 40-байтовую шестую строку. Это можно сохранить в CHAR(32) CHARACTER SET ascii
(или 40 для sha1).
Или, еще лучше, сохраните UNHEX(MD5(...))
в BINARY(16)
. Это уменьшает половину размера столбца. (Тем не менее, это делает его непечатаемым.) SELECT HEX(hash) ...
, если вы хотите, чтобы он был читабельным.
Сравнение двух столбцов BINARY
не имеет проблем с сортировкой.
Ответ 10
Возможное решение: конвертировать всю базу данных в UTF8 (см. также question).
Ответ 11
Другим источником проблемы с сопоставлениями является таблица mysql.proc
. Проверьте сортировки ваших процедур хранения и функций:
SELECT
p.db, p.db_collation, p.type, COUNT(*) cnt
FROM mysql.proc p
GROUP BY p.db, p.db_collation, p.type;
Также обратите внимание на столбцы mysql.proc.collation_connection
и mysql.proc.character_set_client
.
Ответ 12
Если у вас установлен phpMyAdmin, вы можете следовать инструкциям, приведенным в следующей ссылке: https://mediatemple.net/community/products/dv/204403914/default-mysql-character-set-and-collation Необходимо сопоставить сопоставление базы данных с сопоставлением всех таблиц, а также полей таблиц, а затем перекомпилировать все сохраненные данные. процедуры и функции. С этим все должно работать снова.
Ответ 13
Я использовал ALTER DATABASE mydb DEFAULT COLLATE utf8_unicode_ci;
, но не работал.
В этом запросе:
Select * from table1, table2 where table1.field = date_format(table2.field,'%H');
Эта работа для меня:
Select * from table1, table2 where concat(table1.field) = date_format(table2.field,'%H');
Да, только concat
.
Ответ 14
Этот код необходимо поместить внутри Запустить SQL-запрос/запросы в базе данных
SQL QUERY WINDOW
ALTER TABLE `table_name` CHANGE `column_name` `column_name` VARCHAR(128) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL;
Пожалуйста, замените имя_таблицы и имя_столбца соответствующим именем.
Готовые решения
Решения
Битрикс
Ошибки
Решения
Не зайти в админку, белый экран
Решение, как исправить ошибку белого экрана, при попытке зайти в админку «1С-Битрикс»
Категории:
Битрикс
Ошибки
Ошибка Illegal mix of collations for operation ‘UNION’
Решение, как исправить ошибку «Illegal mix of collations for operation ‘UNION’» при обновлении «1С-Битрикс»
Категории:
Битрикс
Ошибки
Не используется HSTS заголовок
Решение, как исправить ошибку «Не используется HSTS заголовок» при проверке сканером безопасности в модуле «Проактивная защита» в «1С-Битрикс»
Категории:
Битрикс
Ошибки
Безопасность
TypeError: BX.adminLogin is not a constructor – не зайти в админку
Решение, как исправить ошибку «BX.adminLogin is not a constructor» при попытке авторизоваться в административную панель сайта на «1С-Битрикс»
Категории:
Битрикс
Ошибки
Кодировка таблицы отличается от кодировки базы
Решение, как исправить ошибку при штатной проверке системы в «1С-Битрикс», примерный текст ошибки «Сравнение для базы отличается от сравнения для соединения»
Категории:
Битрикс
Ошибки
Кодировка
Короткие ссылки не работают
Решение, как исправить не работающие короткие ссылки в «1С-Битрикс»
Категории:
Битрикс
Ошибки
Ошибка Cannot declare class
Решение, как исправить ошибку «Cannot declare class…» в «1С-Битрикс»
Категории:
Битрикс
Ошибки
Ошибка работы с сокетами Socket error
Решение, как исправить ошибку «Работа с сокетами — Функция работает неправильно, требуется устранить ошибки» при штатной проверке системы в «1С-Битрикс»
Категории:
Битрикс
Ошибки
BitrixVM
Ошибка распаковки пакета при обновлении
Решение, как исправить ошибку при обновлении ядра и модулей «1С-Битрикс»
Категории:
Битрикс
Ошибки
Permission denied: BITRIX SESSID ERROR
Решение, как исправить ошибку в 1С-Битрикс при проверке системы, проверка доступа к диску «Permission denied: BITRIX SESSID ERROR»
Категории:
Битрикс
Ошибки
Ошибка «Cannot instantiate abstract class BitrixIblockComponentBase»
Решение, как исправить ошибку в 1С-Битрикс «Cannot instantiate abstract class BitrixIblockComponentBase»
Категории:
Ошибки
Error! mysqli_connect() [1040] Too many connections
Решение, как исправить ошибку «Error! mysqli_connect() [1040] Too many connections» подключения к базе данных в 1С-Битрикс
Категории:
Битрикс
Ошибки
Не работает Вебвизор
Сайт на 1С-Битрикс с установленной Яндекс.Метрикой не позволяет записывать поведение пользователей Вебвизору
Категории:
Битрикс
Ошибки
Ошибки при проверке системы
Способы исправления ошибок, выявленных при полном тестировании системы в 1С-Битрикс
Категории:
Битрикс
Ошибки
Fatal error: Allowed memory size
Что делать, если в 1С-Битрикс появляется ошибка «Fatal error: Allowed memory size…»
Категории:
Битрикс
Ошибки
Class ‘ZipArchive’ not found
При установке модуля из Маркетплейс 1С-Битрикс появляется ошибка — Class ZipArchive not found
Категории:
Битрикс
Ошибки
BitrixVM
Таймвеб — Cron, ошибка Битрикс в файле httprequest.php on line 387
Ошибка «PHP Parse error: syntax error, unexpected» в задании Cron у хостинга Таймвеб, в 1С-Битрикс в файле httprequest.php on line 387
Категории:
Ошибки
Call to a member function GetID()
Ошибка Call to a member function GetID() в init.php
Категории:
Ошибки
DB query error
Решение, как исправить ошибку DB query error в Битрикс
Категории:
Битрикс
Ошибки
-
ChatGPT
-
Ошибки и проблемы
-
Примеры применения
-
-
Битрикс
-
API
-
BitrixVM
-
SEO
-
Админка
-
Безопасность
-
Инфоблоки
-
Кодировка
-
Маркетплейс
-
Ошибки
-
Поиск
-
Уведомления
-
Условия
-
Шаблон
-
Почта
-
Интернет-магазин
-
-
JS
-
JavaScript
-
jQuery
-
reCAPTCHA
-
Виджеты
-
Формы
-
-
PHP
-
HTML / CSS
-
SEO
-
Bootstrap
-
Сервер
-
301
-
404
-
Linux
-
Почта
-
.htaccess
-
-
WordPress
-
OpenCart
-
ПК
-
Разное