解决PHP存取MySQL 4.1乱码问题

mysql|解决|问题

从MySQL 4.1开始引入的多语言支持确实很棒,而且一些特性已经超过了其他的数据库系统。不过我在测试过程中发现使用适用于MySQL 4.1之前的PHP语句操作MySQL数据库会造成乱码,即使是设置过了表字符集也是如此。我读了一下新的MySQL在线手册中第十章"Character Set Support"后终于找到了解决方法并测试通过。

MySQL 4.1的字符集支持(Character Set Support)有两个方面:字符集(Character set)和排序方式(Collation)。对于字符集的支持细化到四个层次: 服务器(server),数据库(database),数据表(table)和连接(connection)。

查看系统的字符集和排序方式的设定可以通过下面的两条命令:

mysql> SHOW VARIABLES LIKE 'character_set_%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
7 rows in set (0.00 sec)

mysql> SHOW VARIABLES LIKE 'collation_%';
+----------------------+-------------------+
| Variable_name | Value |
+----------------------+-------------------+
| collation_connection | latin1_swedish_ci |
| collation_database | latin1_swedish_ci |
| collation_server | latin1_swedish_ci |
+----------------------+-------------------+
3 rows in set (0.00 sec)

上面列出的值就是系统的默认值。(很奇怪系统怎么默认是latin1的瑞典语排序方式)...

当我们按照原来的方式通过PHP存取MySQL数据库时,就算设置了表的默认字符集为utf8并且通过UTF-8编码发送查询,你会发现存入数据库的仍然是乱码。问题就出在这个connection连接层上。解决方法是在发送查询前执行一下下面这句:

SET NAMES 'utf8';

它相当于下面的三句指令:
SET character_set_client = utf8;
SET character_set_results = utf8;
SET character_set_connection = utf8;

再试试看,正常了吧?^_^ Enjoy!

时间: 2024-09-19 08:57:08

解决PHP存取MySQL 4.1乱码问题的相关文章

简单解决Windows中MySQL的中文乱码与服务启动问题_Mysql

中文乱码问题当我第一次接触mysql,首先让我难受的是mysql的乱码问题,百度上也有许多有关的解决方案,不过作为亲身受害者,我想很有必要贴出我的心声: 1.关于mysql的字符集处理 mysql在标识数据时采取二进制字符和非二进制字符格式,前者主要用来标识图片,声音,后者就完成剩余的所有功能,而对于后者,就存在字符集设置问题. 我们知道数据库是老外搞出来的,他们在设计的时候并没有考虑到编码格式的问题,在计算机流行的现代每个国家为了支持本国的语言,都推出了自己本国的编码格式,下面利用mysql命

解决MySQL 4.1乱码问题

 从MySQL 4.1开始引入的多语言支持确实很棒,而且一些特性已经超过了其他的数据库系统.不过在测试过程中发现使用适用于MySQL 4.1之前的PHP语句操作MySQL数据库会造成乱码,即使是设置过了表字符集也是如此.MySQL 4.1的字符集支持(Character Set Support)有两个方面:字符集(Character set)和排序方式(Collation).对于字符集的支持细化到四个层次: 服务器(server),数据库(database),数据表(table)和连接(conn

【技术贴】java插入mysql中文乱码解决|java插入mysql数据库显示问号?

[技术贴]java插入mysql中文乱码解决|java插入mysql数据库显示问号?   在你要连接到mysql 的代码里写上?useUnicode=true&characterEncoding=UTF-8" 比如 "jdbc:mysql://localhost:3306/chenluancl1?useUnicode=true&characterEncoding=UTF-8", "root","密码"

mysql数据库中文乱码应该怎么解决,修改配置文件中的字符编码并没有作用

问题描述 mysql数据库中文乱码应该怎么解决,修改配置文件中的字符编码并没有作用 mysql数据库中文乱码应该怎么解决,修改配置文件中的字符编码并没有作用. 解决方案 把当前数据库字符集改为utf8试一下. 解决方案二: 可以设置当前文本编码,与数据库一致 解决方案三: 先把文本粘贴到记事本,然后改成utf-8 保存后再粘贴回去

MySQL+PHP产生乱码原因分析与解决方法

◆ mysql数据库教程默认的编码是utf8,如果这种编码与你的php网页不一致,可能就会造成mysql乱码; ◆ mysql中创建表时会让你选择一种编码,如果这种编码与你的网页编码不一致,也可能造成mysql乱码; ◆ mysql创建表时添加字段是可以选择编码的,如果这种编码与你的网页编码不一致,也可能造成mysql乱码; ◆ 用户提交页面的编码与显示数据的页面编码不一致,就肯定会造成php页面乱码; ◆ 如用户输入资料的页面是big5码, 显示用户输入的页面却是gb2312,这种100%会造

java导入mysql出现中文乱码

问题描述 java导入mysql出现中文乱码 我写了一个小程序把txt中的文字读取并写入mysql,然而无论怎么样都有乱码,我试了很多方法都不行,结果最后解决居然是因为url的问题,崩溃了,求大神们看看 之前是这样 public static final String url = "jdbc:mysql://127.0.0.1/website?useUnicode=true&characterEncoding=UTF-8"; 改成这样竟然就没问题了... public stat

编码-php插入到mysql数据库中文乱码,数据库中的中文可以正常显示

问题描述 php插入到mysql数据库中文乱码,数据库中的中文可以正常显示 PHP获取HTML的POST内容到数据库,插入以后显示乱码,我数据库编码已经设置成UTF8了,然后插入之前我ECHO出来也不是乱码,但是到数据库里面就成乱码了,不知道为什么呢,问之前我已经搜索过了,说要先执行 mysql_query("SET NAMES 'uft8'",$link); 这样,我这样执行以后然后刷新还是一样 解决方案 http://www.111cn.net/phper/31/59059.htm

javaee hib...-用hibernate操作mysql出现中文乱码

问题描述 用hibernate操作mysql出现中文乱码 用hibernate操作mysql出现中文乱码.按照 网上教程依旧出现乱码,求助.. 解决方案 你先确保,mysql的表,eclipse,服务器如tomcat,使用的是同一种Encoding(编码) 解决方案二: 在创建数据库表的时候设置编码default charset=utf-8这样 数据库的编码就不会出现问题了,随后在服务器端中tomcat中有一个配置文件,可以设置编码形式,但是这种情况很少出现, 另外就是,在数据显示的时候可以设置

Mac Mysql数据库中文乱码问题解决_Mysql

Mac 下MySQL数据库中文乱码解决方案: 当我们用框架进行数据库的存储操作时,经常会遇到中文乱码的问题. 如:在使用Java中得SSH框架时,我们需要在web.xml文件中配置编码的filter,具体代码是: <span style="font-family:FangSong_GB2312;font-size:14px;"><!-- 表单处理乱码,必须在OpenSessionInViewFilter的filter之前 --> <filter> &