2019-09-25

[MySQL]匯入sql大檔時遇到 Unknown MySql server host 與匯入時 charset 的問題

其實這是三個問題

  1. 匯入的sql檔中有單筆資料長度過大的問題「got a packet bigger than 'max_allowed_packet' bytes」
  2. 匯入單個大容量sql檔時因為上列的狀況而有的問題「Unknown MySql server host」
  3. 匯入用utf8匯出的單個大容量sql檔時會出現亂碼問題

1的問題比較簡單,其實訊息中就有提到要去修改 [mysqld] 的 max_allowed_packet 大小的設定…我這邊是用 xampp mariadb 10.3.16 x64 的版本,預設的 max_allowed_packet 是 1k ,我直接加到 16m ;

2, 3 的問題是我在匯入一個資料量有 700MB 左右的sql檔遇到的問題,我是用 source 匯入的…總是會在某一筆資料開始就一直出現這個問題,因為過程有 unknown mysql server host 跟出現資料有亂碼的畫面,所以我覺得應該跟 charset 有關…

而我在 1 出現的問題訊息並不是用 source 匯入,而是使用
mysqld -u user dbname < sqlfile.sql
時遇到的…

2, 3 的處理可以先進 mysql cli 輸入
show variables like 'char%';
看一下相關的字元集,我有發現在 xampp mariadb 10.3.16 x64 預設的情況下,會有 big5 出現,所以在 my.ini(或 my.cnf)來設定下列的東西
[mysql]
default-character-set = utf8mb4

[mysqld]
character-set-client-handshake = FALSE
collation-server = utf8mb4_unicode_ci
init-connect = 'SET NAMES utf8mb4'
character-set-server = utf8mb4

[client]
default-character-set = utf8mb4
character-set-client-handshake = FALSE 要記得設定,不然某些字元集不會改變會維持原來的 big5 ,至於 utf8mb4 ,如果你的 mysql(<5.5.3) 比較舊版,可以改用 utf8 就好…但如果已經是比較新版了,建議以後開發都使用 utf8mb4 ,然後 db, table 的 charset 選用 utf8mb4_unicode_ci

*utf8mb4 其實好處就只是支援更多的文字,因為是用 4bytes 來存了,像 emoji 的圖像文字也都可以正確的儲存了;
*utf8mb4_unicode_ci 是因為 unicode_ci 會比較精準,但速度上來說 general_ci 會比較快。

照上述這樣修改後,在用 source 匯入就不會出現 unknown mysql server host 和亂碼的問題,不過…反而出現「Unknown command '\''('\n').」的問題…
但使用 < 的匯入方式就不會出現異常了。

沒有留言: