За последние 24 часа нас посетили 15066 программистов и 1665 роботов. Сейчас ищут 813 программистов ...

SQLite PDO Регистр Ru букв при проверки логина/Никнейма

Тема в разделе "PHP и базы данных", создана пользователем MouseZver, 8 мар 2015.

  1. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.809
    Симпатии:
    1.332
    Адрес:
    Лень
    Приходится все таки обращаться...

    Проблема такова. При проверки никнейма на существовании пользователя у меня по каким то причинам не получается вывести данные если upper(NICKNAME) == upper('Хочутортик'), точнее upper не преобразует в верхний регистр Ru буквы.

    сам вывод должен получиться таков:
    Код (Text):
    1. array(14) { ["ID"]=> string(1) "1" ["NICKNAME"]=> string(20) "ХочуТортик" ["LOGIN"]=> string(10) "mouse-zver" ["PASSWORD"]=> string(13) "$2Cw51.ICu1Nw" ["DATAREGUSR"]=> string(10) "1425813534" ["MAIL"]=> string(10) "123@123.ru" ["NAMEUSR"]=> string(0) "" ["FAMILY_NAMEUSR"]=> string(0) "" ["BIRTHDAY"]=> string(0) "" ["NAMEAVATAR"]=> string(0) "" ["SMSNUM"]=> string(1) "0" ["AGENTBROWSER"]=> string(102) "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" ["PINGTIME"]=> string(10) "1425813534" ["CITY"]=> string(0) "" }
    PDO запрос:
    Код (PHP):
    1. var_dump( $db->query("SELECT * FROM USRACCOUNT WHERE upper(NICKNAME) = 'Хочутортик' ")->fetch(PDO::FETCH_ASSOC)); 
    перепробывал разные варианты:
    strtoupper('Хочутортик') //ХОЧУТОРТИК, хочутортик
    в мануале:
    mb_strtoupper...
    эффекта нету...

    ====
    Код (PHP):
    1.   0 => 
    2.   array (
    3.     'ID' => '1',
    4.     'NICKNAME' => 'ХочуТортик',
    5.     'UTF_NICKNAME' => 'ХОЧУТОРТИК',
    6.     'LOGIN' => 'mouse-zver',
    7.     'UTF_LOGIN' => 'MOUSE-ZVER',
    8.     'PASSWORD' => '$2risXZmRciWQ',
    9.     'DATAREGUSR' => '1425832291',
    10.     'MAIL' => 'mouse-zver@xaker.ru',
    11.     'NAMEUSR' => '',
    12.     'FAMILY_NAMEUSR' => '',
    13.     'BIRTHDAY' => '',
    14.     'NAMEAVATAR' => '',
    15.     'SMSNUM' => '0',
    16.     'AGENTBROWSER' => 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36',
    17.     'PINGTIME' => '1425832291',
    18.     'CITY' => '',
    19.   ),
    20. ) 
    сделал пока так... будет возможность найдена исправлю..
     
  2. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Кодировку указали?
    Код (PHP):
    1. echo mb_strtoupper('Хочутортик', 'utf-8'); // ХОЧУТОРТИК 
     
  3. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.809
    Симпатии:
    1.332
    Адрес:
    Лень
    это работает, а нужно выяснить почему upper не работает с Ru символами

    Добавлено спустя 35 секунд:
    upper(NICKNAME)
     
  4. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Я очень поверхностно знаком с SQLite, но в документации написано, что функции lower и upper, работают с ASCII, а в других случаях нужно расширение ICU. Может это натолкнет на правильный ход мыслей...

    Добавлено спустя 5 минут 23 секунды:
    P.S. А попробуйте сделать запрос так, как в мускуле:
    Код (PHP):
    1. SELECT * FROM USRACCOUNT WHERE BINARY NICKNAME = 'Хочутортик' 
     
  5. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.809
    Симпатии:
    1.332
    Адрес:
    Лень
    Дело в том что MySQLi не так придирчив и не чувствителен к регистру что облегчает этот вариант, но не прокатит с sqlite. Есть вариант преобразовывая входные данные в такие значения: &131# или как там пишутся.. вобщем не хочется велосипед изобретать..
    http://unicode-table.com/ru/

    Добавлено спустя 15 минут 25 секунд:
    или.. или.. или.. создавать доп столбец utf_nickname / login