История изменений
Исправление 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, т.е. как обычно через жопу.