Mysql中中文乱码的解决

今天在V2EX上问了下遇到的mysql数据库中文乱码的问题,先说下,V2EX比CSDN论坛的模块好多了,一个小时的点击量就突破了500次,而且也有很多人帮助回答。

然后下面是我问的问题:

---------------------------------------------------------

项目全程都是utf8,hibernte写进数据库的数据取出来在myeclipse的consle下面显示是正常的,为何在数据库那个dos窗口下面显示的中文名就是乱码。注明:我的数据库所有配置都是utf8

然后我又试着手动在dos窗口下用insert语句插入中文,结果是error1406,插不进去,再查看用程序插进去的中文显示乱码。

之后的解决方法:我把my.ini文件中的两处配置改为GBK,然后dos窗口下显示出了正确的中文,我想问的是既然数据库是utf8编码,为何GBK可以把中文读出来,utf8就不行,是不是dos窗口中不支持utf8的显示,所以中文乱码?

----------------------------------------------------------

想了一下,差不多应该就是DOS窗口的显示问题了,现在用数据库就用图形化来管理操作了,如果要用命令提示符操作的话,就只能先set names gbk;然后不用了就输入一句set names utf8;之所以这么切换是因为我想保持所有的都为utf8方式,避免可能出现的麻烦,这应该就是目前的解决办法吧。

MySQL命令行输入“SET NAMES UTF8;”

面那句等于:

SET character_set_client = utf8;

SET character_set_results = utf8;

SET character_set_connection = utf8

mysql中的运行模式为

信息输入路径:client→connection→server;

信息输出路径:server→connection→results。

换句话说,以出现乱码的输出为例,server里utf8的数据,传入connection,传入results依旧为utf8,dos窗口把results转过来。如果两种字符集不兼容,比如gbk和utf8,转化过程就为不可逆的,破坏性的,所以会出线乱码。

再来看不出现乱码的情况,每个路径要经过3次改变字符集编码。server里utf8的数据,传入connection转为gbk,传入results,编码方式依旧为GBK,DOS窗口把results转过来,dos默认是GBK编码方式,这就是相同的了,就不会出现乱码。

所以我之前总是error1406,插入不进包含中文的sql语句,也就是这个道理。

另外,我的数据库编码方式,我在创建的时候就设定为了utf8了,所以我的数据库的编码方式为utf8,那么我其他的工具读取的时候就不会有错。

这就是为什么每次一乱码,输入一句set names gbk(对于dos窗口),或者输入一句set names utf8(对于页面等以utf8编码的东西),乱码就消失了的原因吧。

当然了set names GBK;关掉数据库再重启的话就有恢复成原来的了,不过这也无所谓了,以后差不多都用图形化的管理工具了吧,也不太会用到dos窗口,等自己以后的技术成熟了,有了几年的经验以后,就用linux的开发环境吧。

----------------------------------------------------------------------------------

今天学到关于数据库的其他知识:

查看当前数据库编码格式:

show variables like ‘character_set_database‘;

查看字符编码

show variables like ‘character%‘;

设置服务器的编码方式

set character_set_server=utf8

varchar和nvarchar的区别在于varchar是character字符nvarchar是Unicode字符串,前者不支持中文,后者支持中文

mysql中schema的具体意思

http://blog.csdn.net/kimsoft/article/details/4627520

mysql的1406错误就是由于上述的编码方式不一样造成的。

时间: 2024-08-24 21:18:10

Mysql中中文乱码的解决的相关文章

mysql中中文乱码问题

作用:约束用来保证数据有效性和完整性 . 定义主键约束 主键约束 primary key : 信息记录某个字段可以唯一区分其他信息记录,这个字段就可以是主键 (唯一 非空)   primary key:不允许为空,不允许重复 删除主键: alter table tablename drop primary key ; 主键自动增长 :auto_increment 定义唯一约束 unique    例如:name varchar(20) unique 定义非空约束   not null    例如

关于perl中,中文乱码的解决方法

