The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]



" Помогите победить Illegal mix of collations"
Вариант для распечатки  
Пред. тема | След. тема 
Форум WEB технологии (MySQL)
Изначальное сообщение [ Отслеживать ]

" Помогите победить Illegal mix of collations"  +/
Сообщение от КриоМух (ok), 19-Янв-24, 17:02 
Товарищи, добрый день!

У меня значит моя программа работает, всё в порядке, но в случае одного из запросов к БД - выдаёт такую ошибку:

PHP Fatal error:  Uncaught mysqli_sql_exception: Illegal mix of collations (utf8mb3_general_ci,IMPLICIT) and (utf16_general_ci,IMPLICIT) for operation '='

Данные в БД заносятся, читаются, всё ок. Но вот один из запросов выдаёт приведённую выше ошибку.
Сам этот запрос такого вида:

INSERT INTO otd_AU_RepNode (AU_RSectID, AU_RpNodeID, nodeKey, nodeName, nodeDescr, periodType, isObjNode, isRepNeed, relLevel, orderNum, isActive, isPerioded)
SELECT AUK_Rep_sKey2ID(1446, aa.sectKey), AUK_Rep_nKey2ID(1446, aa.pNodeKey), aa.nodeKey, aa.nodeName, aa.nodeDescr, aa.periodType, aa.isObjNode, aa.isRepNeed, aa.relLevel, aa.orderNum, aa.isActive, aa.isPerioded
FROM (
    SELECT "o.31" sectKey,"e.22" nodeKey,"" pNodeKey,1 orderNum,2 relLevel,1 isActive,0 periodType,0 isObjNode,0 isRepNeed,"\"Тест\"" nodeName,"\"\"" nodeDescr,0 isPerioded
     ) aa
    JOIN otd_AU_RepSection bb ON bb.sectKey=aa.sectKey
    JOIN otd_AU_CTReports cc ON cc.id=bb.AU_RepID
    JOIN otd_AU_ClientTemp dd ON dd.id=cc.AU_CT_ID
    WHERE cc.id=1446
        AND cc.isActive=1
        AND dd.isActive=1
        AND cc.repState=1
    ORDER BY aa.relLevel ASC,
             aa.orderNum ASC
ON DUPLICATE KEY UPDATE
    nodeName=aa.nodeName,
    nodeDescr=aa.nodeDescr,
    periodType=aa.periodType,
    isRepNeed=aa.isRepNeed,
    isObjNode=aa.isObjNode,
    orderNum=aa.orderNum,
    isActive=aa.isActive,
    isPerioded=aa.isPerioded

Я не могу понять в чём дело. Все таблицы и колонки в БД типа: utf8mb3_general_ci
Настройки mariadb-10.11.3:

[client]
default-character-set   = utf8

[mysqld]
character-set-server            = utf8
collation-server                = utf8_general_ci

В настройках php в целом негде кодировку указывать, но я на всякий случай тоже попробовал это сделать:

default_charset = "UTF-8"

В настройках самого php приложения, также указал:

mb_internal_encoding("UTF-8");
$DBLink->sql('SET NAMES "UTF8";');
$DBLink->sql('SET CHARACTER SET "UTF8";');

-----------------------------------------------------
В Конце: Как это очень часто бывает, достаточно нормально сформулировать вопрос, и ответ скорей всего появится сам собой. Всё в utf-8, а вот процедуры и функции - они видимо были из дампа БД восстановлены, и там откуда они пришли похоже были какие-то другие настройки. Пересоздал все хранимые функции и процедуры - всё завелось. Спасибо за внимание!

Ответить | Правка | Cообщить модератору


Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру