MySQL字符集設置—MySQL數(shù)據(jù)庫亂碼問題
需要修改my.ini( my.cnf)
[client]
default-character-set=utf8mb4
[mysqld]
character-set-client-handshake = false
character_set_server = utf8mb4
collation_server = utf8mb4_bin
init_connect='set names utf8mb4'
[mysqldump]
character_set_client=utf8mb4
[mysql]
default-character-set=utf8mb4
查看是否修改成功的方法:
Mysql執(zhí)行:
show variables like 'version';
show variables like '%character%';
show variables like 'collation%';
結果如下圖
大家觀察看,charater_set_system還是utf8,show variables 看下,但是它應是個只讀變量。這個是系統(tǒng)的字符集,修改不了。所以,這個值不可配置,是硬編碼的,和OS是緊密在一起的,不需要關注。
查看庫的字符集
語法:show database status from 庫名 like 表名;
mysql> show create database shiyan\G*************************** 1. row *************************** Database: shiyanCreate Database: CREATE DATABASE `shiyan` /*!40100 DEFAULT CHARACTER SET gbk */1 row in set (0.00 sec)
4.查看表的字符集
語法:show table status from 庫名 like 表名;
mysql> show table status from class_7 like 'test_info';
5.查看表中所有列的字符集
語法:show full columns from 表名;
mysql> show full columns from test_info;
init_connect的作用
init_connect通常用于:當一個連接進來時,做一些操作,比如設置autocommit為0,比如記錄當前連接的ip來源和用戶等信息到一個新表里,當做登陸日志信息
1.設定字符集:
init_connect='set autocommit=0; set names gbk;'
使用init_connect的注意點
1 只有超級賬戶才可以設置(super_priv權限)
2 超級賬戶無視init_connect設置(即init_connect的設置對來自超級賬戶的連接不生效)
在我們創(chuàng)建mysql數(shù)據(jù)庫的時候我們經(jīng)常會用到這句SQL:CREATE DATABASE `test` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci。
那么這句sql的每一部分分別代表著什么?又有什么意義?在看了網(wǎng)上很多資料后想總結下。
我們將這句sql劃分為三段:CREATE DATABASE `test` , DEFAULT CHARACTER SET utf8, COLLATE utf8_general_ci。
CREATE DATABASE `test` : 代表的是創(chuàng)建數(shù)據(jù)庫 test。
DEFAULT CHARACTER SET utf8 : 代表的是將該庫的默認編碼格式設置為utf8格式。
COLLATE utf8_general_ci : 代表的是數(shù)據(jù)庫校對規(guī)則,utf8_bin將字符串中的每一個字符用二進制數(shù)據(jù)存儲,區(qū)分大小寫。utf8_genera_ci不區(qū)分大小寫,ci為case insensitive的縮寫,即大小寫不敏感。utf8_general_cs區(qū)分大小寫,cs為case sensitive的縮寫,即大小寫敏感。