MySQL中字符編碼設置解析

一.查看MySQL數據庫及表編碼格式

#查看數據庫編碼格式
show variables like 'character_set_database'
#創建數據庫時指定數據庫的字符集
create database database_name character set utf8
#修改數據庫的編碼格式
alter database database_name character set utf8mb4


#查看數據表編碼格式
show create table tian_test
#創建表時指定數據表的編碼格式
create table table_name(..) default charset=utf8
#修改數據表編碼方式(只修改表的默認缺省字符集,當向表中添加新的列默認採用缺省字符集)
alter table table_name character set utf8


#表字段的編碼格式
create table tian_test2 (
id int(10) primary key auto_increment,
username varchar(12) character set utf8 not null
) engine=MYISAM
AUTO_INCREMENT=100;
#修改表字段的編碼格式
alter table refund_details change order_no order_no varchar(300) character set utf8

二.show variables like 'char%'

character_set_client:客戶端使用字符集
character_set_results:服務器查詢結果到客戶端字符集
character_set_connection:客戶端到服務器默認轉換的編碼
character_set_database:數據庫創建時默認字符集(MySQL 5.7.6 後不推薦使用)
character_set_server:數據庫創建時默認字符集
character_set_system:系統默認元數據字符集,總是爲'utf8'
character_set_filesystem:導入導出時文件名字符集,默認binary則保持與client設置一樣

三.Incorrect string value:\xF0\x9f...for column at row 1

UTF-8編碼有可能是兩個、三個或四個字節,emoji符號或其他字符是4個字節,而MySQL的utf8編碼最多放三個字符

在MySQL的my.ini文件中修改

default-character-set=utf8mb4
character-set-server=utf8mb4
#修改後重啓MySQL服務

#將已經建好的數據庫+數據表修改爲utf8mb4(向下兼容utf8)
#更改數據庫編碼
alter database database_name character set utf8mb4 collate utf8mb4_general_ci
#更改數據表編碼(表的默認字符集+所有字符列的字符集到一個新的字符集)
alter table table_name convert to character set utf8mb4 collate utf8mb4_bin

四.set names utf8

在連接數據庫後讀取數據前,先執行一項查詢“SET NAMES UTF8”

sql_query("SET NAMES UTF8")
#等於:
SET character_set_client = utf8;     
SET character_set_results = utf8;    
SET character_set_connection = utf8; 

注:“SET NAMES UTF8”作用只是臨時的,MySQL重啓後就恢復默認了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章