查看数据库编码的命令:show variables like "character%";
mysql> show variables like "character%"; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | latin1 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 8 rows in set (0.00 sec)
有关上面八个character_set相关的变量代表的意思:
1. character_set_client
主要用来设置客户端使用的字符集。
2. character_set_connection
主要用来设置连接数据库时的字符集,如果程序中没有指明连接数据库使用的字符集类型则按照这个字符集设置。
3. character_set_database
主要用来设置默认创建数据库的编码格式,如果在创建数据库时没有设置编码格式,就按照这个格式设置。
4. character_set_filesystem
文件系统的编码格式,吧操作系统上面的文件名转化成此字符集,即把character_set_client转换character_set_filesystem,默认binary不做任何转换。
5. character_set_results
数据库给客户端返回时使用的编码格式,如果没有指明,使用服务器默认的编码格式。
6. character_set_server
服务器安装时指定的默认编码格式,这个变量建议由系统自己管理,不要认为指定。
7. character_set_system
数据库系统使用的编码格式,这个值一直时utf8,不需要设置,它是存储系统元数据的编码格式。
8. character_sets_dir
这个变量是字符集安装的目录。
修改指定编码为utf-8,在/etc/mysql/my.cnf中添加以下内容,添加完后重启mysql服务(sudo systemctl restart mysql)。
[client] default-character-set=utf8 [mysql] default-character-set=utf8 [mysqld] collation-server = utf8_unicode_ci init-connect='SET NAMES utf8' character-set-server = utf8
已经创建的表里面的字符集还没有被改过来。
mysql> show create table tbl_dept; +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | tbl_dept | CREATE TABLE `tbl_dept` ( `dept_id` int(11) NOT NULL AUTO_INCREMENT, `dept_name` varchar(255) NOT NULL, PRIMARY KEY (`dept_id`) ) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=latin1 | +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)
mysql> alter table tbl_dept convert to character set utf8;
Query OK, 6 rows affected (0.18 sec)
Records: 6 Duplicates: 0 Warnings: 0
mysql>
mysql> show create table tbl_dept;
+----------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+----------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| tbl_dept | CREATE TABLE `tbl_dept` (
`dept_id` int(11) NOT NULL AUTO_INCREMENT,
`dept_name` varchar(255) NOT NULL,
PRIMARY KEY (`dept_id`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8 |
+----------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
需要使用以下修改语句
查看表编码
show create table tbl_dept;
修改表编码
alter table tbl_dept convert to character set utf8;
参考:https://blog.csdn.net/sun8112133/article/details/79921734
https://dev.mysql.com/doc/refman/5.7/en/faqs-cjk.html