[Resolved] Codeception. Поиск кириллицы в БД.

Допустим, я хочу найти строку в таблице БД:

$I->seeInDatabase('user', array('first_name' => Users::$Ivan->firstname, 'last_name' => Users::$Ivan->lastname, 'email' => Users::$Ivan->login));

При этом я получаю ошибку:

    Failed to register a new user in LoginCest.RegisterNewUser_GetActivationLink
Sorry, I couldn't see in database "user",{"first_name":"Иван","last_name":"Иванов","email":"i.ivanov@host.ru"}:
No matching records found
Failed asserting that '0' is greater than 0.

Если я заменю firstname и lastname на латинские значения, метод сработает. Кодировка БД - utf8 default collation, кодировка файла с тестом - utf-8. В чём может быть косяк?
@davert

Сори, не подскажу. Если кодировка совпадает, то всё должно работать. Включите режим --debug посмотрите какой SQL идет…

В дебаге вместо значений символ ‘?’. Так и должно быть?

* I see in database "user",{"email":"i.ivanov@host.ru","last_name":"Иванов"}
  [Query] select count(*) from `user` where `email` = ? AND `last_name` = ?

Если я вручную сделаю запрос к таблице:

select count(*) from user where email = 'i.ivanov@host.ru' AND last_name = 'Иванов'

то он вернет результат: 1

Удалось исправить. Нужно прописать charset=utf8 в строке dsn
то есть

modules:
config:
Db:
dsn: ‘mysql:host=host;dbname=db;charset=utf8

5 лайков

Спасибо, это помогло!

1 лайк

Сработало, спасибо!

1 лайк