我正在尝试从/向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>ελληνικ?</p>
<p> </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" />
如何为utf8格式配置django? 我如何为Emding Greek Chars配置tinymce?
编辑:使用mysql命令更改字段的整理解决问题。
在tiny_mce.js中将entity_encoding
从named
更改为raw
也解决了第二个问题。现在唯一的问题是警告不会消失:(
答案 0 :(得分:1)
在 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,
}
}
答案 1 :(得分:0)
在Django设置文件的charset
设置的utf8mb4
字典中,将OPTIONS
选项设置为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
如果您将different driver用于mysql,则可能需要其他选项。
还要确保在MySQL数据库中,列,表或整个数据库的字符集都设置为utf8mb4
。有关MySQL中字符集的更多信息,请参见:
MySQL文档:Specifying Character Sets and Collations
MySQL文件:The utf8mb4 Character Set (4-Byte UTF-8 Unicode Encoding)
堆栈溢出:What is the difference between utf8mb4 and utf8 charsets in MySQL?
顺便说一句,在Django中,正在进行的拉取请求将utf8mb4
设置为默认值:https://github.com/django/django/pull/8886
答案 2 :(得分: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'