我有一个数据库,其中所有文本字段和表均已将'utf8'明确指定为默认字符集,但是此数据库中的数据存储为'cp1257'。我只能在使用SET NAMES 'cp1257'
或\C cp1257
时显示符号。尝试在没有这些指令的情况下显示它们会失败,因为它试图以'utf8'(?)的形式获取数据。我该怎么做才能将数据库的所有数据(可能是备份)获取为“ cp1257”并将其作为有效的“ utf8”放回去?
最佳答案
您需要先将它们转换为二进制字段,然后将该字段设置为cp1257。这样,MySQL就会知道该字段存储在哪个字符集中:
ALTER TABLE CHANGE `field` `field` BLOB;
ALTER TABLE CHANGE `field` `field` TEXT CHARACTER SET 'cp1257';
如果要更改数据的存储方式,现在可以将字段转换为任何字符集(MySQL将在此步骤中进行数据转换):
ALTER TABLE CHANGE `field` `field` TEXT CHARACTER SET 'utf8';