使用数据库一直不能存储汉字,每次都报错,在网上查阅了下资料,试了下都不好使,其中有一种方法虽然没有成功但是也给了我一些启发,就是使用sql语句修改字符集
set character_set_client=utf8;
set character_set_connection=utf8;
set character_set_results=utf8;
但是也是不好用,后来找到一个特别细致的帖子,试了下特别好用
不仅修改数据库的字符集,还要修改客户端的,同时也修改了字段的字符集。以下为我的数据库中某一表格修改字符集的代码。
alter database db1 default character set = utf8;-- // tb1为数据库名
alter table db1.tb_brand default character set = utf8; -- // bd_brand为表名
alter table db1.tb_brand modify column brand_name varchar(20) character set utf8 collate utf8_general_ci; -- // 这里也会改变字段类型
alter table db1.tb_brand modify column company_name varchar(20) character set utf8 collate utf8_general_ci;
alter table db1.tb_brand modify column description varchar(20) character set utf8 collate utf8_general_ci;
设置完后,在数据库中存储汉字是没问题了,在建表时候最后加上一句character set = utf8;也可以解决问题,例如
create table it_user(
id int,
name varchar(50),
username varchar(200),
gender char(1),
age int
) character set = utf8;
可是当和前后端代码连接起来的时候,发现汉字都被存储为问号了,于是继续查找原因,发现在连接数据库的xml文件中的连接数据库的URL也要添加一条属性useUnicode=true&characterEncoding=utf8
添加后成功解决问题
而且以后建表的时候也要规定utf-8,而且排序也要使用utf-8,总之一句话就是要保持各个地方的编码格式一致。数据库的编码和项目的编码都用UTF-8。
以下为各种参考文件
https://segmentfault.com/q/1010000006021630
报错处理:传汉字到mysql数据库,显示问号的解决方法_tctctttccc的博客-CSDN博客
JSP/Servlet中的编码相关设置_superbeck的专栏-CSDN博客_servlet设置编码格式
以下为摘抄另一位博主的帖子,以备不时之需。并且在这里贴一下这篇文章的地址https://www.cnblogs.com/zhi-leaf/p/12553014.html
检测发现,MySQL未设置默认字符集的情况下,默认字符集为latin1,它不支持汉字,那我们的解决方案就很清楚了,就是改变字符集。
我们先改变数据库的字符集
我们再改变表的字符集:
到这,我保存数据时依旧报错,再次查资料,发现字段也有字符集
show full columns from bd_user;
我们这个字段删除后重新创建,字符集就好了
当然,我们也可以用SQL语句修改字符集:
alter database test default character set = utf8; // test为数据库名 alter table test.bd_user default character set = utf8; // bd_user为表名 alter table