MrTNTminer
@MrTNTminer
Пишет какую-то фигню на PHP

Как сделать, чтобы MySQL обрабатывал нижнее подчеркивание как текст?

Как сделать чтобы SQL обрабатывал нижнее подчеркивание как текст (и вообще все любые другие символы).
Например, хочу найти данные в столбце строго равные Alexey, он спокойно находит и выдает, но если я введу Alex_ey, то он ничего не найдет, тк SQL заменяет "_" на любой символ, что очень раздражает.
LIKE %% не подходит тк он ищет все совпадения, а мне нужно строгое.
Использую библиотеку RedBeanPHP, пример кода ниже.
$searchlogin = R::getAll('select * from teleg where nik = :login',
                    array(':login'=>$lgtg)
                );
  • Вопрос задан
  • 2765 просмотров
Решения вопроса 1
tsklab
@tsklab
Здесь отвечаю на вопросы.
Убрать подчеркивание.
Или LIKE ESCAPE

s_t_u_v_w и нажимаю найти, мне должно вывести все строгие совпадения с этим ником

SELECT * FROM teleg WHERE nik = 's_t_u_v_w'
Или
SELECT * FROM teleg WHERE nik LIKE 's!_t!_u!_v!_w' ESCAPE '!'

В данный момент из-за того что символ _ заменяется, я не могу найти ники с его участием.
SQL сервер ничего не заменяет.

поставил в ячейках ентеры, из-за этого ничего не находило

SELECT * FROM teleg WHERE nik = 's_t_u_v_w' + CHAR(13)

Или
SELECT * FROM teleg WHERE REPLACE(nik, CHAR(13), '') = 's_t_u_v_w'


Не во всех ячейках есть какой-то символ (или что это такое).

SELECT CONVERT(VARCHAR, CAST(nik AS binary), 2) FROM teleg

Находите ваш неправильный символ. Например, CHAR(13) или CHAR(0x0D) и удаляете его
UPDATE teleg SET nik = REPLACE(nik, CHAR(0x0D), '')

TRIM не срабатывает, так как пробел CHAR(0x20) не последний символ.

MySQL:
SELECT HEX(nik) FROM teleg
UPDATE teleg SET nik = REPLACE(nik, CAST( 0x0D AS CHAR ), '')
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Fernus
@Fernus
Техник - Механик :)
А старый "детовский" способ экранирования религия не позволяет применить?
$str_like = str_replace(['_', '%'], ['\_', '\%'], 'Alex_ey');

$sql = "SELECT * FROM `table` WHERE `field` LIKE '".$str_like."'";

Ну канеш про sql-инъекции не забываем...выше запрос не безопасен, если $str_like приходит хз от кого...это уже другая тема...

P.S.: Почитал комменты к предыдущему ответу...там походу дело в самом подходе и хранении данных...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы