|
Сайт давно не обновлялся, стоял на старом 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, пришлось вернуть старую версию. |
[BitrixMainDBSqlQueryException]
Mysql query error: (1271) Illegal mix of collations for operation 'UNION' (400)
SELECT NULL AS SITE_ID, NAME, VALUE
FROM b_option
WHERE MODULE_ID = 'main'
UNION
SELECT SITE_ID, NAME, VALUE
FROM b_option_site
WHERE MODULE_ID = 'main'
/home/s/suppornr/suppornr.bget.ru/public_html/bitrix/modules/main/lib/db/mysqliconnection.php:137
#0: BitrixMainDBMysqliConnection->queryInternal(string, array, NULL)
/home/s/suppornr/suppornr.bget.ru/public_html/bitrix/modules/main/lib/db/connection.php:330
#1: BitrixMainDBConnection->query(string)
/home/s/suppornr/suppornr.bget.ru/public_html/bitrix/modules/main/lib/config/option.php:200
#2: BitrixMainConfigOption::load(string)
/home/s/suppornr/suppornr.bget.ru/public_html/bitrix/modules/main/lib/config/option.php:38
#3: BitrixMainConfigOption::get(string, string, string)
/home/s/suppornr/suppornr.bget.ru/public_html/bitrix/modules/main/lib/httprequest.php:392
#4: BitrixMainHttpRequest->prepareCookie(array)
/home/s/suppornr/suppornr.bget.ru/public_html/bitrix/modules/main/lib/httprequest.php:69
#5: BitrixMainHttpRequest->__construct(object, array, array, array, array)
/home/s/suppornr/suppornr.bget.ru/public_html/bitrix/modules/main/lib/httpapplication.php:46
#6: BitrixMainHttpApplication->initializeContext(array)
/home/s/suppornr/suppornr.bget.ru/public_html/bitrix/modules/main/lib/application.php:122
#7: BitrixMainApplication->initializeExtendedKernel(array)
/home/s/suppornr/suppornr.bget.ru/public_html/bitrix/modules/main/include.php:22
#8: require_once(string)
/home/s/suppornr/suppornr.bget.ru/public_html/bitrix/modules/main/include/prolog_before.php:14
#9: require_once(string)
/home/s/suppornr/suppornr.bget.ru/public_html/bitrix/modules/main/include/prolog.php:10
#10: require_once(string)
/home/s/suppornr/suppornr.bget.ru/public_html/bitrix/header.php:1
#11: require(string)
/home/s/suppornr/suppornr.bget.ru/public_html/index.php:2
#12: include_once(string)
/home/s/suppornr/suppornr.bget.ru/public_html/bitrix/modules/main/include/urlrewrite.php:159
#13: include_once(string)
/home/s/suppornr/suppornr.bget.ru/public_html/bitrix/urlrewrite.php:2
Ребят при обновление битрикс с 18 версии вылезло. Что за ошибка? как поправить?
I am trying to UNION comments and posts from Drupal and phpBB tables.
This is my SQL:
(
SELECT f.forum_name AS section,
p.topic_id,
p.forum_id,
p.post_id,
p.poster_id AS uid,
u.username AS user,
p.post_time AS post_time,
p.post_subject AS subject
FROM phpbb_posts p
JOIN phpbb_forums f ON f.forum_id = p.forum_id
JOIN phpbb_topics t ON p.post_id = t.topic_last_post_id
JOIN phpbb_users u ON p.poster_id = u.user_id
)
UNION (
SELECT NULL AS section,
comments.nid AS topic_id,
NULL AS forum_id,
comments.cid AS post_id,
comments.uid AS uid,
comments.name AS user,
comments.timestamp AS post_time,
comments.subject AS subject
FROM dr_node node
LEFT JOIN dr_comments comments ON node.nid = comments.nid
WHERE node.status =1
)
ORDER BY post_time DESC
LIMIT 7
and it gives me
error: #1271 — Illegal mix of collations for operation ‘UNION’
Where is the problem? Thanks for your help.
Ajay2707
5,6686 gold badges40 silver badges58 bronze badges
asked Feb 8, 2014 at 13:03
8
This is the solution that worked for the OP (taken from question):
I have just found solution. Problem was with subject column. I added COLLATE utf8_unicode_ci to the subject in the second SELECT.
(
SELECT f.forum_name AS section,
p.topic_id,
p.forum_id,
p.post_id,
p.poster_id AS uid,
u.username AS user,
p.post_time AS post_time,
p.post_subject AS subject
FROM phpbb_posts p
JOIN phpbb_forums f ON f.forum_id = p.forum_id
JOIN phpbb_topics t ON p.post_id = t.topic_last_post_id
JOIN phpbb_users u ON p.poster_id = u.user_id
)
UNION (
SELECT NULL AS section,
comments.nid AS topic_id,
NULL AS forum_id,
comments.cid AS post_id,
comments.uid AS uid,
comments.name AS user,
comments.timestamp AS post_time,
comments.subject COLLATE utf8_unicode_ci AS subject
FROM dr_node node
LEFT JOIN dr_comments comments ON node.nid = comments.nid
WHERE node.status =1
)
ORDER BY post_time DESC
LIMIT 7
Check both your tables phpbb_posts and dr_node collation. Most probably, they are created with different collation like one with latine and another with utf-8. Hence, you are facing this issue.
EDIT:
You should have both tables with same collation; but in your case as pointed by @Dan; it’s most probably that you are trying to make comparison between f.forum_name AS section in first query with NULL as section in your second query. [As you already mentioned your query works from PHPMyAdmin].
So as stated in this post
Try setting wither of this and how it goes.
SET collation_connection = utf8_general_ci;
or
SET character_set_connection = utf8;
answered Feb 8, 2014 at 13:14
RahulRahul
75.3k13 gold badges68 silver badges121 bronze badges
3
Обратите внимание: при редактировании файлов баз данных сторонними программами (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;
Пожалуйста, замените имя_таблицы и имя_столбца соответствующим именем.
