mysql
  • django
  • unicode
  • 2017-05-31 68 views 0 likes 
    0

    我将在Django的测试包含Unicode字符线时遇到了此问题时:在MySQL的归类非法混合插入的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的原因是因为我需要支持表情符号:

    Happy Birthday! タクミ! 
    

    回答

    0

    是,utf8mb4是必要的。

    但是错误与latin1有关。这可能指示连接未设置为utf8。

    我paultry笔记表明,Django的配置具有一定的字符集和use_unicode选项。请告诉我们你在那里,特别是如果提供解决方案。

    +0

    我有这样的: '选项':{ '字符集': 'utf8mb4'}, –

    +0

    您可能还需要'use_unicode';我不知道。 –

    相关问题