【问题标题】:InternalError(1267, "Illegal mix of collations (greek_general_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation 'like'")InternalError(1267,“排序规则(greek_general_ci,IMPLICIT)和(utf8_general_ci,COERCIBLE)的非法混合用于操作'like'”)
【发布时间】:2016-09-17 16:25:38
【问题描述】:

我知道这个话题已经完全回答了,但我的问题有点不同。我在 python 代码和 html 文件中与 mysqldb 建立的连接都设置为 utf8 默认字符集。

    conn = pymysql.connect(host='myhost', port=3306, user='user1',passwd='******', db='mydb', charset='utf8')

问题不断出现,所以我必须检查我的数据库记录是否都使用相同的编码,并且它们都使用 utf8。
当我在我的 html 搜索表单中插入希腊输入时出现问题,但是如果按下表单的提交按钮并输入空白,它会很好地显示希腊记录。我还使用了我的 html 文件中可用的每个接受字符集 <head><meta>

    <meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> 
    <form accept-charset="UTF-8">
    </form>
    </meta>

还有其他方法可以确保表单输入是 utf8 吗?我对数据库非常陌生,因此我非常感谢任何形式的帮助。

【问题讨论】:

  • 你的表也应该在 phpMySql 中设置为 UTF8
  • &lt;/meta&gt; 在您的源代码中做了什么?
  • 您能告诉我们导致问题的 SQL 语句吗? &lt;form&gt; 不在图片中。
  • 你能写 Python 代码来转储有问题的文本吗?

标签: html mysql input utf-8 collation


【解决方案1】:

CHARACTER SET utf8(或utf8mb4)中,ΑΒΓΔ 是十六进制的CE91 CE92 CE93 CE94。在CHARACTER SET greek 中,是十六进制的C1 C2 C3 C4

从 Python 中转储文本,看看你得到了什么。转储 MySQL 表以查看存储的内容:

SELECT col, HEX(col) FROM ...

注意greek中,每个字母为一个字节;在utf8中,每个字母是两个字节,比如'CExx'。

for i, c in enumerate(u):
    print i, '%04x' % ord(c), unicodedata.category(c),
    print unicodedata.name(c)

在 Python 源代码中,源代码中的第 1 行或第 2 行(在代码中使用 utf8 编码的文字):

# -*- coding: utf-8 -*- 

More random python notes.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-16
    • 2010-10-30
    • 1970-01-01
    • 2023-03-21
    • 2010-09-16
    • 2015-06-03
    • 2016-02-19
    • 2016-06-14
    相关资源
    最近更新 更多