Регистр ( MySQL )
#1

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

upupupup
Reply
#3

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

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

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

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

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

как это реализовать?
код:
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;
}

Reply
#7

как это реализовать?
код:
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;
}

Reply
#8

... WHERE BINARY `Name` ...
Reply
#9

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

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


Forum Jump:


Users browsing this thread: 1 Guest(s)