Open wuyongxiu opened 7 years ago
在用mysql存储字符串的时候,如果数据库的字符集设置的是latin1,那么创建的表里,包含varchar字段的内容,便没有办法正确的存储中文。例如下图signature对应的值本来是"人才in",数据库却存储成"??in"。 通过查询语句查看数据库的字符编码格式,可以看到数据库的字符集是 latin1
show variables like 'character_set_%'
相对应的通过navicat自动创建的表语句也如下图(可以看到charset=latin1)
以下是三个层次的字符编码的修改语句
ALTER DATABASE dbname CHARACTER SET utf8;
2 修改对应表的字符编码
ALTER TABLE tablename CHARACTER SET utf8;
3 修改表对应字段的字符编码
ALTER TABLE `test` CHANGE `name` `name` VARCHAR(36) CHARACTER SET utf8 NOT NULL;
如果要修改已经创建的数据库,表或者列使用以上三种方法。 除了以上的三种方法之外,另一种方法是直接使用sql语句创建表,并且建表的时候直接指定charset。
CREATE TABLE `test` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
https://dba.stackexchange.com/questions/29649/why-default-character-set-server-is-latin1 http://blog.csdn.net/gaohuanjie/article/details/19204553 http://www.cnblogs.com/donqiang/articles/2057972.html
问题:
在用mysql存储字符串的时候,如果数据库的字符集设置的是latin1,那么创建的表里,包含varchar字段的内容,便没有办法正确的存储中文。例如下图signature对应的值本来是"人才in",数据库却存储成"??in"。
通过查询语句查看数据库的字符编码格式,可以看到数据库的字符集是 latin1
相对应的通过navicat自动创建的表语句也如下图(可以看到charset=latin1)
修改语句
以下是三个层次的字符编码的修改语句
2 修改对应表的字符编码
3 修改表对应字段的字符编码
实践:
如果要修改已经创建的数据库,表或者列使用以上三种方法。
除了以上的三种方法之外,另一种方法是直接使用sql语句创建表,并且建表的时候直接指定charset。
参考文档:
https://dba.stackexchange.com/questions/29649/why-default-character-set-server-is-latin1 http://blog.csdn.net/gaohuanjie/article/details/19204553 http://www.cnblogs.com/donqiang/articles/2057972.html