Эти разные команды выполняют разные вещи. И вы даже не делаете все правильные.
Во-первых, если вы используете либо pyMySQL или более поздней версии MySQLdb, пройти charset='utf8'
(обратите внимание, что это 'utf8'
без запятой прилагается!) В качестве аргумента команды connect
. Это означает, что ваше соединение по умолчанию соответствует UTF-8, а также включен режим use_unicode
, и вам не нужно set_character_set
. Это лучшее решение. Вам, очевидно, нужно будет передавать это каждый раз, когда вы открываете соединение, поскольку это аргумент для подключения.
Если ваша библиотека не принимает аргумент charset
, вам нужно будет использовать set_character_set
, и вы должны сделать это сразу же после connect
при каждом подключении. Но опять же, не включайте в себя этот трейлинг ;
.
Во-вторых, если это Python 2.x, как только вы включите use_unicode
, все строки SQL и все строковые параметры SQL должны быть unicode
объекты, а не str
объекты. Вы часто избегаете делать это неправильно (в основном, если они чисты ASCII), но вы не должны зависеть от этого. Это справедливо даже для глобальных, прагма и т. Д. При запуске: используйте u'…'
Юникод-литералы для них тоже.
Между тем, те, первые два SET
должны быть частью того, что ваша база данных библиотеки делает, когда вы передать его charset
аргумент в connect
или вызвать set_character_set
. Вот почему более старая документация иногда говорит, чтобы пройти init_command='SET NAMES utf8'
, если вы не можете пройти charset='utf8'
. Поэтому вам никогда не придется их делать.
Другие три вопроса SET
, конечно, не имеют ничего общего с Unicode в первую очередь. Все они являются командами, которые влияют только на создание новых таблиц, но я понятия не имею, создаете ли вы когда-либо и каковы таблицы в последующих подключениях или только когда база данных изначально создана.
Я не думаю, что есть набор символов с именем '' utf8; ''. – abarnert
@abarnert, Ну, это сработало, поэтому я не смотрел на синтаксис. Но я беру на себя вопрос, что я должен выполнить эти строки, создаю ли я или добавляю. Я прав? – Igor