Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: вот это уж0с! (бд не различает бльшие и малые буквы)
 
 автор: root_xxx   (19.11.2014 в 01:34)   письмо автору
 
 

Рассказывать нечего.
puzzer и puzzeR получаются одинаковыми.(?)

mysql> select login,hashpsw from users where login="puzzeR";
;
+--------+------------+
| login   | hashpsw   |
+--------+------------+
| puzzer | puzzerpsw  |
+--------+------------+
1 row in set
mysql> 


Это можно исправить указанием типа столбца?, или это все, капец - бд не различает регистр и все.

---
Вижу такой выход:

echo "Пароль $data[0]<br>Логин $data[1]";

if (($data[0] != $passw)||($data[1] != $LOGIN)) {
//
//data0 - пароль из бд, data1 - логин из бд
//$passw - введенный пароль $LOGIN - вееденный логин
//
echo "Неправильный пароль или имя пользователя.";
exit;
}


ДОписываю: А если в бд будут пользователи puzzeR и puzzer ??? Как это решается?

  Ответить  
 
 автор: Commander   (19.11.2014 в 08:57)   письмо автору
 
   для: root_xxx   (19.11.2014 в 01:34)
 

Разве puzzer и PuZZer являются разними словами? Буквы-то одни и те же, только с размером разница.

Первое, что приходит в голову - хэшировать строки. В этом случае регистр точно различается.

select login,hashpsw from users where MD5(`login`)=MD5("puzzeR)";

  Ответить  
 
 автор: root_xxx   (19.11.2014 в 12:24)   письмо автору
 
   для: Commander   (19.11.2014 в 08:57)
 

:) попробуйте залогиниться в unix с логином Root и с паролем от уч записи root .

Ваш вариант\подход понял.

  Ответить  
 
 автор: Commander   (19.11.2014 в 12:43)   письмо автору
 
   для: root_xxx   (19.11.2014 в 12:24)
 

:) попробуйте залогиниться в unix с логином Root и с паролем от уч записи root .

Мой подход - человеческий, а ваш - компьютерный :)

  Ответить  
 
 автор: Igorek   (19.11.2014 в 09:22)   письмо автору
 
   для: root_xxx   (19.11.2014 в 01:34)
 

Сравнение строк зависит от типа collation.
Например, для utf8_general_ci - ci означает case insensitive (нечувствительный к регистру), соответственно приставка cs - case sensitive.
для utf8 можно использовать utf8_bin, которая тоже case sensitive.

