首頁 > 運維 > Docker > docker mysql 中文亂碼

docker mysql 中文亂碼

WBOY
發布: 2023-05-13 17:08:08
原創
1671 人瀏覽過

在使用Docker容器部署MySQL資料庫時,有時會出現中文亂碼的情況。這是因為MySQL預設字元集為Latin1,而中文字元需要使用UTF-8編碼。本文將介紹如何解決docker mysql中文亂碼問題。

一、檢視目前MySQL字元集

首先,我們要先查看目前MySQL的字元集。可以透過登入MySQL後使用以下指令:

mysql> show variables like '%char%';
登入後複製

其中,字元集相關的變數有:

  • character_set_client:客戶端字元集,也就是連接MySQL的客戶端所使用的字元集;
  • character_set_connection:連接字元集,也就是伺服器與客戶端之間的字元集;
  • character_set_database:資料庫字元集,新建立的資料庫會按此字元集建立;
  • character_set_results:結果字元集,SELECT查詢傳回的結果所使用的字元集;
  • character_set_server:伺服器字元集,MySQL伺服器本身所使用的字元集。

二、修改MySQL字元集為UTF-8

查看到目前MySQL字元集為Latin1後,我們需要修改為UTF-8。可以透過以下兩種方式實現:

  1. 修改MySQL設定檔

#在MySQL設定檔中(通常是/etc/my.cnf或/etc/mysql/ my.cnf),新增以下兩行內容:

[client]
default-character-set=utf8

[mysqld]
character-set-server=utf8
登入後複製

其中,[client]用於設定客戶端字元集為UTF-8,[mysqld]用於設定伺服器字元集為UTF-8。修改完成後重新啟動MySQL服務:

sudo service mysql restart
登入後複製
  1. 連接MySQL後修改字元集

如果無法修改MySQL設定文件,可以在連接MySQL後手動修改字元集。可以透過以下命令連接到MySQL:

mysql --default-character-set=utf8 -u用户名 -p密码 数据库名
登入後複製

連接成功後,依序執行以下命令修改字元集:

SET character_set_client = utf8;
SET character_set_connection = utf8;
SET character_set_database = utf8;
SET character_set_results = utf8;
SET character_set_server = utf8;
登入後複製

修改完成後,登出MySQL,再次登入即可生效。

三、在Docker容器中使用UTF-8字元集

由於Docker容器中的MySQL是基於映像運行的,因此我們需要在映像中設定UTF-8字元集。可以透過以下Dockerfile來建構MySQL映像:

FROM mysql:latest
ENV MYSQL_ROOT_PASSWORD=root
ENV MYSQL_DATABASE=test
ENV MYSQL_CHARSET=utf8
ENV MYSQL_COLLATION=utf8_general_ci
COPY ./init.sql /docker-entrypoint-initdb.d/
登入後複製

其中,ENV指令用於設定環境變量,MYSQL_CHARSET用於設定MySQL字元集為UTF-8,MYSQL_COLLATION用於設定排序規則為utf8_general_ci。這裡也透過COPY指令將初始化腳本init.sql複製到鏡像中,用於在啟動容器時自動執行。

四、總結

透過以上三個步驟,我們可以在Docker容器中使用MySQL,並且設定字元集為UTF-8,避免中文亂碼的問題。當然,如果需要處理多語言字元集,還需根據具體情況進行調整。希望該文章能對大家有幫助。

以上是docker mysql 中文亂碼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板