MYSQL教程MySQL的中文UTF8乱码问题

MYSQL教程MySQL的中文UTF8乱码问题,第1张

概述介绍《MYSQL教程MySQL的中文UTF8乱码问题》开发教程,希望对您有用。

《MysqL教程MysqL的中文UTF8乱码问题》要点:
本文介绍了MysqL教程MysqL的中文UTF8乱码问题,希望对您有用。如果有疑问,可以联系我们。

从MysqL支持Unicode后,为了与时俱进,我们的web程序也开始考虑用UTF8了.其实UTF8也用了好几年了,程序基本能跑,没什么大问题,但是数据倒换的时候,总是遇到不爽的事情.MysqL必读

【问题现象】MysqL必读

网页xxx.PHP用EditPlus另存为UTF8格式,MysqL在my.ini里设置default-character-set=utf8,建表时加了CREATE table `xxx ` (myname varchar(255)) ENGINE=MyISAM DEFAulT CHARSET=utf8,用xxx.PHP执行insert/update/select出来的都是中文,貌似没问题,但是用phpmyadmin看select是乱码,用第三方工具软件(如sqlyog)看select也是乱码,MysqLdump也是乱码,很不爽.当然,如果你建表的时候,选择了binary/varbinary/blob类型,不会发现乱码,因为指定的是二进制保存,MysqL保存数据时就没有编码的概念了.MysqL必读

【查找问题】MysqL必读

虽然在my.ini里设置default-character-set=utf8,但是执行以下命令时有新发现:MysqL必读

MysqL> SHOW VARIABLES liKE 'character%';MysqL必读

+----------------------------------------+-------------------------MysqL必读

| Variable_name            | ValueMysqL必读

+----------------------------------------+-------------------------MysqL必读

| character_set_clIEnt       | latin1MysqL必读

| character_set_connection   | latin1MysqL必读

| character_set_database    | utf8MysqL必读

| character_set_filesystem    | binaryMysqL必读

| character_set_results       | latin1MysqL必读

| character_set_server       | utf8MysqL必读

| character_set_system      | utf8MysqL必读

| character_sets_dir         | D:\MysqL\share\charsets\MysqL必读

+----------------------------------------+-------------------------MysqL必读

8 rows in set (0.00 sec)MysqL必读

 MysqL必读

MysqL> SHOW VARIABLES liKE 'collation_%';MysqL必读

+---------------------------------------+------------------MysqL必读

| Variable_name           | Value            MysqL必读

+---------------------------------------+------------------MysqL必读

| collation_connection     | latin1_swedish_ciMysqL必读

| collation_database       | utf8_general_ci MysqL必读

| collation_server         | utf8_general_ci MysqL必读

+--------------------------------------+------------------MysqL必读

3 rows in set (0.00 sec)MysqL必读

发现Value列里面不全是utf8,仍然有部分是latin1,比如其中的clIEnt和connection.那网页xxx.PHP的工作过程就是这样的啦:从xxx.PHP页面上输入汉字,因为xxx.PHP是UTF8编码的,所以xxx.PHP以UTF8格式转换输入的汉字,然后以UTF8提交给MysqL,但是MysqL的clIEnt和connection都是latin1的,而表是UTF8的,所以MysqL存储时,先将xxx.PHP提交的汉字,转成latin1的格式,再转成UTF8字符格式存在表中.如果此时我们用第三方软件或者phpmyadmin去select查看此表,而表中存储的数据是被latin1过的UTF8字符,出来的时候是以UTF8格式取的,当然看起来时乱码了.解决方法就是让所有过程都是UTF8的就可以了.MysqL必读

【解决问题】MysqL必读

1、从my.ini下手MysqL必读

[clIEnt]MysqL必读

default-character-set=utf8MysqL必读

[MysqL]MysqL必读

default-character-set=utf8MysqL必读

[MysqLd]MysqL必读

default-character-set=utf8MysqL必读

以上3个section都要加default-character-set=utf8,平时我们可能只加了MysqLd一项.MysqL必读

然后重启MysqL,执行MysqL必读

MysqL> SHOW VARIABLES liKE 'character%';MysqL必读

MysqL> SHOW VARIABLES liKE 'collation_%';MysqL必读

确保所有的Value项都是utf8即可.MysqL必读

2、建表时加utf8,表字段的Collation可加可不加,不加时默认是utf8_general_ci了.MysqL必读

CREATE table `tablename4` (MysqL必读

`ID` int(11) NOT NulL auto_INCREMENT,MysqL必读

`varchar1` varchar(255) DEFAulT NulL,MysqL必读

`varbinary1` varbinary(255) DEFAulT NulL,MysqL必读

PRIMARY KEY (`ID`)MysqL必读

)  ENGINE=MyISAM  DEFAulT CHARSET=utf8 MysqL必读

 MysqL必读

3、网页xxx.PHP保存时选择utf8编码,页头最好加上MysqL必读

header('conten-type:text/HTML;charset=utf-8');MysqL必读

在执行CRUD *** 作前先执行一下MysqL必读

MysqL_query("set names utf8");MysqL必读

测试代码xxx.PHP如下:MysqL必读

<?PHPMysqL必读

header('conten-type:text/HTML;charset=utf-8');MysqL必读

MysqL_connect("localhost","root","password") or dIE("Could not connect: " . MysqL_error());MysqL必读

MysqL_select_db("test");MysqL必读

MysqL_query("set names utf8");MysqL必读

$str = "CHN 软件开发有限公司,JPN ソフトウェア_k株式会社,KOR 소프트웨어 개발 유한 공사,RUS Суд программного обеспечения".time();MysqL必读

$sql = "insert into tablename4 (varchar1,varbinary1 ) values ('".$str."','".$str."')";MysqL必读

echo $sql."<hr>";MysqL必读

MysqL_query($sql);MysqL必读

 MysqL必读

$result = MysqL_query("SELECT ID,varchar1,varbinary1 FROM tablename4");MysqL必读

while ($row = MysqL_fetch_array($result,MysqL_BOTH)) {MysqL必读

printf ("ID: %s,varchar1: %s,varbinary1: %s<br>",$row[0],$row["varchar1"],$row["varbinary1"]);MysqL必读

}MysqL必读

 MysqL必读

MysqL_free_result($result);MysqL必读

?>MysqL必读

如此设置之后,无论是在PHP页面插入任何utf8字符,在PHP页面里取出来的,在phpmyadmin里取出来的,在MysqL的第三方客户端软件里取出来的,都是一样的汉字了,不会再发现乱码,MysqLdump出来的也是汉字.OK,问题解决.MysqL必读

【另】在中文windows系统下,在cmd.exe里运行MysqL.exe字符终端,不能使用上面的规则,因为默认情况下,中文windows系统cmd.exe里的代码页是cp936即GBK,不能显示全部UTF8字符,所以在字符终端里看到乱码是正常现象,不要奇怪,这个问题在类Unix系统的shell终端里可以解决的.MysqL必读

总结

以上是内存溢出为你收集整理的MYSQL教程MySQL的中文UTF8乱码问题全部内容,希望文章能够帮你解决MYSQL教程MySQL的中文UTF8乱码问题所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1164098.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存