@seredaes

Как правильно хранить json c кирилицей в MySQL?

Впервые столкнулся с такой вот проблемой!
Создаю строку JSON с кириллицей.
json_encode($data);
Вместо кириллицы \uXXX\uXXX
Запихиваю в MySQL и пропадают значки \ остается uXXXuXXX
Никаких экранирующих функций не применяю. Что и как правильно делать?

Я вот так решился сохранять, БД в UTF8,файлы в UTF8, соединение в такой же кодировке.
json_encode($massx,JSON_UNESCAPED_UNICODE);
Насколько это некорректно/опасно?

Заранее спасибо всем ответившим!
  • Вопрос задан
  • 1386 просмотров
Решения вопроса 2
ruFelix
@ruFelix
Предсказание будущего по руке, таро, кофе.
У вас слеши пропадают на уровне php, это видимо можно проверить прогнав str_replace('\\u','\\\\u',json_encode($data));

Глюки на уровне Mysql можно прореветь переведя тип поля в которое пишется json в тип blob, если стало ок, то что то не так с кодировками в базе или соединении с ней.

json_encode($massx,JSON_UNESCAPED_UNICODE); не решит проблему со слэшами, они используются не только для юникода
string.gif

Дополнено:

слеш в строчках служит для написания непечатных/управляющих кодов в виде букв. Это не 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, т.к. для того, что бы закодировать слеш в строке его нужно экранировать тем же слешем. Это нормально.
Ответ написан
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Используйте подготовленные запросы mysqli или PDO, ничего пропадать не будет.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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