Модераторы: skyboy

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Case sensitivity, опознование больших и маленьких букв 
:(
    Опции темы
Alex0202
  Дата 16.11.2005, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 11.3.2005

Репутация: нет
Всего: нет



Перед добавлением username'a в db я проверяю если в db уже такой юзернэйм,обычным select * where username='$username'.

Всё работает хорошо до тех пор пока дело недоходит до заглавных букв.
Например в базе уже есть юзер "vasya"
и если придёт новый юзер и введё "VaSyA" или "vasYa" то система его пропустит !!

Как мне сделать чтобы в базе был только один вася ??

Mysql ver 4.1

Это сообщение отредактировал(а) Alex0202 - 16.11.2005, 17:16
PM MAIL   Вверх
DemoCode
Дата 16.11.2005, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 890
Регистрация: 20.10.2005
Где: Россия

Репутация: нет
Всего: 41



например, пиши все имена маленькими буквами strtolower ($username)
и проверяй так:

$username = strtolower ($username);
$sql = "select * where username='$username'";

Это сообщение отредактировал(а) DemoCode - 16.11.2005, 17:07


--------------------
Жить стало лучше, жить стало веселей
© И.В. Сталин 
PM MAIL ICQ   Вверх
Alex0202
Дата 16.11.2005, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 11.3.2005

Репутация: нет
Всего: нет



Цитата(DemoCode @ 16.11.2005, 17:07)
например, пиши все имена маленькими буквами strtolower ($username)
и проверяй так:

$username = strtolower ($username);
$sql = "select * where username='$username'";

Это не сработает ж) потомучто в базе уже может быть "Vasya" а я буду искать strtolower("vAsYa")
PM MAIL   Вверх
Bikutoru
Дата 16.11.2005, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлекающийся
**


Профиль
Группа: Участник
Сообщений: 522
Регистрация: 24.5.2005
Где: Москва

Репутация: 1
Всего: 22



У текстовых типов столбцов есть аттрибут BINARY используемый при сравнении. Если его указать, то Vasya и VASyA не будут равны. Пример использования BINARY:
Код

CREATE TABLE users (
    login VARCHAR(20) BINARY NOT NULL UNIQUE,
    password VARCHAR(20) BINARY NOT NULL
);

Добавлено @ 17:24
Еще, вроде бы, возможно регистрозависимое сравнение столбцов, не объявленных как BINARY, но как это делается не помню... См. dev.mysq.com

Это сообщение отредактировал(а) Bikutoru - 16.11.2005, 17:27


--------------------
Человек, словно в зеркале мир — многолик, 
Он ничтожен — и он же безмерно велик!
Омар Хайям
PM   Вверх
Alex0202
Дата 16.11.2005, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 11.3.2005

Репутация: нет
Всего: нет



Цитата(Bikutoru @ 16.11.2005, 17:22)
У текстовых типов столбцов есть аттрибут BINARY используемый при сравнении. Если его указать, то Vasya и VASyA не будут равны. Пример использования BINARY:
Код

CREATE TABLE users (
    login VARCHAR(20) BINARY NOT NULL UNIQUE,
    password VARCHAR(20) BINARY NOT NULL)
);

Пасибо за пример, но я это уже знаю и это неподходит (база уже заполнена и несмогу create table)
PM MAIL   Вверх
Bikutoru
Дата 16.11.2005, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлекающийся
**


Профиль
Группа: Участник
Сообщений: 522
Регистрация: 24.5.2005
Где: Москва

Репутация: 1
Всего: 22



Цитата(Alex0202 @ 16.11.2005, 18:26)
(база уже заполнена и несмогу create table)

И что? Можно же изменить определение столбца с сохранением всей информации
Код

ALTER TABLE users MODIFY login VARCHAR(50) BINARY NOT NULL



--------------------
Человек, словно в зеркале мир — многолик, 
Он ничтожен — и он же безмерно велик!
Омар Хайям
PM   Вверх
Alex0202
Дата 16.11.2005, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 11.3.2005

Репутация: нет
Всего: нет



Цитата(Bikutoru @ 16.11.2005, 17:29)
Цитата(Alex0202 @ 16.11.2005, 18:26)
(база уже заполнена и несмогу create table)

И что? Можно же изменить определение столбца с сохранением всей информации
Код

ALTER TABLE users MODIFY login VARCHAR(50) BINARY NOT NULL

Буде делать это в последий случай, это несовсем подходит, мне надо чтобы был только один vasya в базе smile
PM MAIL   Вверх
DemoCode
Дата 16.11.2005, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 890
Регистрация: 20.10.2005
Где: Россия

Репутация: нет
Всего: 41



