【问题标题】:Set UTF8 on mySQL在 mySQL 上设置 UTF8
【发布时间】:2014-01-28 04:47:50
【问题描述】:

所有,

我正在尝试从 Python 脚本实现 mySQL 通信。这是我所拥有的:

try:
   if append:
      self.conn = MySQLdb.connect(.....)
      self.cur = self.conn.cursor()
   else:
      self.conn = MySQLdb.connect(.....)
      self.cur = self.conn.cursor()
   self.conn.set_character_set('utf8;')
   self.cur.execute('SET NAMES utf8;')
   self.cur.execute('SET character_set_connection=utf8;')
   self.cur.execute('SET GLOBAL innodb_large_prefix=ON')
   self.cur.execute('SET GLOBAL innodb_file_format=barracuda')
   self.cur.execute('SET GLOBAL innodb_file_per_table=ON')
# Database and table creation

现在我的问题是:我应该为每个连接运行这个 utf8 和“SET..”查询还是只在创建数据库时运行?

谢谢。

【问题讨论】:

  • 我不认为有一个名为'utf8;'的字符集。
  • @abarnert,它工作得很好,所以我没有看语法。但我对这个问题的看法是,无论我是创建还是添加,我都应该执行这些行。我说的对吗?

标签: python mysql utf-8


【解决方案1】:

这些不同的命令做不同的事情。而且你甚至没有做所有正确的事情。

首先,如果您使用的是 pyMySQL 或更高版本的 MySQLdb,请将 charset='utf8'(注意,'utf8' 没有附加分号!)作为参数传递给 connect 命令。这意味着您的连接默认为 UTF-8,并且还启用了use_unicode 模式,您不需要set_character_set。这是一个更好的解决方案。显然,每次打开连接时都需要传递它,因为它是连接的参数。

如果您的库不接受charset 参数,那么您将不得不使用set_character_set,并且您应该在每次连接时立即使用connect。但同样,不要在此处包含结尾的 ;。

其次,如果这是 Python 2.x,一旦启用 use_unicode,all SQL 字符串和 all 字符串值 SQL 参数应该是 unicode 对象,而不是 str 对象。你经常会因为没有正确地做到这一点而侥幸(基本上,如果它们是纯 ASCII 的话),但你不应该依赖它。即使对于全局、pragma 等启动时的语句也是如此:对这些语句也使用 u'…' Unicode 文字。

同时,当您将charset 参数传递给connect 或调用set_character_set 时,前两个SET 应该是数据库库的一部分。这就是为什么如果你不能通过charset='utf8',旧文档有时会说通过init_command='SET NAMES utf8'。所以,你永远不需要这样做。

其他三个SET 查询当然首先与Unicode 无关。它们都是只影响新表创建的命令,但我不知道您是否曾经在后续连接中创建和删除表,或者仅在最初创建数据库时创建和删除表。

【讨论】:

  • 感谢您的解释。几个跟进: 1. 我怎么知道 MySQLDB 版本? 2. 你的第一句话使用的最低版本是多少? 3.也许为了兼容性起见总是使用“set_character_set”? 4. 最后 3 个查询 - 即使不会创建新表,它们也会执行,对吗?
  • 如果你知道还有一件事:Windows 上 mySQL 连接的默认编码是什么(本地客户端和服务器 - 开发版本)?
  • 还有一个 - 我应该在哪里启用“use_unicode”?我现在正在使用 Windows XP 进行开发。希望最后一个 - 前 2 个 SET 命令是额外的,因为它们将执行 set_character_set 将执行的操作,因此不需要它们,对吗?
猜你喜欢
  • 2020-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-04
  • 2011-03-23
  • 1970-01-01
相关资源
最近更新 更多