作者ggreeaart (Great)
看板Linux
標題[問題] 關於big5轉utf8的問題
時間Tue Mar 5 12:13:22 2019
是這樣的。
因為各種網路建言
想把上古時代完全沒有宣告編碼的Mysql+big5 server全部改成utf8編碼
但是在dump&reload的時候碰壁
目前是已經成功用各種偏方
可以看到dump出來的.sql裡面有顯示正確中文
(那個把.sql先用latin1 reload回Mysql
再重新用latin1 dump出來讓Mysql當翻譯官的神奇辦法)
但是把這份.sql iconv成utf8並且把內文latin1 sed 成 utf8之後
再reload回character_set已經重新設定成utf8的Mysql時出現了亂碼
檢查local之後總覺得好像不太對勁
想貼上來請大大幫忙判斷一下是哪邊出了什麼問題
以下為舊系統配置
CentOS release 5.5 (Final)
$ locale
LANG=zh_TW.BIG5
LC_CTYPE=en_US.ISO8859-1
LC_NUMERIC="zh_TW.BIG5"
LC_TIME="zh_TW.BIG5"
LC_COLLATE="zh_TW.BIG5"
LC_MONETARY="zh_TW.BIG5"
LC_MESSAGES="zh_TW.BIG5"
LC_PAPER="zh_TW.BIG5"
LC_NAME="zh_TW.BIG5"
LC_ADDRESS="zh_TW.BIG5"
LC_TELEPHONE="zh_TW.BIG5"
LC_MEASUREMENT="zh_TW.BIG5"
LC_IDENTIFICATION="zh_TW.BIG5"
LC_ALL=
$ file dump_utf8mb4.sql
dump_utf8mb4.sql: ASCII text, with very long lines
encoding=latin1
fileencoding=
mysql> show variables like 'character%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
mysql> show variables like 'colla%';
+----------------------+-------------------+
| Variable_name | Value |
+----------------------+-------------------+
| collation_connection | latin1_swedish_ci |
| collation_database | latin1_swedish_ci |
| collation_server | latin1_swedish_ci |
+----------------------+-------------------+
以下為新系統配置
CentOS Linux release 7.6.1810 (Core)
$ locale
LANG=en_US.UTF-8
LC_CTYPE=en_US.ISO8859-1
LC_NUMERIC=en_US.UTF-8
LC_TIME=en_US.UTF-8
LC_COLLATE=en_US.UTF-8
LC_MONETARY=en_US.UTF-8
LC_MESSAGES=en_US.UTF-8
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
文件屬性
$ file dump_utf8mb4.sql
dump_utf8mb4.sql: ASCII text, with very long lines
encoding=latin1
fileencoding=utf-8
Mysql 編碼設置
mysql> show variables like 'character%';
+--------------------------+--------------------------------+
| Variable_name | Value |
+--------------------------+--------------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql-8.0/charsets/ |
+--------------------------+--------------------------------+
mysql> show variables like 'colla%';
+----------------------+-----------------+
| Variable_name | Value |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database | utf8_unicode_ci |
| collation_server | utf8_unicode_ci |
+----------------------+-----------------+
在新系統配置下目前.sql文件是可以看到正確顯示的中文
但那個
LC_CTYPE=en_US.ISO8859-1
我怎麼看都覺得怪怪
有沒有大神知道我要怎麼改.sql文件編碼和系統編碼
才可以再reload到新系統Mysql的時候可以正確顯示中文
拜託各位大神了
謝謝各位大神m(_ _)m
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.34.59.173
※ 文章網址: https://www.ptt.cc/bbs/Linux/M.1551759207.A.CE4.html
→ kenduest: 哪邊看到亂碼?截圖一下 ?03/05 12:55
→ kenduest: 題外話請用 utf8mb4 而不要再用 utf8, 表情符號才支援03/05 12:56
手上的東西是敏感資料所以不能貼QQ
目前的問題簡單來說
原文新配置下看文件顯示正確中文
LC_CTYPE=en_US.UTF-8
的時候看文件,中文會顯示亂碼
以及
將文件以 --default-character-set=utf8
或latin1或不設定,load到DB裡面
(DB的 default charset utf8或 latin1)
共六種設定組合
用mysql -u -p 進去
看table,中文都是顯示亂碼
※ 編輯: ggreeaart (101.12.5.98), 03/05/2019 13:59:40
→ LINGZ: 在開發測試環境生測試資料都不能貼?-_- 03/05 14:02