关于MySQL字符集问题【已解决】

关于MySQL字符集问题【已解决】

先来看看我的字符集设置

全都是utf8.这里没有什么问题

接下来我创建了一个数据表book.来看下我创建的表结构

当输入命令:mysql> insert into book(bookname,publisher,author,price,detail) values(‘PHP‘,‘电子工业出版社‘,‘武胜利‘,‘80.00‘,‘与PHP相关的图书‘);
ERROR 1366 (HY000): Incorrect string value: ‘\xB5\xE7\xD7\xD3\xB9\xA4...‘ for co
lumn ‘publisher‘ at row 1

会看到是报错了,是字符集问题;我现在设置下字符集:set names gbk;

mysql> insert into book(bookname,publisher,author,price,detail) values(‘PHP‘,‘电
子工业出版社‘,‘武胜利‘,‘80.00‘,‘与PHP相关的图书‘);

现在再插入数据,成功了。查了下资料。myslq客户端(黑窗口)的字符集默认是gbk的。所以插入成功。

然后再select * from book;  显示的也是正常的中文。没有问题。

当我创建一个dmt.php( 
在这个脚本文件头部通过header("Content-type:text/html;charset=utf8") 字符集设置也为utf8 
)脚本文件,通过这个脚本文件链接数据库,再向数据插入数据的时候。数据插入成功后。再回到黑窗口里面select * from
book;的时候发现中文数据全是乱码了。 set names gbk;  之后在select 也还是乱码。该怎么解决呢?

答案是。在dmt.php脚本文件里面,加入如下两条语句

$character = "set names utf8";

mysql_query($character);

问题就出现在客户端。虽然我们使用header();指定了客户端的字符集为utf8.但是那只是让dmt.php这个脚本文件显示在浏览器中的中
文正常。当dmt.php这个脚本文件跟mysql进行连接的时候,并不会以header()指定的字符集跟mysql数据库进行数据传输。所以我们要加
入以上两条语句“明确”指定客户端跟mysql服务器端进行连接的字符集。

这个时候我们回到mysql客户端,set names gbk;    select * from book;   此时mysql客户端里面中文就可以正常显示了。

如果我做如下改动

$character = "set names gbk";

mysql_query($character);

再通过dmt.php脚本文件执行myslq命令向数据库里插入中文。则在myslq黑窗口中select * from book;时显示的依然是乱码

总结:不管何时,都要让客户端跟myslq服务器端指定一样的字符集,才能保证数据显示不出现问题。

时间: 2024-10-25 07:41:29

关于MySQL字符集问题【已解决】的相关文章

phpmyadmin里MySQL字符集:cp1252 West European (latin1) ,解决乱码问题

使用虚拟主机空间上的phpmyadmin操作数据库的时候,如果看到phpmyadmin首页上显示的MySQL 字符集为cp1252 West European (latin1),当我们导入数据时就会出现乱码,解决的方法是: 在phpmyadmin首页的右边有个Language选项,把默认的中文 - Chinese simplified-gb2312改成 中文 - Chinese simplified,则左边的MySQL 字符集会变成UTF-8 Unicode (utf8) ,乱码问题得到解决!

MySQL字符集 GBK、GB2312、UTF8区别 解决 MYSQL中文乱码问题 收藏 MySQL中涉及的几个字符集

MySQL中涉及的几个字符集 character-set-server/default-character-set:服务器字符集,默认情况下所采用的.character-set-database:数据库字符集.character-set-table:数据库表字符集.优先级依次增加.所以一般情况下只需要设置character-set-server,而在创建数据库和表时不特别指定字符集,这样统一采用character-set-server字符集.character-set-client:客户端的字符

【解决】Mysql字符集问题

[Author]: kwu 解决Mysql字符集问题 1. vi /etc/my.cnf   增加以下内容 [client] port=3306 socket=/var/lib/mysql/mysql.sock default-character-set=utf8 [mysql] no-auto-rehash default-character-set=utf8 [mysqld] port=3306 default-character-set=utf8 2.重启mysql生效 service m

转MySQL常见错误分析与解决方法总结

一.Can't connect to MySQL server on 'localhost' (10061)翻译:不能连接到 localhost 上的mysql分析:这说明“localhost”计算机是存在的,但在这台机器上却没提供MySQL服务.需要启动这台机器上的MySQL服务,如果机子负载太高没空相应请求也会产生这个错误.解决:既然没有启动那就去启动这台机子的mysql.如果启动不成功,多数是因为你的my.ini配置的有问题.重新配置其即可.如果觉得mysql负载异常,可以到mysql/b

MySQL常见错误分析与解决方法总结

来源: https://www.ttlsa.com/mysql/mysql-common-error-analysis-and-solution-methods/ 一.Can't connect to MySQL server on 'localhost' (10061)翻译:不能连接到 localhost 上的mysql分析:这说明"localhost"计算机是存在的,但在这台机器上却没提供MySQL服务.需要启动这台机器上的MySQL服务,如果机子负载太高没空相应请求也会产生这个错

MySQL 常见错误分析与解决方法总结

一.Can't connect to MySQL server on 'localhost'(10061)? 翻译:不能连接到localhost 上的mysql?分析:这说明"localhost"计算机是存在的,但在这台机器上却没提供MySQL服务.?需要启动这台机器上的MySQL服务,如果机子负载太高没空相应请求也会产生这个错误.?解决:既然没有启动那就去启动这台机子的mysql.如果启动不成功,多数是因为你的my.ini配置的有问题.重新配置其即可.?如果觉得mysql负载异常,可

mysql字符集调整总结

mysql字符集调整总结 --http://xjsunjie.blog.51cto.com/999372/1355013 字符集是一套符号和编码的规则,不论是在oracle数据库还是在mysql数据库,都存在字符集的选择问题.对于数据库来说,字符集又是比较重要的,因为数据库存储的数据大部分都是各种文字,字符集对于数据库的存储.处理性能以及数据迁移都有重要的影响. 如果在数据库创建阶段没有正确选择字符集,那么可能在后期需要更换字符集,而字符集的更换是代价比较高的操作,也存在一定的风险,所以我们建议

c#写入Mysql中文显示乱码 解决方法

如题,mysql字符集utf8,c#写入中文后,全部显示成?,一个汉字对应一个?解决方法:在数据库连接字符串中增加字符集的说明,Charset=utf8,如 MySQLConnection con = new MySQLConnection("server=127.0.0.1;uid=root;pwd=;database=test;Charset=utf8"); 搞定,哈哈哈

MySQL字符集编码

MySQL字符集编码总结 之前内部博客上凯哥分享了一篇关于mysql字符集的文章,之前我对mysql字符集一块基本没有深究过,看到凯哥文章后有些地方有点疑惑,遂自己去看了mysql的官方文档,并参考了凯哥的文章,总结了这篇博文.本文主要是对mysql常见的字符集问题进行整理,如有错误,请大家指正. 1.MySQL字符集编码简介 谈到字符集,总会跟编码扯上关系,有关字符集和编码的理论知识请参见我之前的文章.MySQL内部是支持多种字符集的,这里就不再严格区分字符集和编码的概念了.同时,MySQL中