2016-07-15 79 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處理一個非常有限的字符集(只適用於西歐)。