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重启后就恢复默认了

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