Цитата(Alex0202 @ 16.11.2005, 18:16)
Это не сработает ж) потомучто в базе уже может быть "Vasya" а я буду искать strtolower("vAsYa")


Пройдись по базе и исправь все "Vasya" на strtolower ("Vasya").



--------------------
Жить стало лучше, жить стало веселей
© И.В. Сталин 
PM MAIL ICQ   Вверх
Alex0202
Дата 16.11.2005, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 11.3.2005

Репутация: нет
Всего: нет



ноже непойдёт, неуважение какоето имя с маленькой буквы ж(
неужели нет других вариантов??
PM MAIL   Вверх
Bikutoru
Дата 16.11.2005, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлекающийся
**


Профиль
Группа: Участник
Сообщений: 522
Регистрация: 24.5.2005
Где: Москва

Репутация: 1
Всего: 22



Цитата(Alex0202 @ 16.11.2005, 18:33)
Буде делать это в последий случай, это несовсем подходит, мне надо чтобы был только один vasya в базе

Тогда я ничего не понимаю. Нельзя ли пояснить?..



--------------------
Человек, словно в зеркале мир — многолик, 
Он ничтожен — и он же безмерно велик!
Омар Хайям
PM   Вверх
Alex0202
Дата 16.11.2005, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 11.3.2005

Репутация: нет
Всего: нет



Цитата(Bikutoru @ 16.11.2005, 17:46)
Цитата(Alex0202 @ 16.11.2005, )
Буде делать это в последий случай, это несовсем подходит, мне надо чтобы был только один vasya в базе

Тогда я ничего не понимаю. Нельзя ли пояснить?..

ну мне надо чтоб в базе был только один Vasya либо VASYA или VaSyA, мне ненадо чтоб в базе был Vasya, VaSyA и VASYA

Это сообщение отредактировал(а) Alex0202 - 16.11.2005, 18:04
PM MAIL   Вверх
Bikutoru
Дата 16.11.2005, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлекающийся
**


Профиль
Группа: Участник
Сообщений: 522
Регистрация: 24.5.2005
Где: Москва

Репутация: 1
Всего: 22



Я бы сделал таким образом:
Код

ALTER TABLE users ADD COLUMN login_hash CHAR(32) BINARY NOT NULL UNIQUE;
UPDATE users SET login_hash=MD5(LOWER(login));
ALTER TABLE users MODIFY login VARCHAR(50) BINARY NOT NULL

Таким образом юзер может придумывать логин в любом регистре, а уникальный индекс на хеше логина, приведенного к нижнему регистру, не позволит создать Vasya, если уже есть vasya. Соответственно, добавлять пользователей нужно, не забывая о хеше логина:
Код

INSERT INTO users(login, hash_login) VALUES ("{логин}", MD5(LOWER("{логин}")));


Это сообщение отредактировал(а) Bikutoru - 16.11.2005, 18:31


--------------------
Человек, словно в зеркале мир — многолик, 
Он ничтожен — и он же безмерно велик!
Омар Хайям
PM   Вверх
Ignat
Дата 16.11.2005, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Флудератор
****


Профиль
Группа: Экс. модератор
Сообщений: 4030
Регистрация: 19.4.2004
Где: غيليندزيك مدينة

Репутация: 21
Всего: 73



Я бы просто при попытке регистрации проверял предикатом:
Код

SELECT count(`id`) FROM `users` WHERE LOWER(`username`)=LOWER("VaSyA");

Вернул число<>0 , значит юзер есть.


--------------------
Теперь при чем :P
PM   Вверх
Bikutoru
Дата 16.11.2005, 18:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлекающийся
**


Профиль
Группа: Участник
Сообщений: 522
Регистрация: 24.5.2005
Где: Москва

Репутация: 1
Всего: 22



Ignat, в твоём варианте индекс использоваться не будет и, следовательно, запрос притормаживать будет при энном числе юзеров... А хеш хорошо лежит, никому не мешает smile ...


--------------------
Человек, словно в зеркале мир — многолик, 
Он ничтожен — и он же безмерно велик!
Омар Хайям
PM   Вверх
Ignat
Дата 16.11.2005, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Флудератор
****


Профиль
Группа: Экс. модератор
Сообщений: 4030
Регистрация: 19.4.2004
Где: غيليندزيك مدينة

Репутация: 21
Всего: 73



Цитата(Bikutoru @ 16.11.2005, 18:48)
запрос притормаживать будет при энном числе юзеров...

Обязательно. Тут встает вопрос, важнее скорость или отсутствие "накладных" расходов. MD5 наверняка будет побольше нежели стандартный логин.


--------------------
Теперь при чем :P
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0553 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.