1. 程式人生 > >mysql(5.7.17)字符集設定(character_set/collation)

mysql(5.7.17)字符集設定(character_set/collation)

0 檢視字符集(character_set/collation)

use information_schema;
desc tables;    --一定記住tables表,information_schema中的metadata都可以查到

-- 檢視db的預設,DEFAULT_CHARACTER_SET_NAME/DEFAULT_COLLATION_NAME
select * from schemata where schema_name = 'db_name';

-- 檢視table的,只有table_collation欄位
select * from tables where table_schema = 'db_name'
and table_name = 'table_name';
-- 檢視column的,CHARACTER_SET_NAME/COLLATION_NAME都要 select * from columns where table_schema = 'db_name' and table_name = 'table_name';
--檢視mysql支援的character_set,Default collation是預設的"大小寫敏感"
select * from information_schema.character_sets;    
--就是執行了上面的sql
show charset;

檢視mysql支援的character_set

/*
檢視各character set的collation,以gbk為例
gbk_chinese_ci是"大小寫不敏感",ci是case sensitive的縮寫
gbk_bin是"大小寫敏感",以二進位制(binary)儲存
*/
select * from information_schema.collations;
show collation;

檢視各character set的collation

show variables like 'character_set%';   --檢視當前環境的character_set

檢視當前環境的character_set

show variables like 'collation%';   --檢視當前的collation

檢視當前的collation

1 my.ini配置character_set

-- 注意位置,放在[client]和[mysql]都可以,效果相同,以後面的為準。放在[mysqld]下服務不能啟動。
default-character-set = utf8

-- 上句設定之後,對應的全域性變數改變
character_set_client = utf8
character_set_connection = utf8 
character_set_results = utf8

-- 注意位置,放在[mysqld]下
character-set-server = gbk
collation-server = gbk_bin

-- 上句設定之後,對應的全域性變數改變
character_set_database = gbk 
character_set_server = gbk    --預設的create database db時的character_set,其他的含義待測試,可根據字面單詞猜想
collation_database = gbk_bin
collation_server = gbk_bin

2 資料庫的character_set指定/修改

-- 預設db的character_set和@@character_set_server一致,table和db一致,column和table一致
create database db;


-- defalut可有可無,注意gbk的default collation(上面有)是gbk_chinese_ci(大小寫不敏感)
-- 即使collation_database/server都是gbk_bin,建立的db預設仍是gbk_chinese_ci,這裡專門指定
create datadbase db character set gbk collate gbk_bin;
create datadbase db default character set gbk collate gbk_bin;  --正確
alter datadbase db character set gbk collate gbk_bin;       --正確

alter datadbase db convert to character set gbk collate gbk_bin;    --錯誤,不支援convert to

3 table的character_set指定/修改

create table t1(c1 varchar2) character set gbk collate gbk_chinese_ci;
-- 測試
insert into t1 values('a');
select * from t1 where c1 = 'A';    --返回'a',此時'a'='A'

--注意以下兩種方法的差別,第1句是隻是修改預設
alter table t1 character set gbk collate gbk_bin;   --提示Records: 0

--測試
alter table t1 add c2 varchar(50);
insert into t1 values('b','b');
select * from t1 where c1 = 'A';    --返回'a',c1仍然是gbk_chinese_ci
select * from t1 where c2 = 'B';    --返回empty,c2是gbk_bin

--已有欄位c1,c2及再新增的預設都是gbk_bin
alter table t1 convert to character set gbk collate gbk_bin;    --提示Records: 1

4 column的character_set指定/修改

-- 套路相同
alter table add c1 varchar(50) character set gbk collate gbk_bin;
alter table t1 change c1 c1 varchar(50) character set gbk collate gbk_bin;