MySql 无法插入中文或者乱码

MySQL处理连接时,外部连接发送过来的SQL请求会根据以下顺序进行转换:
set character_set_client =gbk (字符编码)           //客户连接所采用的字符集
set character_set_connection=gbk      //MySQL连接字符集
set character_set_database=gbk         //数据库所采用的字符集(表,列)
set character_set_results=gbk           //客户机显示所采用的字符集

为什么set names 'gb2312'就可以了呢
set names 'gb2312'相当于这三条语句:
set character_set_client = gb2312;
set character_set_connection = gb2312;
set character_set_results = gb2312;


这样做的话,上述产生乱码的原因1就不存在了,因为编码格式都统一了,但是这样做并不是万金油。原因有:
1.你的client不一定是用gb2312编码发送SQL的,如果编码不是gb2312那么转换成gb2312就会产生问题。
2.你的数据库中的表不一定是gb2312格式,如果不是gb2312格式而是其他的比如说latin1,那么在存储字符集的时候就会产生信息丢失。

综上,终极解决方案如下:
1.首先要明确你的客户端时候何种编码格式,这是最重要的(IE6一般用utf8,命令行一般是gbk,一般程序是gb2312)
2.确保你的数据库使用utf8格式,很简单,所有编码通吃。
3.一定要保证connection字符集大于等于client字符集,不然就会信息丢失,比如latin1<gb2312<gbk<utf8
若设置set character_set_client = gb2312,那么至少connection的字符集要大于等于gb2312,否则就会丢失信息
4.以上三步做正确的话,那么所有中文都被正确地转换成utf8格式存储进了数据库,为了适应不同的浏览器,不同的客户端,你可以修改character_set_results来以不同的编码显示中文字体,由于utf8是大方向,因此web应用是我还是倾向于使用utf8格式显示中文的。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值