LINUX.ORG.RU

История изменений

Исправление Stanson, (текущая версия) :

На тебе аццкий hack:

в конфиге mysql можно прописать команды которые будут выполняться при коннекте.

[mysqld]
init_connect='SET collation_connection = utf8_general_ci'
init_connect='SET NAMES utf8'

Проблема в том, что клиент может игнорировать это всё.

Поэтому надо выдрать variables. Например прописав в init_connect='show variables ....'

Но show variables не подразумевает способа сохранить как-то результат. Однако, позволяет использовать WHERE, а в WHERE можно expr, в том числе и присваивание.

Поэтому нужен финт ушами:

SET @uservars := ";
SHOW VARIABLES WHERE ( @uservars := CONCAT( @uservars, Variable_name, '=', Value , '\n' ) ) IS NULL;
SHOW VARIABLES WHERE ( @uservars := CONCAT( @uservars, Variable_name, '=', Value , '\n' ) ) IS NULL;
SELECT @uservars INTO OUTFILE '/tmp/uservars';

Почему-то нужно 2 раза show variables, чтобы все переменные попали в @uservars. Первый раз только одна последняя переменная попадает. И \n нифига не работает, но тем не менее, в файле /tmp/uservars окажутся переменные и значения юзверя из-под которого это запустили.

А запустить из-под юзера можно посредством init_connect

Ну и вот эту всю бодягу оформить в виде процедуры, или прямо запускать из init_connect. Логично ещё имя файла согласно юзерскому имени давать. Через CURRENT_USER() и prepared statement, т.е. как обычно через жопу.

Исправление Stanson, :

На тебе аццкий hack:

в конфиге mysql можно прописать команды которые будут выполняться при коннекте.

[mysqld]
init_connect='SET collation_connection = utf8_general_ci'
init_connect='SET NAMES utf8'

Проблема в том, что клиент может игнорировать это всё.

Поэтому надо выдрать variables. Например прописав в init_connect='show variables ....'

Но show variables не подразумевает способа сохранить как-то результат. Однако, позволяет использовать WHERE, а в WHERE можно expr, в том числе и присваивание.

Поэтому нужен финт ушами:

SET @uservars := ";
SHOW VARIABLES WHERE ( @uservars := CONCAT( @uservars, Variable_name, '=', Value , '\n' ) ) IS NULL;
SHOW VARIABLES WHERE ( @uservars := CONCAT( @uservars, Variable_name, '=', Value , '\n' ) ) IS NULL;
SELECT @uservars INTO OUTFILE '/tmp/uservars';

Почему-то нужно 2 раза show variables, чтобы все переменные попали в @uservars. Первый раз только одна последняя переменная попадает. И \n нифига не работает, но тем не менее, в файле /tmp/uservars окажутся переменные и значения.

Ну и вот эту всю бодягу оформить в виде процедуры, или прямо запускать из init_connect. Логично ещё имя файла согласно юзерскому имени давать. Через CURRENT_USER() и prepared statement, т.е. как обычно через жопу.

Исходная версия Stanson, :

На тебе аццкий hack:

в конфиге mysql можно прописать команды которые будут выполняться при коннекте.

[mysqld]
init_connect='SET collation_connection = utf8_general_ci'
init_connect='SET NAMES utf8'

Проблема в том, что клиент может игнорировать это всё.

Поэтому надо выдрать variables. Например прописав в init_connect='show variables ....'

Но show variables не подразумевает способа сохранить как-то результат. Однако, позволяет использовать WHERE, а в WHERE можно expr, в том числе и присваивание.

Поэтому нужен финт ушами:

SET @uservars := ";
SHOW VARIABLES WHERE ( @uservars := CONCAT( @uservars, Variable_name, '=', Value , '\n') ) IS NULL;
SHOW VARIABLES WHERE ( @uservars := CONCAT( @uservars, Variable_name, '=', Value , '\n' ) ) IS NULL;
SELECT @uservars INTO OUTFILE '/tmp/uservars';

Почему-то нужно 2 раза show variables, чтобы все переменные попали в @uservars. Первый раз только одна последняя переменная попадает. И \n нифига не работает, но тем не менее, в файле /tmp/uservars окажутся переменные и значения.

Ну и вот эту всю бодягу оформить в виде процедуры, или прямо запускать из init_connect. Логично ещё имя файла согласно юзерскому имени давать. Через CURRENT_USER() и prepared statement, т.е. как обычно через жопу.