Задать вопрос
@seredaes

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

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

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

Заранее спасибо всем ответившим!
  • Вопрос задан
  • 1447 просмотров
Подписаться 1 Оценить 1 комментарий
Помогут разобраться в теме Все курсы
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 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, ничего пропадать не будет.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