MySql中文亂碼的那些事

當你在插入數(shù)據(jù)或建表后發(fā)現(xiàn)注釋亂碼,你應該通過以下方式進行排查。

  1. 查看MySql編碼格式
show variables like '%char%';

全是latin1,可不就亂碼了,所以你應該通過以下方式進行修改

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';

執(zhí)行了這些命令后,在看下是不是都修改過來了



在插入數(shù)據(jù)之前,記得重啟下MySql服務,否則亂碼問題依舊。如果還未解決,繼續(xù)往下看。

  1. 查看表編碼格式
-- 數(shù)據(jù)庫是 test
show create database test;

修改表數(shù)據(jù)編碼格式

ALTER DATABASE `db_name` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

網(wǎng)上說修改后,命令行亂碼,我用的Navicat工具的命令行沒出現(xiàn)這個問題,如果有這個問題的話,可以在插入語句之前執(zhí)行,set names utf8;

  1. 查看數(shù)據(jù)庫編碼配置
    mysql安裝目錄的默認配置文件my-default.ini,建議這個文件不要動另新建一個my.ini配置文件,mysql會將my-default.ini替換成my.ini,網(wǎng)上看許多博客配置了[client],這個在5.6之后就不需要再配置了,配了也不起作用,而且mysqld中只能使用character_set_serve,而不能使用default_character_set了。
[mysqld]
basedir = mysql安裝目錄
datadir = mysql安裝目錄/data
port = 3306
character_set_server = utf8   #設置服務器端編碼
default-storage-engine = InnoDB
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 
  1. 如何避免中文亂碼
    除了上面數(shù)據(jù)庫方面的設置要統(tǒng)一之外,建表和連接都要統(tǒng)一。
-- 建表
CREATE TABLE `lovego_user` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(25) NOT NULL,
  `age` int(11) DEFAULT NULL,
  `create_date` datetime   NOT NULL,
  `is_active` bit(1) DEFAULT b'1',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
-- 連接
在連接url后面加上?useUnicode=true&characterEncoding=utf8

5.注意要點
我的mysql版本是5.6.35,在命令行設置完編碼,將mysql服務重啟后,發(fā)現(xiàn)編碼又恢復,原因是客戶端工具的編碼問題。
我用的是Navicat Premium工具中的命令行,那你就要注意,工具連接mysql時用的編碼,因為mysql服務器優(yōu)先使用客戶端請求的字符編碼,如果客戶端沒有注明字符編碼,mysql就會使用默認的字符編碼。在工具-編輯連接-高級中可以設置編碼,強烈建議使用自動。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容