Пример:
CREATE TABLE `t` (
    `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
    `ci` VARCHAR(50) NULL DEFAULT '0' COLLATE 'utf8_general_ci',
    `cs` VARCHAR(50) NULL DEFAULT '0' COLLATE 'utf8_bin',
    PRIMARY KEY (`id`)
)
ENGINE=InnoDB;
INSERT INTO t (ci, cs) VALUES ('puzzer', 'puzzer');
INSERT INTO t (ci, cs) VALUES ('puZZer', 'puZZer');


и запрос:
SELECT * FROM t WHERE t.ci = 'puzzer'

вернет обе записи, а запрос:
SELECT * FROM t WHERE t.cs = 'puzzer'

только первую

UPD:
еще можно использовать запросы вида:
SELECT * FROM t WHERE t.ci = 'puzzer' COLLATE utf8_bin;

  Ответить  
 
 автор: root_xxx   (19.11.2014 в 13:16)   письмо автору
 
   для: Igorek   (19.11.2014 в 09:22)
 

Сравнение строк зависит от типа collation.
Например, для utf8_general_ci - ci означает case insensitive (нечувствительный к регистру), соответственно приставка cs - case sensitive.
для utf8 можно использовать utf8_bin, которая тоже case sensitive.


дело в том что магической приставки CS в типах для сравнения нет. То есть в выпадающем списке ни в pma, ни в navicat нет utf8_general_cs. Незн может с коммандной строки можно указать utf8_general_cs ? или я не внимательно смотрел.
---
остальное понял и уже проверил. Буду использовать utf8_bin.

  Ответить  
 
 автор: confirm   (19.11.2014 в 09:28)   письмо автору
 
   для: root_xxx   (19.11.2014 в 01:34)
 

.... WHERE BINARY login="puzzeR"

  Ответить  
 
 автор: root_xxx   (19.11.2014 в 13:07)   письмо автору
 
   для: confirm   (19.11.2014 в 09:28)
 

Думаю что будет намного лучше если перевести некоторые поля в utf8_bin.

Ответ на мой вопрос был в самом вопросе, но я не знал (не догадался http://linux.org.ua/yabbfiles/Smilies/blush2.gif )

  Ответить  
 
 автор: confirm   (19.11.2014 в 16:11)   письмо автору
 
   для: root_xxx   (19.11.2014 в 13:07)
 

Так думаете?
Это совсем не обязательно, ибо основная нагрузка на это поле будет совсем не ы=Ы

PS. Ответ на ваш вопрос - саша и САША и Саша, это все таки одно имя, и иметь в системе один и тот же логин в различном регистре это плохо.

  Ответить  
 
 автор: root_xxx   (19.11.2014 в 18:09)   письмо автору
 
   для: confirm   (19.11.2014 в 16:11)
 

иметь в системе один и тот же логин в различном регистре это плохо.

puzzer puZZer puzzeR это не один и тот же логин. Это три разных пользователя.

По поводу "один и тот же логин, но с разницей в регитстрах - плохо" - это я немножко понимаю. Будут проблемы при записи данных (непонятно будет куда писать данные - для puZZer или для puzzer). Ну а дублировать записи смысла никакого нет.


А какие проблемы будут если puzzer puZZer puzzeR - три разных логина (три разных пользователя)?

---

основная нагрузка на это поле будет совсем не ы=Ы
Что значит нагрузка и основная нагрузка?

  Ответить  
 
 автор: confirm   (19.11.2014 в 18:36)   письмо автору
 
   для: root_xxx   (19.11.2014 в 18:09)
 

Ну если не имя для представления, значит и не важно, но ведь дублирование может быть и не логином, а именем на странице, тут тоже будете регистром отличать?

Есть у меня приход, каждому прихожанину на сокровенное отвечаю с подписью "Настоятель". Какой-то отрок зарегистрировался с представлением (не логином) "настоятель" и ответил сразу всем - "Все вы козлы". Вопрос - поймут ли прихожане, что это не я, а антихрист, и не поставят по мне поминальные свечи?

>Что значит нагрузка и основная нагрузка?

Вы опасаетесь, что не хватит символов для логина и фантазии, и ваш сайт уж точно будет по количеству пользователей как Фейсбук и регистрироваться/авторизоваться у вас будут пачками с интервалом 5 секунд?

  Ответить  
 
 автор: root_xxx   (19.11.2014 в 19:51)   письмо автору
 
   для: confirm   (19.11.2014 в 18:36)
 

Понял! Но ведь пользователи также могут репетутать Алискин и Апискин.

Вы опасаетесь...

:) Я моделирую\предполагаю\алгоритмирую :)

  Ответить  
 
 автор: confirm   (19.11.2014 в 19:55)   письмо автору
 
   для: root_xxx   (19.11.2014 в 19:51)
 

Можно перепутать, но все таки это разные персонажи.

  Ответить  
 
 автор: root_xxx   (19.11.2014 в 23:52)   письмо автору
 
   для: confirm   (19.11.2014 в 19:55)
 

та я в том смысле, что это зависит от уровня внимательности\глупости пользователя.

Думаю, что эта тема закрыта. Пасиб усем.

  Ответить  
 
 автор: Trianon   (19.11.2014 в 09:40)   письмо автору
 
   для: root_xxx   (19.11.2014 в 01:34)
 

SHOW CREATE TABLE users; 

что выдает?

  Ответить  
 
 автор: root_xxx   (19.11.2014 в 12:57)   письмо автору
 
   для: Trianon   (19.11.2014 в 09:40)
 

НО это я уже поменял.

SHOW CREATE TABLE users; 
+-------+------------------------------------------------------------------------------------+
| Table | Create Table                                                                                               |
+-------+------------------------------------------------------------------------------------+
users | CREATE TABLE `users` (
  `uid` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `login` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,

БЫЛО   `login` varchar(64) NOT NULL,
...
...
  `mail` varchar(64) NOT NULL,
  `us_status` int(2) unsigned NOT NULL,
...
...

) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 |
+-------+------------------------------------------------------------------------------------+
1 row in set

mysql> 


Еще будет пара вопросов по ключам и индексам. Но в новой теме. Но сначала хочу сам чуток разобраться.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования