The OpenNET Project / Index page

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



"Как победить в postfix lookup ошибку Illegal mix of collations?"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Открытые системы на сервере (Почта / FreeBSD)
Изначальное сообщение [ Отслеживать ]

"Как победить в postfix lookup ошибку Illegal mix of collations?"  +/
Сообщение от КриоМух (ok), 30-Июн-24, 19:35 
Добрый день, Товарищи!

Прошу совета. Почтовик у меня, стандартный postfix,mysql,dovecot, freebsd и всё такое. Всё работает нормально.
На днях видимо настроили как-то коряво перенаправление писем с яндекса на адрес почтовый на этом сервере, и этот адрес КУДА должны идти письма - написали коряво, видимо там символы русские добавили или ещё что. В логе это выглядит так:


Jun 30 21:12:14 warning: mysql:/usr/local/etc/postfix/mysql/virtual_alias_maps.cf: query failed: Illegal mix of collations (latin1_general_ci,IMPLICIT) and (utf8mb4_general_ci,COERCIBLE) for operation '='
Jun 30 21:12:14 mx postfix/smtpd[19]: warning: mysql:/usr/local/etc/postfix/mysql/virtual_alias_maps.cf lookup error for "�M-^Aeo@mydomain.ru"
Jun 30 21:12:14 mx postfix/smtpd[19]: NOQUEUE: reject: RCPT from forward501b.mail.yandex.net[178.154.239.145]: 451 4.3.0 <�M-^Aeo@mydomain.ru>: Temporary lookup failure; from=<yandex-address@yandex.ru> to=<�M-^Aeo@mydomain.ru> proto=ESMTP helo=<forward501b.mail.yandex.net>

Т.е. там насколько я понимаю пересылку настроили, подтверждение на указанный адрес попыталось выслаться и вот оно никак дойти не может, почтовик нормального ответа яндексу дать не может, т.к. при проверке адреса назначения у него SQL ошибка из-за некорректных символов проявляется.
В целом-то ничего фатального, я об этом уже сообщил и там адрес поправят, мне интересно - как можно сделать, чтобы мой почтовик не валился в SQL ошибку, а отвечал корректно, что адреса такого нет. Экранирование там как-то включить или ещё что-то может?

Вот настройка lookup'а в MySQL, тоже стандартная:

hosts   = unix:/var/mysql/mysql.sock
user    = postuser
password= PASS
dbname  = postdb

query   = SELECT aa.goto FROM alias aa JOIN domain bb ON bb.domain=aa.domain WHERE aa.address='%s' AND aa.active='1'


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

Оглавление

Сообщения [Сортировка по времени | RSS]


1. "Как победить в postfix lookup ошибку Illegal mix of collations?"  +/
Сообщение от Pahanivo пробегал (?), 30-Июн-24, 22:49 
Анекдот про связиста в армии и автомат знаешь?
У меня уходит - проблема где-то у вас! (R)

ПыСы: Тебя не смущает что оно с ямыла ушло? Загуглить ошибку пробовал? Кодировки в своей базе проверял?

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

2. "Как победить в postfix lookup ошибку Illegal mix of collations?"  +/
Сообщение от pavel2000 (?), 08-Июл-24, 13:27 
>[оверквотинг удален]
> поправят, мне интересно - как можно сделать, чтобы мой почтовик не
> валился в SQL ошибку, а отвечал корректно, что адреса такого нет.
> Экранирование там как-то включить или ещё что-то может?
> Вот настройка lookup'а в MySQL, тоже стандартная:
>
hosts   = unix:/var/mysql/mysql.sock 
> user    = postuser
> password= PASS
> dbname  = postdb
> query   = SELECT aa.goto FROM alias aa JOIN domain bb
> ON bb.domain=aa.domain WHERE aa.address='%s' AND aa.active='1'

WHERE aa.address= CONVERT( _utf8 '%s' USING latin1 )

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

3. "Как победить в postfix lookup ошибку Illegal mix of collations?"  +/
Сообщение от jackelyncarylon (ok), 12-Ноя-24, 13:26 
>[оверквотинг удален]
> поправят, мне интересно - как можно сделать, чтобы мой почтовик не
> валился в SQL ошибку, а отвечал корректно, что адреса такого нет.
> Экранирование там как-то включить или ещё что-то может?
> Вот настройка lookup'а в MySQL, тоже стандартная:
>
hosts   = unix:/var/mysql/mysql.sock 
> user    = postuser
> password= PASS
> dbname  = postdb
> query   = SELECT aa.goto FROM alias aa JOIN domain bb
> ON bb.domain=aa.domain WHERE aa.address='%s' AND aa.active='1'

It sounds like you're dealing with a collation mismatch issue in your MySQL query for Postfix. To handle this, you can modify your MySQL query to ensure that the collation is consistent. Here's an updated version of your query that should help avoid the collation error:

sql
hosts   = unix:/var/mysql/mysql.sock
user    = postuser
password= PASS
dbname  = postdb
query   = SELECT aa.goto FROM alias aa JOIN domain bb ON bb.domain=aa.domain WHERE aa.address=LOWER('%s') AND aa.active='1'
By using the LOWER function, you ensure that the comparison is case-insensitive and consistent with the collation settings.

Additionally, you can update your MySQL table to use a consistent collation, such as utf8mb4_general_ci, to avoid collation conflicts:

sql
ALTER TABLE alias CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
ALTER TABLE domain CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
This should help resolve the collation mismatch issue and allow your Postfix server to handle the email redirection correctly.

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

4. Скрыто модератором  +/
Сообщение от Pahanivo пробегал (?), 13-Ноя-24, 21:36 
Ответить | Правка | Наверх | Cообщить модератору

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

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




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

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