今天在测试自己写的邮件模块的时候,发现客户端收到的邮件标题是乱码,于是学习了一下perl中对字符串处理的机制,再次记录下,也希望以后对其他朋友有所帮助 首先perl只能处理2种编码的格式,ascii码和utf-8. 那么perl首先要确定一个字符串是octets还是utf8编码,他完全是靠字符串上的utf8 flag. 在perl内部,字符串结构由两部分组成: [utf8 + 数据].如果utf8 flag是on的话, perl就会把它当成utf8字符串来处理, 如果utf8 flag为off,

php操作csv文件导入mysql时中文乱码的解决办法

用网上通用的方法读取并上传csv文件内容进入mysql数据库中时,中文显示乱码,即使对数据用iconv函数转码后仍然乱码,这时可以用setlocale()函数: 这个函数经查阅是配置地域信息用的,在读取和写入csv数据前先用此函数进行定义,比如我的csv文件是无BOM的UTF-8格式,就先用如下函数进行定义: setlocale(LC_ALL, 'zh_CN.UTF8′); 然后再用iconv函数对数据内容进行转码入库等后续操作.

PHP MYSQL读取中文乱码的解决办法

其他试了很多种办法,结果最直接最简单的办法就是在SELECT前先发送设置.如下 mysqli_query($con,"SET NAMES 'UTF8'"); mysqli_query($con,"SET CHARACTER SET UTF8"); mysqli_query($con,"SET CHARACTER_SET_RESULTS=UTF8'");  $result = mysqli_query($con,$querySql);

Jmeter响应中中文乱码怎么解决?

如下图 在jmeter的bin目录下有一个jmeter.properties的文件,打开它,搜索sampleresult.default.encoding,把它的注释打开,也就是把最前面的#去掉,改成sampleresult.default.encoding=UTF-8,保存,重新打开jmeter就ok啦

sae python中Mysql中文乱码的解决

一开始我用的是: db=MySQLdb.connect(db=sae.const.MYSQL_DB,user=sae.const.MYSQL_USER,passwd=sae.const.MYSQL_PASS,host=sae.const.MYSQL_HOST,port=int(sae.const.MYSQL_PORT)) 数据库编码与python代码的编码都已设为utf8,在PHPMyAdmin中添加中文记录,在网页查询显示中却显示乱码,我在网上各种搜索都找不到解决方法.最后终于发现在连接数据库

mysql保存中文乱码的原因和解决办法

当你遇到这个mysql保存中文乱码问题的时候,期待找到mysql保存中文乱码的原因和解决办法这样一篇能解决问题的文章是多么激动人心. 也许30%的程序员会选择自己百度,结果发现网友已经贴了很多类似mysql 中文乱码.php mysql 中文乱码.mysql5.5中文乱码.mysql 乱码.mysql乱码问题.mysql jsp 乱码.mysql jdbc 乱码.mysql 查询乱码.mysql 导入数据乱码等一系列问题,到底哪个是自己要找的能解决自己问题的呀?15%的程序员一看就懵了,剩下15

navicat for mysql 显示中文乱码解决办法

navicat for mysql 显示中文乱码解决办法   最近遇到一个问题,用navicat for mysql 打开数据库时全都显示的是乱码(在用程序代码插入数据之前确保字符不是乱码),遇到问题就的寻求解决之道,百度了好长时间也没解决,网上那些解决办法都不 适合我的问题,网上的大多数解决方法是在navicat里右击一个连接,选择连接属性,切换到高级选项卡,去掉“使用mysql字符集”前的对勾,在编码 里选择utf-8,这种方法对于部分问题可能适合,但是我的乱码问题依然存在,于是乎我又将ut

C#中WebClient中文乱码的解决办法

原文:C#中WebClient中文乱码的解决办法 第一次尝试: string question = textBox1.Text.ToString(); WebClient youdao = new WebClient(); youdao.Encoding = System.Text.Encoding.GetEncoding("GB2312"); Uri uri = new Uri("http://xxxxxxxxxxxxxx"); textBox1.Text =yo