У вас слеши пропадают на уровне php, это видимо можно проверить прогнав str_replace('\\u','\\\\u',json_encode($data));
Глюки на уровне Mysql можно прореветь переведя тип поля в которое пишется json в тип blob, если стало ок, то что то не так с кодировками в базе или соединении с ней.
json_encode($massx,JSON_UNESCAPED_UNICODE); не решит проблему со слэшами, они используются не только для юникода
Дополнено:
слеш в строчках служит для написания непечатных/управляющих кодов в виде букв. Это не mysql это
везде так. Например \t это не слеш + t (два символа), это один символ табуляции. так же и \u это не два символа а один, чёрт пойми какой.
если вы сделаете insert into t set col = 'a\n\n\nb'; а потом select col from t; то вы уведите:
a
b
т.е. три пустые строки межу a и b, если вы хотите сохранить само сочетание \n, то нужно писать insert into t set col = 'a\\n\\n\\nb'; Тогда при селекте будет a\n\n\nb, т.к. для того, что бы закодировать слеш в строке его нужно экранировать тем же слешем. Это нормально.