The OpenNET Project / Index page

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




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Как победить в 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 пробегал, 22:49 , 30-Июн-24 (1)
    Анекдот про связиста в армии и автомат знаешь?
    У меня уходит - проблема где-то у вас! (R)

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

  • Как победить в postfix lookup ошибку Illegal mix of collations?, !*! pavel2000, 13:27 , 08-Июл-24 (2)
    >[оверквотинг удален]
    > поправят, мне интересно - как можно сделать, чтобы мой почтовик не
    > валился в 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, 13:26 , 12-Ноя-24 (3)
    >[оверквотинг удален]
    > поправят, мне интересно - как можно сделать, чтобы мой почтовик не
    > валился в 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.




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

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