我在将latin1_swedish数据库导入新数据库时遇到了问题。 Somone使Latin1数据库存储Latin2字符。在我进行数据库转储并希望将其导入另一个数据库之前,它一直在工作。
真的很复杂。最后,我将sql转储更正为正确的ISO-8859-2编码文件,所有字符都正确显示。仍然导入到具有Latin2编码的表中不起作用,所有特殊字符都丢失了(可能是PHPMyAdmin错误?)。
将文件转换为UTF-8编码并将表格编码更改为utf8_general_ci正确导入所有内容。
接下来,整个PHP站点使用并显示ISO-8859-2字符(旧的PHPBB论坛)。
连接数据库时,我使用“SET NAMES latin2”命令更改编码。
令我惊讶的是,页面显示为正确的ISO-8859-2。
如果table是UTF-8且Set name是latin2。在返回之前,MySQL连接是否将字符转换为ISO-8859-2 ???
(不知道我是否应该全部写下来。如果我放了太多不需要的信息,请编辑它)
答案 0 :(得分:0)
SET NAMES在呈现给客户之前,有效地设置数据在存储之前或之后被转换的方式。对于存储的情况,列的字符集定义是最终决定因素(如果它与表和数据库字符集定义不同)。请参阅有关encoding in MySQL的这篇内容丰富的博文。