关于MySQL字符集
utf8mb4 主键类型长度不能超过191,否则会报如下错误
ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes
1.字符集说明
MySQL的字符集支持(Character Set Support)有两个方面:
字符集(Character set)
排序方式(Collation)
MySQL对于字符集的支持细化到四个层次:
服务器(server)
数据库(database)
数据表(table)
连接(connection)
MySQL对于字符集的指定可以细化到一个数据库,一张表,一列,应该用什么字符集。
2.查看MySQL字符集
查看字符集的设置
show variables like 'character_set_%';
查看字符集排序设置
show variables like 'collation_%';
3.修改MySQL字符集
最快方法
# vim /etc/mysql/my.cnf:
[client]
default-character-set=utf8
[mysqld]
character-set-server=utf8
character-set-filesystem = utf8 #如果想要都是utf8,文件系统也可设置
[mysql]
default-character-set=utf8
----------------------------------------------------
查看数据库编码:
show create database 库名;
查看表编码:
show create table 表名;
查看字段编码:
show full columns from 表名;
修改服务器级别字符集
a.临时修改
set character_set_server=utf8;
b.永久修改
set global character_set_server=utf8; #第一种方法,但需要退出之后,在进入才可看到改变
vim /etc/mysql/my.cnf #第二种方法,但需要重启
[mysqld]
character-set-server=utf8
修改数据库级:全局
------------------------------------------------------------------------------------------------------------------------------------
临时更改
set character_set_database=utf8; //设置所有库
永久修改
set global character_set_database=utf8; //第一种方法,但需要退出之后,在进入才可看到改变
vim /etc/my.cnf //第二种方法,但需要重启
[mysqld]
character-set-server=utf8
[mysql]
default-character-set=utf8
------------------------------------------------------------------------------------------------------------------------------------
修改库级
alter database 库名 default charset utf8; //永久更改
修改表级
alter table 表名 default charset utf8;
修改列级
alter table `products` change `products_model` vachar(20) character set utf8 collate utf8_general_ci null default null;
更改连接字符集
a. 临时更改:
set character_set_client;
b. 永久更改:
set global character_set_client=utf8; #第一种方法,但需要退出之后,在进入才可看到改变
vim /etc/mysql/my.cnf #第二种方法,但需要重启
[mysqld]
default-character-set=utf8
修改库字符集
alter database 库名 character set utf8;
修改表字符集
alter table 表名 convert to character set utf8;
修改字段字符集(整型,浮点型等数字类型,不能更改,因为全世界通用阿拉伯数字)
alter table 表名 change 列名 列名 数据类型(长度) character set 字符集 not null;
//change后面是放两个列名,但为同一列名
alter table 表名 modify column '字段名 数据类型(长度) character set 字符集 not null;
列字符集举例:(wml)
alter table t1 change name name varchar(255) character set utf8 not null;
alter table tb_1 modify column name varchar(255) character set utf8 not null;