問題背景
在對MySQL數據庫進行操作時,有時會出現字符集不兼容的問題,需要對數據庫的編碼進行修改。然而,在使用MySQL5.7版本進行編碼修改時,卻發現修改無效的情況。以下是具體情況和解決辦法。
問題描述
按照通常的做法,我們需要修改MySQL數據庫的編碼類型。具體操作為:進入MySQL的配置文件my.cnf,在[mysqld]下加入編碼配置,如下例:
[mysqld]
collation-server=utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server=utf8
然而,使用此方法進行編碼修改時,可能會發現并沒有生效,實際上MySQL數據庫的編碼類型并沒有發生變化。這是由于MySQL不允許在運行時修改全局的character_set_*和collation_*系統變量。
解決辦法
為了解決MySQL5.7版本編碼修改無效的問題,我們需要采取不同的方法,在數據庫初始化時指定編碼類型。
具體操作如下:
1. 停止MySQL服務
2. 修改MySQL的啟動腳本,如/etc/init.d/mysql:
[mysqld]
collation-server=utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server=utf8
3. 啟動MySQL
這樣,MySQL數據庫在初始化的時候會讀取啟動腳本中的編碼配置,并使用該編碼類型。
總結
MySQL5.7版本在編碼修改時,不能使用原有的方法進行全局編碼設置,需要在初始化時指定編碼類型。通過修改MySQL的啟動腳本,可以解決編碼設置無效的問題。