Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Do not search charset in mysql_real_connect if already set #3249

Merged
merged 9 commits into from Jan 20, 2021

Conversation

renecannao
Copy link
Contributor

In mysql_init() charset is set to NULL .
In mysql_read_connect() charset is not changed if already set

This allows proxysql to change it outside the library

In mysql_init() charset is set to NULL .
In mysql_read_connect() charset is not changed if already set

This allows proxysql to change it outside the library
@renecannao
Copy link
Contributor Author

retest this please

JavierJF and others added 3 commits January 15, 2021 16:24
Collation latin1_german1_ci was incorrectly named latin1_german_ci in libmariadbclient .
This seems to be fixed in version 3.1 but not in 3.0 .
Do not port this commit to proxysql 2.1 because it already uses libmariadbclient 3.1
This is an extension of commit 1ecb00f about mysql_real_connect

It also changes mysql_optionsv() for MYSQL_SET_CHARSET_NAME
@renecannao
Copy link
Contributor Author

We are facing few challenges with this PR.
It seems that:

  • if during mysql_real_connect() the backend cannot set the collation asked by the client (for example if the client is mysql 8 asking for utf8mb4_0900_ai_ci while the backend is mysql 5.7 and doesn't support utf8mb4_0900_ai_ci), the backend silently sets it to its own default
  • if during mysql_change_user() the backend cannot set the collation asked by the client, it returns error Access denied and also (using password: NO)
    This seems a MySQL server bug (inconsistency between connect and change user)

… charset if collation ID is greater or equal than 255 (utf8mb4_0900_ai_ci)

We call mysql_options with MYSQL_SET_CHARSET_NAME if collation ID >= 255 .
This to solve the problem of MySQL server returning an Access denied if the backend doesn't support a collation during mysql_change_user
@renecannao
Copy link
Contributor Author

Relevant MySQL bugs:
http://bugs.mysql.com/102265
http://bugs.mysql.com/102266

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants