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

标签 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"

最佳答案

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

  1. 创建新的 utf8 数据库:

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

  3. 创建表;只需简单地迁移即可:

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

    $ python manage.py createsuperuser
    

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

或者简单地使用适当的工具从旧数据库备份数据并将其导入到新创建的 utf8 数据库中。

关于mysql - 1366, django 或 collat​​e 或 mysql 中的表的字符串值不正确。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45432658/

相关文章:

django - 当已经有ID字段时,如何使UUID字段成为默认字段

list - 将列表划分为groovy中的子列表

sql-server - 如何在 SQL Server 的 JOIN 中使用 COLLATE?

php - MySQL Union 非法混合排序规则

php - 无法使用 MySQLi_connect 连接到 MySQL

mysql - 导轨 : ActiveRecord - Custom SQL

mysql - SQL 搜索未找到所有值

PHP 代码不运行并且不提供任何错误

python - 如何迭代 Django 模型字段,并根据条件添加值

javascript - 如何在输入小部件中放置 x 以清除内容?