Mysql 在一个字符集中读取元素并在另一个字符集中读取结果。。。但这并不适合胆小的人,未来的程序员可能会发疯,试图理解代码为什么会这样做
如果使用Python提取数据并将其显示在网页中,您会看到字符串“0”™", 然后,这表明您正在将数据作为UTF-8正确地从数据库中取出,但随后将其放入未正确标识为UTF-8的网页中。可能只是默认为Latin1,如上所述,它实际上是Windows-1252Mysql 在一个字符集中读取元素并在另一个字符集中读取结果。。。但这并不适合胆小的人,未来的程序员可能会发疯,试图理解代码为什么会这样做,mysql,unicode,Mysql,Unicode,如果使用Python提取数据并将其显示在网页中,您会看到字符串“0”™", 然后,这表明您正在将数据作为UTF-8正确地从数据库中取出,但随后将其放入未正确标识为UTF-8的网页中。可能只是默认为Latin1,如上所述,它实际上是Windows-1252 尽管如此,即使您修复了显示,请注意数据库中的数据不好,因为U+99实际上不是UTF-8列中的商标符号。您需要通过读取所有数据,并将U+80到U+9F范围内的任何字符替换为可能的字符来清理数据,前提是数据确实正确Windows-1252。如果您不
ALTER TABLE foo CONVERT to CHARACTER SET…
和ALTER TABLE foo CHARACTER SET…
之间的区别,后者仅更改表格的默认字符集,不会更改任何列,即使它们在创建时设置为默认值。(MySQL只在创建列时使用默认值,它不记得给定的列是“默认”的,也不记得它与表的默认值保持同步。)相关:我在python连接中将字符集设置为utf8——在这一点上,我很确定如果我能弄清楚命令行上发生了什么,我就能在我的代码中得到正确的结果——但我仍然不清楚在基本DB/命令行级别上发生了什么。就是这样。我不确定具体如何处理这个问题知识是否能够解决问题,但我认为这是主要问题。这确实是我在对Scott McClung回答的评论中发现的问题导致我不得不做的事情,但并没有解决mtnviewmark所描述的真正问题。
"Bing® Blang™ Blaow"
"Bing® Blang Blaow"
mysql --default-character-set=utf8
"Bing® Blang™ Blaow"
def character_set_name(*args, **kwargs): return 'utf-8'
conn.character_set_name = new.instancemethod(character_set_name, conn, conn.__class__)