在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! タクミ!
答案 0 :(得分:0)
是的,utf8mb4是必要的。
但该错误与latin1
有关。此可能表示连接未设置为utf8。
我的paultry笔记表明Django配置有一些charset和use_unicode选项。请告诉我们你在那里有什么,特别是如果它提供了解决方案。