Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

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

database
codeception
Теги: #<Tag:0x00007f7b622a31d8> #<Tag:0x00007f7b622a3098>

(Maxibello) #1

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

$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


(Michael Bodnarchuk) #2

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


(Maxibello) #3

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

* 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


(Andrew Semenov) #4

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

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


(Евгений Зенталь) #5

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