MySQL SET NAMES - 工作机制解释?

时间:2013-05-28 20:29:59

标签: php mysql phpmyadmin

我在将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 ???

(不知道我是否应该全部写下来。如果我放了太多不需要的信息,请编辑它)

1 个答案:

答案 0 :(得分:0)

SET NAMES在呈现给客户之前,有效地设置数据在存储之前或之后被转换的方式。对于存储的情况,列的字符集定义是最终决定因素(如果它与表和数据库字符集定义不同)。请参阅有关encoding in MySQL的这篇内容丰富的博文。