我有一个字段包含我的MySQL数据库中的字符串表。我在MySQL中的这个unicode字段出了什么问题?
MySQL版本是5.0.51a。该表的默认字符集是'utf8'。
许多字符串都有unicode字符,例如\ xae和\ u21222(分别为注册符号和商标符号)。
例如,假设我有一个字段行此值:
"Bing® Blang™ Blaow"
默认字符集我的mysql命令行客户端的编码是“latin1”。
如果我发出在从命令行MySQL的客户端程序SELECT语句而没有指定字符集的标题的输出显示出来,如下所示:
"Bing® Blang Blaow"
的(R)的符号是正确的,但(TM)符号丢失。如果我将该字符串从控制台剪切并粘贴到TextMate中,则会出现(TM)符号,但在单词“Blang”中位于g后面一半。
我假设在TextMate中只是一个显示错误(尽管如果任何人都可以提供更好的细节,但这不是真正的重要部分)。
我从它的剪切后粘贴行为中推断出的主要原因是数据在数据库中,但某些地方的某种字符集设置有问题。
如果我覆盖了mysql客户端的默认编码,像这样的命令行:
mysql --default-character-set=utf8
然后做同样的选择,串出来的:
"Bing® Blang™ Blaow"
这是(R)和(TM)符号都出现在正确的位置,但两者之前都是unicode字符\ xae,它是一个顶部带有回音的A。 (顺便说一下,这也是我使用python将其展示出来并显示在网页上时显示的数据的方式,这是我真正的问题所在)。
无论如何,这里发生了什么?我们最近做的所有事情都使用了UTF8,但有可能在改变之前插入了其中的一些行,这意味着它们会使用latin1默认值......但是这两种编码似乎都不会产生正确的结果?
如果在表格上的默认编码是latin1时插入行,然后切换到utf8,那么编码已切换(通过alter table ..),那么编码是否会实际更新?如果其中一种编码现在可以工作? unicode会停止踢我的屁股?
相关:http:// stackoverflow .com/questions/1219003 /奇怪字符在mysql-dbase/ – random 2009-08-07 02:58:09