有时候,我们向表中插入中文数据的字符串,可是却不能向表中插入该中文数据的字符串,其实是编码解码问题。MySQL 内部设置的编码与定义表的时候的编码不同,导致编码异常,要么就是不能够将数据插入到数据表中,要么就是数据已经插入到了编码表中了,可是却会出现乱码的情况。下面,是我个人的解决方案,能够实现插入中文数据:
查看 MySQL 内部设置的编码
首先就是要查看 MySQL 内部设置的编码。查看包含character开头的全局变量
SHOW VARIABLES LIKE 'character%';
执行结果:
解决方案
修改MySQL内部设置的编码
修改 client、connection、results、database、server的编码为 GBK 或 UTF8
-
修改客户端的编码为 UTF8
SET character_set_client = utf8;
-
修改连接的编码为 UTF8
SET character_set_connection = utf8;
-
修改查询的结果编码为 UTF8
SET character_set_results = utf8;
-
修改数据库编码为 UTF8
SET character_set_database = utf8;
- 修改数据库服务器的编码为 UTF8
SET character_set_server = utf8;
再次查看MySQL内部编码,查看是否修改成功
SHOW VARIABLES LIKE 'character%';
修改表中设置的编码
查看创建表的SQL语句
SHOW CREATE TABLE 表名;
如students表:
SHOW CREATE TABLE students;
该表是我为了测试已经创建好的,结果如下:
CREATE TABLE `students` ( `Id` int(30) NOT NULL, `Name` varchar(10) DEFAULT NULL, `Age` int(4) DEFAULT NULL, `Gender` varchar(25) DEFAULT NULL, PRIMARY KEY (`Id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1
可以看到CHARSET=latin1,即students表的编码格式为latin1。
修改表中的编码格式
ALTER TABLE 表名 CONVERT TO CHARACTER SET 新编码格式 COLLATE 排序规则;
如上面查看的students表:
ALTER TABLE students CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
将students表的编码格式修改为utf8,MySQL中的排序规则为utf8_general_ci
修改成功后,再次查看student表的SQL:
CREATE TABLE `students` ( `Id` int(30) NOT NULL, `Name` varchar(10) DEFAULT NULL, `Age` int(4) DEFAULT NULL, `Gender` varchar(25) DEFAULT NULL, PRIMARY KEY (`Id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8
发现已经修改成功了。这个时候就可以向students表中添加中文数据了。