我有一个数据库,表设置为CHARACTER SET=utf8mb4
,但是我发现mysql连接(SET NAMES
)已经latin1
。
我的问题是:
数据怎么了?MySQL是否将其转换为utf8mb4
来存储它,或者将数据存储为latin1
?
如果我需要转换它,我应该连接成SET NAMES latin1
来取出数据、转换数据并将其放回,还是连接成utf8mb4
来取出数据?
最佳答案
数据存储在表中定义的字符集中,因此在您的情况下,所有数据都将存储在utf8mb4
中。
与数据库的每个连接都使用一个字符集来发送和接收数据。该字符集可能不同,因此mysql会在存储字符集和连接字符集之间进行转换。
所以,回答你的问题:
1)mysql转换。
2)不需要转换。但是,您需要确保如果使用set names
,实际上是使用您声明的字符集发送数据。
更多信息:http://dev.mysql.com/doc/refman/5.7/en/charset-connection.html
关于mysql - SET NAMES与表的字符集不匹配时会发生什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40239063/