当SET NAMES与表的字符集不匹配时会发生什么?

时间:2016-10-25 11:43:48

标签: mysql iso-8859-1 utf8mb4

我有一个表格设置为CHARACTER SET=utf8mb4的数据库,但是我发现mysql连接(SET NAMES)已经latin1

我的问题是:

  1. 该数据会怎样? MySQL是否已将其转换为utf8mb4以存储它,或者将数据存储为latin1
  2. 如果我需要转换它,我应该以{{1​​}}连接以取出数据,转换它,然后将其重新插入,或者以SET NAMES latin1连接以提取数据?

1 个答案:

答案 0 :(得分:3)

数据存储在表格中定义的字符集中,因此在您的情况下,所有数据都将存储在utf8mb4中。

与数据库的每个连接都使用字符集来发送和接收数据。该字符集可能不同,因此mysql在存储字符集和连接字符集之间进行转换。

所以,回答你的问题:

1)mysql转换它。

2)你不需要转换它。但是你需要确保如果你使用set names,你实际上是使用你声称的字符集发送数据。

更多信息:http://dev.mysql.com/doc/refman/5.7/en/charset-connection.html