MySQL хранит текст в виде вопросительных знаков (флеш-сервер) - PullRequest
0 голосов
/ 12 мая 2018

Я пытаюсь сохранить иврит в таблице MySQL, но в итоге вижу знаки вопроса.Я использую флеш-сервер Python.Я считаю, что наборы символов и параметры сортировки установлены правильно (вот вывод для запуска 'show create table':

CREATE TABLE some_table (some_field varchar (128) COLLATE utf8mb4_unicode_ci DEFAULT NULL) ENGINE= InnoDB AUTO_INCREMENT = 19 CHARSET ПО УМОЛЧАНИЮ = utf8mb4 COLLATE = utf8mb4_unicode_ci

Мой SQLALCHEMY_DATABASE_URI:

'mysql: // имя пользователя: пароль? Char = локальная база данных / localhost / database'

Данные, которые я вставляю в таблицу, первоначально принимаются в функции представления Python, и я обрабатываю их следующим образом:

data = request.get_json() 
some_field = data['some_field'].encode('utf-8')

Затем я вставляю поле "some_field"Объект в столбце some_field.

Примечание: Когда я пытаюсь распечатать переменную some_field в консоли Python, я также вижу строку с бредом, но я предполагаю, что это потому, что сама консоль не может отображать иврит (не уверен, что этовызывает проблему) ...

Ответы [ 3 ]

0 голосов
/ 18 мая 2018

Не используйте кодирование или декодирование.Придерживайтесь UTF-8, а не Unicode.Я предсказываю, что в конечном итоге вы будете недовольны Юникодом.См. «Знак вопроса» в Проблема с символами UTF-8;я вижу не то, что хранил для обсуждения вероятных причин.

0 голосов
/ 31 августа 2018

Я использую MySQLdb с Flask (python) и столкнулся с тем же (иврит из БД отображается в виде вопросительных знаков ????? )

решил это с помощью следующих шагов:

  1. [ссылка] - Изменить наборы символов для каждого из уровней: БД, Таблица и Столбец!
  2. [ссылка] - SET NAMES 'utf8';
  3. Это то, что, я думаю, имело значение: [ссылка] Аргументы подключения MySQLdB (набор символов). Вот как выглядит моя (Python) строка подключения:

    db = MySQLdb.connect(host="username.mysql.pythonanywhere-services.com",  # your host
                         user="username",  # username
                         passwd="yourpassword",  # password
                         db="db(schema)name", # name of the database
                         charset="utf8",
                         use_unicode=True)
    

Обратите внимание на кодировку и use_unicode , хотя я установил значения по умолчанию, это изменение решило проблему.

Я не уверен, что все предыдущие шаги и оба аргумента были необходимы.

0 голосов
/ 13 мая 2018

Когда я в конце концов попытался визуализировать данные напрямую (а не просто посмотреть их в моей консоли mysql), оказалось, что они были правильно сохранены как юникод. Спасибо @ Амадан

...