4

我正在尝试从/向 Mysql 数据库存储和查看希腊字符。

我想使用 utf8 编码我使用以下命令更改我的数据库:

ALTER DATABASE el CHARACTER SET utf8 COLLATE utf8_general_ci

现在,当我尝试创建文章时,我看到以下错误:

错误页面

当我试图从我的数据库中获取文章时,我看到如下内容:

mysql> select * from article_article
    -> ;
+----+------------+----------+-------------+----------------------------------------------------------------------------------+----------+------+-------+-------+--------------+---------------------+---------------------+-----------+
| id | submenu_id | title    | url         | body                                                                             | image_id | hits | votes | grade | publisher_id | time_upload         | last_modified       | published |
+----+------------+----------+-------------+----------------------------------------------------------------------------------+----------+------+-------+-------+--------------+---------------------+---------------------+-----------+
|  1 |          1 | ???????? | ssss-d-ssss | <p>&epsilon;&lambda;&lambda;&eta;&nu;&iota;&kappa;?</p>
<p>&nbsp;</p>
<p>?</p> |        9 |    0 |     0 |   2.5 |            1 | 2013-04-11 10:39:30 | 2013-04-11 11:02:01 |         1 |
+----+------------+----------+-------------+----------------------------------------------------------------------------------+----------+------+-------+-------+--------------+---------------------+---------------------+-----------+
1 row in set (0.00 sec)

我将tinymce用于bodyfield ..(Tinymce保存希腊字符非常糟糕)

我还检查了管理页面中是否缺少以下内容:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

如何配置 django 为 utf8 格式?我怎样才能正常配置tinymce以使用Emding Greek Chars?

编辑:使用 mysql 命令更改字段的整理可以解决问题。在 tiny_mce.js 中也entity_encoding从更改namedraw解决第二个问题。现在唯一的问题是警告没有消失:(

4

3 回答 3

8

charset选项设置为 Django 设置文件中设置utf8mb4OPTIONS字典:DATABASES

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'my_db',
        'USER': 'my_user',
        'PASSWORD': 'my_pass',
        'HOST': 'my.host',
        'OPTIONS': {
            'charset': 'utf8mb4'  # This is the important line
        }
    }
}

这些选项将作为参数传递给 mysql 驱动程序连接函数,通常是mysqlclient. 在这里,您可以在文档中看到所有这些参数:

https://mysqlclient.readthedocs.io/user_guide.html#functions-and-attributes

但是,如果您为 mysql 使用不同的驱动程序,则可能需要不同的选项。

还要确保在 MySQL 数据库中,列、表或整个数据库的字符集设置为utf8mb4. 有关 MySQL 中字符集的更多信息,请参阅:

MySQL 文档:指定字符集和排序规则
MySQL 文档:utf8mb4 字符集(4 字节 UTF-8 Unicode 编码)
堆栈溢出:MySQL 中的 utf8mb4 和 utf8 字符集有什么区别?

顺便说一句,Django 中有一个正在进行的拉取请求以utf8mb4设置默认值:https ://github.com/django/django/pull/8886

于 2019-04-04T12:54:40.917 回答
2

在 Django 设置文件中:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'OPTIONS': {
            'init_command': "SET NAMES 'utf8mb4';SET sql_mode='STRICT_TRANS_TABLES';",
            'read_default_file': '/platform/auth/mysql.conf',
            'charset': 'utf8mb4',
        },
        'ATOMIC_REQUESTS': True,
    }
}
于 2021-06-11T10:20:56.723 回答
0

gitaarik 上面的回答是正确的,经过一番挖掘后对我有用。我为那些在选项字典中使用单独文件的人添加了这个。像这样:

DATABASES = {
'default': {
    'ENGINE': 'django.db.backends.mysql',
    'OPTIONS': {
        'read_default_file': '/platform/auth/mysql.conf',
        'charset': 'utf8mb4',
    },
    'ATOMIC_REQUESTS': True,
}

这是我的 mysql.conf。直到我删除了 default-character-set 选项,它才起作用。

database = 'xyz_platform'
user = 'xyz'
password = 'xyzpassword'
default-character-set = 'utf8mb4'    

正确的 mysql.conf 是这样的:

database = 'xyz_platform'
user = 'xyz'
password = 'xyzpassword'
于 2021-02-01T15:21:11.657 回答