【问题标题】:Telling MySQL connection to use UTF-8 with Django告诉 MySQL 连接在 Django 中使用 UTF-8
【发布时间】:2011-08-23 08:32:39
【问题描述】:

我已经使用 UTF8 编码将一些数据上传到 MySQL(对于 osx10.6 为 5.5.15)数据库,但由于某种原因,我在加载它时必须将其编码指定为 latin1。

我认为这部分很好,因为当我写入 OUTFILE 时,我的 unicode 'nu' 字符在终端和 Vim 中都可以正常显示。

但是,当我在 MySQL 会话中查看它们时,并且当我尝试从 Django admin 编辑字段时,我得到了错位字符(latin1?)。

所以,我的问题是:如何告诉 MySQL 客户端和(尤其是)Django 以 UTF-8 格式读取我的数据库,它应该采用的方式?

在命令行,我试过了

--default_character_set=utf8 

还有

'SET NAMES UTF8;'

在 MySQL 提示符下,但它们不起作用。

当我查看 VARIABLES LIKE 'char%' 时,除了 latin1 的 character_set_server 之外,它们都设置为 utf8。如果我将它设置为 utf8.... 那也不起作用。

如果有人能在这里给我一些指点,我将不胜感激,尤其是关于如何配置 Django 以正确地与我的数据库对话。

谢谢!

【问题讨论】:

  • 加载时必须指定 latin1 是什么意思?通常,您应该在创建数据库时指定 UTF-8:“CREATE DATABASE dbname CHARACTER SET utf8 COLLATE utf8_general_ci;”
  • 数据库本身是 utf-8,排序规则 utf_unicode_ci,但是如果我 LOAD DATA LOCAL INFILE '' INTO TABLE CHARACTER SET utf8 我得到问号,并且根据其他地方的各种帖子在互联网上,如果我指定(不正确的)'CHARACTER SET latin1',它似乎只使用正确的编码上传。非常混乱。

标签: mysql django unicode utf-8


【解决方案1】:

添加您的.cnf:

[mysqld]
character-set-server = utf8
collation-server     = utf8_general_ci
skip-character-set-client-handshake

【讨论】:

  • 我在 /etc/my.cnf 中有这个(使用 utf_unicode_ci 用于 collat​​ion_server),但它似乎不起作用(尽管它确实将 character_set_server 设置为 utf8)。我很困惑……
  • 你是如何安装 MySQL 的?我怀疑它使用了其他 /etc/my.cnf 配置文件。
猜你喜欢
  • 2014-05-27
  • 1970-01-01
  • 1970-01-01
  • 2012-03-05
  • 2015-06-06
  • 2012-04-21
  • 1970-01-01
  • 1970-01-01
  • 2023-03-07
相关资源
最近更新 更多