最近我的乙個spring boot專案發布到伺服器上的時候,資料庫中的中文字元顯示為??。在網上查詢了相關資料,得知資料庫亂碼有很多種可能情況。下面將我自己的解決方案分享出來。
首先我的雲伺服器是ubuntu server系統。系統預設沒有中文語言包。需要在系統中安裝中文語言包。具體操作如下:
1.執行
sudo apt-get install language-pack-zh-hans
2.執行
lacale -a
檢視系統內安裝的語言環境,此時可以看到出現了zh_cn.utf8,表明語言包已經安裝完成。
3.設定語言環境為utf-8,修改配置檔案。
vim ~/.profile
在其中新增
export lang="zh_cn.utf-8"
export lc_all="zh_cn.utf-8"
然後重啟伺服器。呼叫
locale
命令,可檢視到目前的環境為zh_cn.utf-8。
此時伺服器可以支援中文。
這一步在資料庫建立表的時候設定charset=utf8。例如:
create
table
ifnot
exists
`class` (
`cno` bigint(20) not
null comment '班級編號',
`cname`
varchar(25) not
null comment '班級名',
`cid` bigint(20) not
null comment '教師編號',
`courseid` bigint(20) not
null comment '課程號',
primary
key (`cno`),
unique
key`cno` (`cno`),
key`courseid` (`courseid`),
key`cid` (`cid`),
constraint
`class_ibfk_1`
foreign
key (`courseid`) references
`course` (`id`),
constraint
`class_ibfk_2`
foreign
key (`cid`) references
`user` (`id`)
) engine=innodb default charset=utf8;
關鍵點為最後要設定charset=utf8;
我們這個專案中互動採用的json格式。採用jackson進行解析,預設為utf-8,這裡不用設定。
url: jdbc:mysql://localhost/test?useunicode=true&usessl=false&characterencoding=utf-8
當我在做完上述的操作後,發現直接向資料庫插入資料不會出現亂碼,但是通過介面呼叫向資料庫中插入資料依舊會有亂碼問題。經過排查,發現資料庫server格式沒有設定為utf-8格式。
通過命令檢視資料庫編碼
之前我的character_set_server為latin1,才對導致上述的問題。通過命令可以修改字符集
set character_set_database=utf8;
set character_set_server=utf8;
不過這樣修改的話,當重啟資料庫就會失效。可以採用修改配置檔案的方式來保證一次修改(以下內容基於mysql 5.7)。
修改路徑/etc/mysql/mysql.conf.d/下修改mysqld.cnf檔案。
在檔案中[mysqld]標籤下新增character-set-server=utf8
在mysql 5.7以下的版本,很多部落格都說的是修改my.ini檔案或者my.cnf,這個我沒有實驗過。但在5.7版本,開啟my,cnf可以看到是沒有直接配置的。
引起資料庫亂碼問題的可能情況非常多,要進行思考,找出可能的問題點,再進行測試。確定問題,再去尋找解決方案。
伺服器資料庫編碼格式問題解決方案
伺服器資料庫編碼格式問題 最近做專案在部署到阿里雲伺服器上之後出現了兩個問題 1 亂碼問題。2 ajax的php處理頁面裡面利用j程式設計客棧son encode 函式返回json資料,則資料庫返回的資料只能是utf8,如果是gbk則json也無法返回。發現是資料庫編碼格式問題,使用的編碼格式為ut...
關於MYSQL資料庫亂碼問題解決方案
1.檢視mysql資料庫編碼 show variables like char 2.編碼解釋 character set client mysql使用該編碼來解讀客戶端傳送過來的資料,例如該編碼為utf8,那麼如果客戶端傳送過來的資料不是utf8,那麼就會出現亂碼 character set res...
資料庫 中文漢字亂碼問題解決方案
1.通過控制台或者連線資料庫工具輸入如下命令檢視資料庫的編碼 show variables like character 顯示效果 客戶端的字符集 character set results 結果字符集 character set connection 連線字符集 這三個系統引數的作用 資訊輸入路徑...