mysql 5.5 utf-8 排序规则 utf8_unicode_ci, pymysql
Posted
技术标签:
【中文标题】mysql 5.5 utf-8 排序规则 utf8_unicode_ci, pymysql【英文标题】:mysql 5.5 utf-8 collation utf8_unicode_ci, pymysql 【发布时间】:2012-09-14 20:48:04 【问题描述】:我在 os x 上遇到了 mysql 5.5 的问题。我正在做一个多语言项目 并使用 MyISAM 表。默认字符集是 utf-8,默认排序规则是 utf8_unicode_ci。
意大利语和德语都可以,但西班牙语不行。我正在使用 python 来操作数据, pymysql 驱动程序,字符集选项为 utf-8 和 unicode true。
几乎所有特定的西班牙字母都是一团糟。
来自 python 外壳:
>>>r
>>>['Blas P\xc3\xa9rez Gonz\xc3\xa1lez, 4']
>>>print[0]
>>>Blas Pérez González, 4
after saving it to database and fetching it again:
>>>r
>>>(u'Blas P\xc3\xa9rez Gonz\xc3\xa1lez, 4')
>>>print r[0]
>>>Blas Pérez González, 4
我真的一头雾水,明明好像是同一个unicode字符串!
谢谢。
【问题讨论】:
为什么第一个字符串前面没有'u'(作为第二个?) 感谢您的回答,但更详细的解释将帮助我理解 :) 【参考方案1】:最好使用 java 风格的 unicode 转义,比如
u'\\u0e4f\\u032f\\u0361\\u0e4f'.decode('unicode-escape')
见similar question。
这样可以确保字符串中包含 unicode。
然后实际问题:在mysql中试试describe the_table
。还是在column definition可以设置字符集。试试看你的桌子是否还好。
用于测试:将u'Blas P\\u00e9rez Gonz\\u00e1lez'.decode('unicode-escape')
存储在数据库中。
然后你就知道存储了正确的 unicode 字符串。
如果数据库有正确的 db/table/field 定义,可能只有检索而不是存储有问题。
【讨论】:
请多解释一下。在我能够首先解码当前格式之前,我无法以任何其他格式对字符串进行编码。 好吧,非常感谢,这似乎是问题,至少将字符串保存为 java 风格的 unicode 并再次检索它会以正确的方式显示:u'Blas P\xe9rez Gonz\ xe1lez',不使用 java 样式是 u'Blas P\xc3\xa9rez Gonz\xc3\xa1lez, 4'。我现在的问题是如何从数据库中检索所有错误的记录,将其转换为 java 样式并再次保存。我在谷歌上搜索了一段时间,不幸的是没有成功 让我感到困惑的是: print 'Blas P\xc3\xa9rez Gonz\xc3\xa1lez, 4' 它将正确显示,但 print u'Blas P\xc3\xa9rez Gonz\xc3\xa1lez, 4' 不是,如果 type unicode(u'Blas Pérez gonzález').encode('utf-8') return 'Blas P\xc3\xa9rez Gonz\xc3\xa1lez' 我想它没有正确编码,为什么?跨度> 编辑/显示的字符 (é
) 取决于编辑器/查看器/平台的编码。不幸的是,我目前只有一个 UTF-8 系统,没有 Python 编码经验。见u.encode。以上是关于mysql 5.5 utf-8 排序规则 utf8_unicode_ci, pymysql的主要内容,如果未能解决你的问题,请参考以下文章