1366,mysql中的字符串值不正确django或collat​​e或表。

时间:2017-08-01 08:26:54

标签: mysql django collate

在django管理面板中,我尝试使用俄语符号在数据库中添加内容 - 它给了我错误:

(1366, "Incorrect string value: '\\xD0\\xB2\\xD1\\x84\\xD1\\x8B' for column 'name' at row 1")
Request Method: POST
Request URL:    https://giver.md/dev/admin/gift/categoryru/add/
Django Version: 1.10.4
Exception Type: OperationalError
Exception Value:    
(1366, "Incorrect string value: '\\xD0\\xB2\\xD1\\x84\\xD1\\x8B' for column 'name' at row 1")
Exception Location: /home/ubuntu/giver/server/local/lib/python2.7/site-packages/MySQLdb/connections.py in defaulterrorhandler, line 36
Python Executable:  /home/ubuntu/giver/server/bin/python2
Python Version: 2.7.12

我知道,我需要更改排序规则以解决此问题?但是如何使用ubuntu 16整理我的mysql数据库中的表呢? 我试过这个,但这对我没有帮助:

SELECT CONCAT("ALTER TABLE ", TABLE_NAME," COLLATE utf8_general_ci") AS ExecuteTheString
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA="giver"

1 个答案:

答案 0 :(得分:2)

正如您所提到的,您必须更改排序规则。最简单的方法:您可以简单地删除旧数据库并创建一个新的utf8数据库。请注意,删除数据库后,所有表和数据都将消失,因此您必须再次创建表和超级用户。所以:

  1. 创建一个新的utf8数据库:

    CREATE DATABASE <new_database_name> CHARACTER SET utf8;
    
  2. 如果新数据库的名称与旧数据库的名称不同,请不要忘记在app setting.py文件中更改数据库名称!

  3. 创建表格;只需简单迁移:

    $ python manage.py migrate
    
  4. 创建超级用户:

    $ python manage.py createsuperuser
    
  5. 如果您的数据库中有一些重要数据,并且您不想丢失它们,请参阅How to convert an entire MySQL database characterset and collation to UTF-8?

    或者只是使用适当的工具从旧数据库备份数据并将它们导入新的utf8创建的数据库。