将unicode插入数据库时​​,在MySQL中非法混合排序

时间:2017-05-31 16:21:42

标签: mysql django unicode

在django测试期间插入包含unicode字符的行时,我遇到了这个错误:

InternalError: (1267, u"Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8mb4_general_ci,COERCIBLE) for operation '='")

罪魁祸首:

نعليقات و

现在我做了一些研究,建议我这样做:

SET collation_connection = 'utf8_general_ci'
ALTER DATABASE your_database_name CHARACTER SET utf8 COLLATE utf8_general_ci
ALTER TABLE your_table_name CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci

我按照这个例子在django中做了这个:

cursor = connection.cursor()
cursor.execute('SHOW TABLES')
results = []
for row in cursor.fetchall():
    results.append(row)
cursor.execute(
    'ALTER DATABASE mydb CHARACTER SET utf8mb4 '
    'COLLATE utf8mb4_general_ci;')
for row in results:
    cursor.execute(
        'ALTER TABLE %s CONVERT TO CHARACTER SET utf8mb4 '
        'COLLATE utf8mb4_general_ci;' % (row[0]))

注意:我之所以需要mb4是因为我需要支持emojis:

Happy Birthday! タクミ!

1 个答案:

答案 0 :(得分:0)

是的,utf8mb4是必要的。

但该错误与latin1有关。此可能表示连接未设置为utf8。

我的paultry笔记表明Django配置有一些charset和use_unicode选项。请告诉我们你在那里有什么,特别是如果它提供了解决方案。