使用mysqli_query执行INSERT会破坏utf-8编码(转换为问号)

时间:2014-04-12 16:54:50

标签: php mysql utf-8 mysqli

我正在使用两个连接迁移我的数据库(一个连接到旧连接,另一个连接到新连接)。 在我正在执行的两个连接上:

  • mysqli_set_charset($connection, "utf8");
  • mysqli_query($connection, "SET NAMES utf8");

此外,PHP文件使用vim中的以下命令将fileencoding设置为utf-8:

  • :set bomb
  • :set fileencoding=utf-8
  • :wq

源表和目标表都将各自的字段设置为" utf8_general_ci"排序规则。

源代码位于MySql 5.0上,目标位于MySql 5.5

我也在从源代码中提取的内容上使用mysqli_real_escape_string。

上述步骤似乎不起作用,因为unicode数据(以utf-8编码)转换为目标中的问号。我做错了什么?

(另请注意,由于表格结构正在发生变化,我无法直接导入目的地中的数据。)

2 个答案:

答案 0 :(得分:0)

  

源表和目标表都将各自的字段设置为" utf8_general_ci"排序规则。

看起来目的地表没有

答案 1 :(得分:-1)

发现问题:

虽然字段和表格设置为“utf8_general_ci”排序规则,但数据库本身设置为“latin1_swedish_ci”排序规则。

将排序规则更改为“utf8_general_ci”并解决了问题。