一佛舱、設(shè)置編碼
LINUX 修改vi/etc/my.cnf
WINDOWS my.ini
在[client]下添加
default-character-set=utf8
在[mysqld]下添加
default-character-set=utf8
保存椎例,重啟mysql即可;
二、創(chuàng)建對(duì)象時(shí)設(shè)置字符集
1 創(chuàng)建數(shù)據(jù)庫(kù)指定數(shù)據(jù)庫(kù)的字符集
mysql>CREATEDATABASE IF NOT EXISTS mydb DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci
2 創(chuàng)建表時(shí)指定字符集
CREATETABLE table_name (id int unsigned) DEFAULT CHARACTER SET utf8 COLLATEutf8_general_ci;
3 創(chuàng)建字段時(shí)指定字符集
CREATETABLE table_name2 (id int,name char(10) CHARACTER SET utf8 COLLATE utf8_general_ci);
三请祖、查看編碼
1订歪、查看 MySQL 數(shù)據(jù)庫(kù)服務(wù)器和數(shù)據(jù)庫(kù)字符集
show variables like'%char%';
2、查看 MySQL 數(shù)據(jù)庫(kù)服務(wù)器和數(shù)據(jù)庫(kù)核對(duì)排序方式(校對(duì)規(guī)則)
SHOWVARIABLES LIKE 'COLLATION';
3肆捕、查看當(dāng)前安裝的 MySQL 所支持的字符集刷晋。
show charset;
4、查看當(dāng)前數(shù)據(jù)庫(kù)編碼:
SHOW CREATE DATABASE db_name;
5慎陵、查看表編碼:
SHOW CREATE TABLE tbl_name;
6眼虱、查看字段編碼:
SHOW FULL COLUMNS FROM tbl_name;
四、修改字符集
1.修改數(shù)據(jù)庫(kù)的字符集
mysql>usemydb
mysql>ALTERDATABASE mydb CHARACTER SET utf-8(utf8) COLLATE utf8_general_ci
2.修改表的字符集
把表默認(rèn)的字符集和所有字符列(CHAR,VARCHAR,TEXT)改為新的字符集:
ALTER TABLE tbl_name CONVERT TO CHARACTER SET character_name[COLLATE ...]
如:ALTER TABLE logtest CONVERT TO CHARACTERSET utf8 COLLATE utf8_general_ci;
只是修改表的默認(rèn)字符集:
ALTER TABLE tbl_name DEFAULT CHARACTER SET character_name[COLLATE...];
如:ALTER TABLE logtest DEFAULT CHARACTERSET utf8 COLLATE utf8_general_ci;
3.修改字段的字符集:
ALTER TABLE tbl_nameCHANGE c_name c_name CHARACTER SET character_name [COLLATE ...];
如:ALTER TABLE logtest CHANGE title titleVARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci;
五席纽、用mysql命令修改編碼
setcharacter_set_client=utf8; //客戶端字符集
setcharacter_set_connection=utf8; //鏈接字符集
setcharacter_set_database=utf8; //數(shù)據(jù)庫(kù)字符集
setcharacter_set_results=utf8; //結(jié)果字符集
setcharacter_set_server=utf8; //服務(wù)器字符集
set character_set_system=utf8; //系統(tǒng)字符集
setcollation_connection=utf8; //鏈接校對(duì)
setcollation_database=utf8; //數(shù)據(jù)庫(kù)校對(duì)
setcollation_server=utf8; //服務(wù)器校對(duì)
setnames 字符集捏悬;同時(shí)修改character_set_client/character_set_connection/character_set_results字符集.
六、MySQL中的字符集轉(zhuǎn)換過程
1. MySQL Server收到請(qǐng)求時(shí)將請(qǐng)求數(shù)據(jù)從character_set_client轉(zhuǎn)換為character_set_connection;
2. 進(jìn)行內(nèi)部操作前將請(qǐng)求數(shù)據(jù)從character_set_connection轉(zhuǎn)換為內(nèi)部操作字符集润梯,其確定方法如下:
使用每個(gè)數(shù)據(jù)字段的CHARACTER SET設(shè)定值;
若上述值不存在过牙,則使用對(duì)應(yīng)數(shù)據(jù)表的DEFAULT CHARACTER SET設(shè)定值(MySQL擴(kuò)展甥厦,非SQL標(biāo)準(zhǔn));
若上述值不存在,則使用對(duì)應(yīng)數(shù)據(jù)庫(kù)的DEFAULTCHARACTER SET設(shè)定值;
若上述值不存在寇钉,則使用character_set_server設(shè)定值矫渔。
3. 將操作結(jié)果從內(nèi)部操作字符集轉(zhuǎn)換為character_set_results。
七摧莽、MySQL默認(rèn)字符集
MySQL對(duì)于字符集的指定可以細(xì)化到一個(gè)數(shù)據(jù)庫(kù)庙洼,一張表,一列镊辕,應(yīng)該用什么字符集油够。 但是,傳統(tǒng)的程序在創(chuàng)建數(shù)據(jù)庫(kù)和數(shù)據(jù)表時(shí)并沒有使用那么復(fù)雜的配置征懈,它們用的是默認(rèn)的配
置石咬,那么,默認(rèn)的配置從何而來呢卖哎?
(1)編譯MySQL 時(shí)鬼悠,指定了一個(gè)默認(rèn)的字符集,這個(gè)字符集是 latin1亏娜;
(2)安裝MySQL 時(shí)焕窝,可以在配置文件 (my.ini) 中指定一個(gè)默認(rèn)的的字符集,如果沒指定维贺,這個(gè)值繼承自編譯時(shí)指定的它掂;
(3)啟動(dòng)mysqld 時(shí),可以在命令行參數(shù)中指定一個(gè)默認(rèn)的的字符集溯泣,如果沒指定虐秋,這個(gè)值繼承自配置文件中的配置,此時(shí) character_set_server 被設(shè)定為這個(gè)默認(rèn)的字符集;
(4)當(dāng)創(chuàng)建一個(gè)新的數(shù)據(jù)庫(kù)時(shí)垃沦,除非明確指定客给,這個(gè)數(shù)據(jù)庫(kù)的字符集被缺省設(shè)定為character_set_server;
(5)當(dāng)選定了一個(gè)數(shù)據(jù)庫(kù)時(shí)肢簿,character_set_database被設(shè)定為這個(gè)數(shù)據(jù)庫(kù)默認(rèn)的字符集靶剑;
(6)在這個(gè)數(shù)據(jù)庫(kù)里創(chuàng)建一張表時(shí),表默認(rèn)的字符集被設(shè)定為 character_set_database译仗,也就是這個(gè)數(shù)據(jù)庫(kù)默認(rèn)的字符集抬虽;
(7)當(dāng)在表內(nèi)設(shè)置一欄時(shí)官觅,除非明確指定纵菌,否則此欄缺省的字符集就是表默認(rèn)的字符集;
八休涤、其他注意事項(xiàng)
MySQL的字符集支持(Character SetSupport)有字符集(Character set)和排序方式(Collation)兩個(gè)方面咱圆。對(duì)于字符集的支持細(xì)化到四個(gè)層次: 服務(wù)器(server)笛辟,數(shù)據(jù)庫(kù)(database)
,數(shù)據(jù)表(table)和連接(connection)序苏。
my.cnf中的default_character_set設(shè)置只影響mysql命令連接服務(wù)器時(shí)的連接字符集手幢,不會(huì)對(duì)使用libmysqlclient庫(kù)的應(yīng)用程序產(chǎn)生任何作用!
對(duì)字段進(jìn)行的SQL函數(shù)操作通常都是以內(nèi)部操作字符集進(jìn)行的,不受連接字符集設(shè)置的影響忱详。
如果什么地方都不修改围来,那么所有的數(shù)據(jù)庫(kù)的所有表的所有欄位的都用latin1 存儲(chǔ),不過我們?nèi)绻惭b MySQL匈睁,一般都會(huì)選擇多語(yǔ)言支持监透,也就是說,安裝程序會(huì)自動(dòng)在配置文件中把default_character_set 設(shè)置為 UTF-8航唆,這保證了缺省情況下胀蛮,所有的數(shù)據(jù)庫(kù)的所有表的所有欄位的都用 UTF-8 存儲(chǔ)。
如果要批量修改表和字段的字符集可用下面命令生成一個(gè)sql文件糯钙,然后再執(zhí)行
SELECT
CONCAT('alter table ',table_name,' CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;')
FROM
INFORMATION_SCHEMA.tables
WHERE
TABLE_SCHEMA='database_name' into outfile '/mysql/1.sql';