在MySQL中更正错误的字符编码
有时,尤其是将数据从一台服务器移动到另一台服务器时,您可能会发现自己对MySQL数据库的编码不正确。如果您将数据库编码为一个字符集,并且将网站设置为以另一个字符集显示,则首先显示此问题。在这种情况下,您会发现文本中出现奇怪的字符,尤其是在使用标点符号时。如果您无法或不愿意在站点上更改字符编码,则需要更改数据库中数据的编码方式。
您可能想做的最常见的事情是将iso-8859-1(或Windows-1252)更改为UTF-8。这可以通过以下两种方法之一来完成。
第一种方法是简单地更改表,以使该列包含不同的字符集。
ALTERTABLETABLEMODIFYcol1VARCHAR(50)CHARACTERSET'utf8';
但是,如果已经建立了数据库并且以错误的格式插入了数据,则还可以使用CONVERT命令更新列中的数据。以下代码片段将我们的latin1数据转换为未编码的二进制数据,然后转换为utf8。
UPDATETABLESETcol1=CONVERT(CONVERT(CONVERT(col1USING'latin1')USINGBINARY)USING'utf8');
您还应确保通过特定字符集完成与数据库的连接。这是通过使用SETNAMES命令和SETCHARACTERSET完成的。
SET NAMES 'charset_name' SET CHARACTER SET 'charset_name';
这两个命令基本上在MySQL数据库中设置了一些值,有关设置内容的更多信息,请参见MySQL网站上的“连接字符集和排序规则”页面。这样可以确保我们从数据库中获取的数据也位于正确的字符集中。
有关MySQL中可用的不同字符集的完整列表,只需运行以下命令:
SHOWCHARACTERSET;
这将显示一个包含列Charset,Description,Defaultcollation和Maxlen的表格。每个字符集都与一个排序规则相关联。归类是一组用于比较字符集中的字符的规则,因此,如果希望数据库正常工作,则必须正确设置此规则,这一点很重要。排序规则的完整列表可以使用以下命令查看:
SHOWCOLLATION;
您甚至可以使用LIKE语句将整理数据精炼为所需的信息。
SHOWCOLLATIONWHERECharsetLIKE'%utf%'