2016-07-15 77 views
1

使用MySQL,我已经设置我的连接字符集为UTF-8:是否使用SET NAMES,SET CHARACTER SET编码INSERT值?

SET NAMES 'utf8mb4'; 
SET CHARACTER SET 'utf8mb4'; 

这样,我又回到一切为UTF-8,甚至其中有一个latin1_swedish_ci核对表(也有少数)。

当我发送UTF-8 INSERT字符串时,要插入到一个latin1表中,这些值是否会被编码为latin1?

回答

1

优先:为'charset'使用编程语言特定的连接参数。

第二优先级:SET NAMES utf8mb4; - (无需引用)。

列/表上的CHARACTER SET独立此连接/ SET NAMES

连接/ SET NAMES声明客户端中的字节使用了什么编码。 INSERT/SELECT将在该列和表格声明之间转换,因此您的utf8-latin1观察。

“当我发送UTF-8 INSERT字符串时,要插入其中一个latin1表,这些值是否会被编码为latin1?” - 重申,您发送的字节必须根据SET NAMES进行编码。如果可能的话,它们将在表格中正确转换为latin1。我说“如果可能”,因为中文,表情符号等,不能转换为拉丁文1,因为拉丁文1处理一个非常有限的字符集(只适用于西欧)。