SA-MP Forums Archive
Регистр ( MySQL ) - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Русский/Russian (https://sampforum.blast.hk/forumdisplay.php?fid=32)
+---- Thread: Регистр ( MySQL ) (/showthread.php?tid=423718)



Регистр ( MySQL ) - CamperGTA - 19.03.2013

Здравствуйте.
Как можно сделать проверку на регистр букв в MySQL (для аккаунтов)
т.е. если зарегистрировался с ника Player, потом зайти с player, то надо будет заного зарегистрироваться, а не авторизоваться
Заранее спасибо.


Re: Регистр ( MySQL ) - CamperGTA - 23.03.2013

upupupup


Re: Регистр ( MySQL ) - AirKite - 23.03.2013

Никак не нужно. Просто проверяйте, по умолчанию MySQL чувствителен к регистру.


Re: Регистр ( MySQL ) - Stepashka - 23.03.2013

Quote:
Originally Posted by AirKite
Посмотреть сообщение
Никак не нужно. Просто проверяйте, по умолчанию MySQL чувствителен к регистру.
Мускул по умолчанию не чувствителен к регистру, для того что бы проверка стала чувствительна к регистру нужно использовать параметр BINARY.


Re: Регистр ( MySQL ) - AirKite - 23.03.2013

Quote:
Originally Posted by Stepashka
Посмотреть сообщение
Мускул по умолчанию не чувствителен к регистру, для того что бы проверка стала чувствительна к регистру нужно использовать параметр BINARY.
По умолчанию чего? Всё зависит от кодировки, правил сравнения строк при создании таблицы и т.д. Сам лично зачастую (там где нужно) использую кодировки %name%_ci (case insensitive).

Предположительно как тут обычно спрашивают про уже готовые моды, там также используют _ci кодировку и LOWER в MySQL запросе, который следует убрать. А вот BINARY или BLOB может не всегда подойти.

p.s. конечно наверное мне следовало сразу всё расписать максимально подробно.


Re: Регистр ( MySQL ) - CamperGTA - 24.03.2013

как это реализовать?
код:
OnPlayerConnect:
Quote:

new str[128];
mysql_real_escape_string(PlayerName(playerid), PlayerName(playerid));
format(str, sizeof(str),"SELECT `name` FROM "accounts_table" WHERE `name` = '%s'", PlayerName(playerid));
mysql_function_query(connection, str, true, "OnPlayerRegCheck","d", playerid);

Quote:

forward OnPlayerRegCheck(playerid);
public OnPlayerRegCheck(playerid)
{
if(IsPlayerConnected(playerid))
{
new rows, fields;
cache_get_data(rows, fields);
if(rows)
{
//login dialog
}
else //register dialog
}
return 1;
}




Re: Регистр ( MySQL ) - CamperGTA - 24.03.2013

как это реализовать?
код:
OnPlayerConnect:
Quote:

new str[128];
mysql_real_escape_string(PlayerName(playerid), PlayerName(playerid));
format(str, sizeof(str),"SELECT `name` FROM "accounts_table" WHERE `name` = '%s'", PlayerName(playerid));
mysql_function_query(connection, str, true, "OnPlayerRegCheck","d", playerid);

Quote:

forward OnPlayerRegCheck(playerid);
public OnPlayerRegCheck(playerid)
{
if(IsPlayerConnected(playerid))
{
new rows, fields;
cache_get_data(rows, fields);
if(rows)
{
//login dialog
}
else //register dialog
}
return 1;
}




Re: Регистр ( MySQL ) - Jon_De - 24.03.2013

... WHERE BINARY `Name` ...


Re: Регистр ( MySQL ) - Stepashka - 24.03.2013

Quote:
Originally Posted by AirKite
Посмотреть сообщение
По умолчанию чего? Всё зависит от кодировки, правил сравнения строк при создании таблицы и т.д. Сам лично зачастую (там где нужно) использую кодировки %name%_ci (case insensitive).
кодировка тут не причем, MySQL без дополнительной глобальной настройки не обращает внимание на регистр, только для полей помеченных как BINARY и при указании данного ключа в проверках он начинает проверять регистр.
А то что вы указали в кодировке как case insensitive обозначает что в ней присутствуют буквы во верхнем и нижнем регистре, без приставки - только в нижнем. От этого приложения работающие с данной кодировкой регистрозависимыми не становятся.


Re: Регистр ( MySQL ) - AirKite - 24.03.2013

Quote:
Originally Posted by Stepashka
Посмотреть сообщение
кодировка тут не причем, MySQL без дополнительной глобальной настройки не обращает внимание на регистр, только для полей помеченных как BINARY и при указании данного ключа в проверках он начинает проверять регистр.
А то что вы указали в кодировке как case insensitive обозначает что в ней присутствуют буквы во верхнем и нижнем регистре, без приставки - только в нижнем. От этого приложения работающие с данной кодировкой регистрозависимыми не становятся.
Спасибо за дополнительную информацию. Я без сарказма. Действительно попытался объяснить грамотно, а получилось наоборот... Хотя конечно я и указывал о соответствующих правилах при создании таблиц.
Quote:
Originally Posted by AirKite
Посмотреть сообщение
Всё зависит от кодировки, правил сравнения строк при создании таблицы и т.д. Сам лично зачастую (там где нужно) использую кодировки %name%_ci (case insensitive).