Укажите character_set_client как набор символов по умолчанию для таблицы в MySQL

Проблема заключается в этой части:

`value`

В Python 2.x, это означало то же, что и repr(value) . Гвидо называл это самой большой ошибкой синтаксиса в Python. По-видимому, это никогда не осуждали, просто зарывали в документах, где никто их никогда не заметит. Но неудивительно, что Python 3 немедленно удалил его с помощью этого краткого объяснения:

Удалены обратные обратные (вместо этого используйте repr()).

Итак, вы можете исправить это следующим образом:

assert (type(value) == int), "value %s is not an int" % repr(value)

Но на самом деле это именно то, что %r для:

assert (type(value) == int), "value %r is not an int" % value

Из printf -style String Formatting docs:

  • 'r' String (преобразует любой объект Python с помощью repr()). (5)
  • 's' String (преобразует любой объект Python с помощью str()). (5)

С этим изменением эта строка теперь действует как Python 2.7, так и Python 3.6 (и 2.1 и 3.8pre, если на то пошло).


Если вам повезет, это просто означает, что ваш учитель не совсем поймал все, обновляя свои уроки и задания для Python 3, и он больше не появится. (Хотя вы должны указать это на них.)

Но если ваш учитель на самом деле учит Python 2, а не Python 3, вам, вероятно, нужно будет использовать Python 2.7 вместо 3.6, или у вас будет много больше проблем.


Если вы используете Python 3, и вы не хотите изучать форматирование printf -типов, просто обновите его:

assert (type(value) == int), f"value {value!r} is not an int"

1
задан Akhil Prajapati 18 January 2019 в 18:08
поделиться

1 ответ

Вы должны сделать это с помощью динамического SQL. Вы не можете использовать переменные непосредственно в операторе CREATE TABLE.

SET @sql = CONCAT('CREATE TABLE ... DEFAULT CHARSET=', @@character_set_client);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

Однако, мне интересно, почему ты это делаешь. Я бы обычно позволял таблице charset по умолчанию использовать charset для схемы. Кажется странным использовать клиентскую кодировку.

0
ответ дан Bill Karwin 18 January 2019 в 18:08
поделиться
Другие вопросы по тегам:

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