UTF-8那些事

當數據涉及中文時,咱們通常使用utf-8編碼來解決字符的顯示問題,但光在程序中支持UTF-8有時仍是不夠的,環境及輸入文件的問題也很突出。下面記錄幾個問題及解決方法:mysql

1. JAVA讀取properties文件時第一個屬性老是讀取不到linux

發現這個很奇怪的現象,用vim查看fileenoding是UTF-8,沒有問題。在文件頭插入一行,property就能夠正常讀取到。sql

最後發現仍是properties文件的編碼問題,UTF-8 和 UTF-8 with BOM 的區別,有BOM的文件在文件頭有encoding信息,從而影響到了properties文件的正常解析數據庫

linux環境下通常不須要BOM信息,經過 file 命令能夠查看文件有無BOM信息vim

找到一種移除BOM信息的方法:bash

find . -name info.txt | xargs -I {} sh -c "sed 's/^\xEF\xBB\xBF//' {} > {}.bak」
find . -name info.txt | xargs -I {} sh -c 'mv {}.bak {}'


2. 調用JDBC寫入數據庫後發現數據是亂碼ide

雖然寫入數據庫的字符是正確的UTF-8編碼,數據庫的encoding也是utf8,字符集是utf8_general_ci,最後顯示在數據庫裏面的確實亂碼編碼

緣由是還少了mysql server的配置server

經過mysql command能夠查看當前數據庫的encodingutf-8

mysql> SHOW VARIABLES LIKE '%char%';
+--------------------------+----------------------------+
| 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/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

mysql> SHOW VARIABLES LIKE '%collation%';
+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database   | utf8_general_ci |
| collation_server     | utf8_general_ci |
+----------------------+-----------------+
3 rows in set (0.01 sec)

更改設置的方式是修改數據庫配置文件,個人位置在/etc/mysql/mysql.conf.d/mysqld.cnf,添加配置

[mysqld]
character-set-server = utf8
collation-server = utf8_general_ci

更改後重啓數據庫便可

相關文章
相關標籤/搜索