最近写一个小项目。需要用到mysql数据库。
但是字符集问题一直困扰。。
差了许多资料以后明白了很多。但是有个问题还是没弄清楚。mysql字符集的乱码大约是因为数据库编码、连接编码、和客户端编码3个不统一造成的。
第一个问题是连接编码是负责什么工作的?
进行转码么?第二个问题。和上个问题差不多。
我现在又一个utf-8的数据库。
然后我在cmd下。直接查询是乱码。插入会报错。
大约是因为cmd的默认编码为gbk。
解决方案是连接的时候设置连接字符集。
mysql-uroot -proot --default-character-set=gbk
这样查询和插入都正常了。但是我想知道我插入的数据时什么编码的?
是不是以gbk插入然后以gbk解析所以没有乱码。
第三个问题。gbk和utf-8是否存在包含关系?或者说是否不需要转码。?
但是字符集问题一直困扰。。
差了许多资料以后明白了很多。但是有个问题还是没弄清楚。mysql字符集的乱码大约是因为数据库编码、连接编码、和客户端编码3个不统一造成的。
第一个问题是连接编码是负责什么工作的?
进行转码么?第二个问题。和上个问题差不多。
我现在又一个utf-8的数据库。
然后我在cmd下。直接查询是乱码。插入会报错。
大约是因为cmd的默认编码为gbk。
解决方案是连接的时候设置连接字符集。
mysql-uroot -proot --default-character-set=gbk
这样查询和插入都正常了。但是我想知道我插入的数据时什么编码的?
是不是以gbk插入然后以gbk解析所以没有乱码。
第三个问题。gbk和utf-8是否存在包含关系?或者说是否不需要转码。?
解决方案 »
- 关于Mysql慢日志的问题
- 谁知道MySql中将某一个类型为数字的字段的有无符号属性定义为无符号类型
- mysql怎么调试存储过程
- 请哪位高手发一份软件需求说明书的模板给我,谢谢了~
- 一句mssql语句怎么转化为mysql语句
- Fatal error: Maximum execution time of 30 seconds exceeded in E:\export\home\wwwroot\enspc\spc\searchresults.php on line 125
- 对某一表的某一字段或某几字段求和sql语句怎样写呢?
- 提高程序的访问速度?
- sphinx ,myisam
- 创建触发器后不能进行修改操作,Can't update table 'psxt_user' in stored function/trigger because
- 如何在mysql同一用户的两个数据库之间移动表
- mysql 修改配置和密码时,Apply security settings总报Error:1045
进行转码么?是的,可以这么理解。
但是我想知道我插入的数据时什么编码的?
是不是以gbk插入然后以gbk解析所以没有乱码。不是,以字段上的字符集设置存储,但如你第一个问题,MYSQL会进行不同字符集间的转换
第三个问题。gbk和utf-8是否存在包含关系?或者说是否不需要转码。?
不是包含,是不同的两种字符集编码方案。 需要转码。
我想问的问题是。
连接字符集所起的作用大约流程;
我想象中的流程是。查询时读出要查询的数据。然后经过连接的时候根据连接的字符集进行转码。然后显示在客户端。
插入的时候是不是也把要插入的语句转化成连接的编码。然后插入数据库中。
?
例如utf-8的字段(谢谢纠正)和gbk的cmd命令行
正常查询会是乱码。设置了连接字符集为gbk以后正常
所以
我查询的时候把utf-8的字段数据经过连接设置的gbk编码以后。转换成gbk编码显示在cmd的界面中。但是我插入的时候为什么不是gbk的数据。经过连接设置的gbk编码以后以gbk编码的格式插入进去。
所以设置连接编码是不是仅仅针对客户端起作用的。而不是双向的?
当我有一个包含中文sql语句 比如select * from tbl_news where title like '%中文%'
在cmd下(gbk)编码。并且设置了连接编码为gbk的情况下。当sql语句到数据库时候,sql语句应是character_set_connection的字符集gbk了吧?那么查询怎么能查询的出来呢?
MySQL 中文显示乱码