URL: https://www.opennet.dev/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 97980
[ Назад ]

Исходное сообщение
"Как победить в postfix lookup ошибку Illegal mix of collations?"

Отправлено КриоМух , 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'



Содержание

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

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


"Как победить в 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 )


"Как победить в postfix lookup ошибку Illegal mix of collations?"
Отправлено jackelyncarylon , 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.


"Как победить в postfix lookup ошибку Illegal mix of collations?"
Отправлено Pahanivo пробегал , 13-Ноя-24 21:36 
> This should help resolve the collation mismatch issue and allow your Postfix
> server to handle the email redirection correctly.

This shold ban you fuck'en spambot.