在数据库的操作中总是会涉及到字符串的写入,如果我们写的字符都是英文字符,很OK,没有问题。
但如果我们操作数据库的时候要写入一些中文字符串,因为数据库对于中文字符的编码是后来兼容的,而且我们在创建数据库的时候,系统默认给定的编码方式是 latin1,这种编码方式是不兼容中文字符的,写入中文字符以后显示出来的是乱码,而表以及字段的编码方式在默认情况下是与创建数据库的时候编码方式是一致的。
所以接下来介绍一些关于 MySQL 的数据库、表以及字段的编码方式的一些操作。
1、数据库的编码
创建数据库指定编码
以下是创建数据库时指定兼容中文字符的 utf-8 编码的语句。
CREATE DATABASE utf8_test DEFAULT CHARACTER='utf8';
然后可以切换到这个数据库,用如下命令查看该数据库编码方式:
USE utf8_test;
SHOW VARIABLES LIKE '%character%';
修改数据库指定编码
如果我们在创建数据库的时候使用的默认的 latin1 ,可以通过如下方式修改数据库编码方式。
CREATE DATABASE default_test;
USE default_test;
SHOW VARIABLES LIKE '%character%';
ALTER DATABASE default_test DEFAULT CHARACTER SET='utf8';
SHOW VARIABLES LIKE '%character%';
ALTER 那一行就是修改数据库编码方式的语句。
2、表的编码
创建表指定编码
CREATE TABLE utf8_table (
.......
) ENGINE=InnoDB DEFAULT CHARSET='utf8';
使用查看创建表的语句,可以知道表的编码方式:
SHOW CREATE TABLE utf8_table;
修改表指定编码
选择一个使用默认编码的数据库,也就是编码方式为 latin1 的数据库,然后创建一张表不指定编码方式,表的编码方式就是默认的 latin1.
使用以下语句修改表的编码方式:
ALTER TABLE latin1_table CHARACTER SET='utf8';
3、字段的编码
字段的编码在创建字段的时候是跟随表的编码的方式,可以做个测试:
1)创建一张表结构为 latin1 的表
2)修改表的编码方式为 utf8
3)使用以下语句查看字段的编码方式:
SHOW FULL COLUMNS FROM column_latin1;
可以看到即使修改表的编码方式后,字段的编码方式还是 latin1
修改字段编码
ALTER TABLE column_latin1 MODIFY COLUMN remark varchar(12) CHARACTER SET utf8;