亂碼問題可能出現的三個地方
1.程序連接的編碼要設置
jdbc:mysql://192.168.1.1:8066/TESTDB?useUnicode=true&characterEncoding=utf8
2. mysql數據庫的編碼要設置
1) 查看mysql server級別的編碼集
首先進入mysql使用命令:
mysql -uroot –p
然后 執行命令查看:
show variables like 'character%'
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | NULL |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
編輯/etc/mysql/my.cf文件
在[client]下添加
default-character-set=utf8
在[mysqld] 下添加
character_set_server=utf8 (如果重啟mysql出錯調整位置,在[mysqld] 最下面)
我機器上是這樣配置的:
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
character-set-server=utf8
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
注:[mysqld]處也可使用default-character-set=utf8,如果啟動mysql服務出錯的話,就使用character_set_server=utf8。
2) 查看數據庫級別的編碼是不是一致的,使用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/charsets/ |
+--------------------------+----------------------------+
3. mycat的編碼
默認的是utf8格式的,明確指定在server.xml下的system標簽下添加格式如下:
<property name="charset">utf8</property>
4. 如果業務需要utf8mb4 等復雜字符集配置對應修改:
默認的是utf8格式的,明確指定在server.xml下的system標簽下添加格式如下:
<property name="charset">utf8mb4</property>
然后根據數據庫端的字符集ID配置mycat的字符集序列:
配置conf/index_to_charset.properties
對應為字符集ID=字符集
比如45=utf8mb4
上述四點配置的編碼一致的話亂碼就不會出現了。