wuyongxiu / wuyongxiu.github.io

随便记录一下......
http://wuyongxiu.github.io
6 stars 3 forks source link

mysql修改字符编码(charset,latin1,utf8) #35

Open wuyongxiu opened 7 years ago

wuyongxiu commented 7 years ago

问题:

在用mysql存储字符串的时候,如果数据库的字符集设置的是latin1,那么创建的表里,包含varchar字段的内容,便没有办法正确的存储中文。例如下图signature对应的值本来是"人才in",数据库却存储成"??in"。 clipboard
通过查询语句查看数据库的字符编码格式,可以看到数据库的字符集是 latin1

show variables like 'character_set_%'

qq 20170921203044

相对应的通过navicat自动创建的表语句也如下图(可以看到charset=latin1)
clipboard

修改语句

以下是三个层次的字符编码的修改语句

ALTER DATABASE dbname CHARACTER SET utf8; 

实践:

如果要修改已经创建的数据库,表或者列使用以上三种方法。
除了以上的三种方法之外,另一种方法是直接使用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