mysql 乱码问题

解决方法是在查询之前先执行SET NAMES 'gb2312'或SET NAMES 'gbk'.

具体原因是因为:  (摘自网络)

从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;

时间: 2024-10-28 18:44:38

mysql 乱码问题的相关文章

java储存mysql乱码报错

问题描述 java储存mysql乱码报错 我现在是都文本来储存数据库, 做的是记录搜索内容的东西, 可是如果搜索内容本身中就有乱码, 要如何解决 比如这个图片,那个像L的东西, String line = new String(br.readLine().getBytes(), "ISO8859_1" ) 转utf-8 也没用 报这样的错 java.sql.SQLException: Incorrect string value: 'xF0x9Fx91x8CxE8xBF...' for

sql点滴40—mysql乱码问题总结

原文:sql点滴40-mysql乱码问题总结 本文将为大家讲解如何处理Java连接过程中的MySQL中文乱码问题.一般MySQL中文乱码问题都是与字符集有关,这里作者的经历也大致差不多. MySQL默认编码是latin1 1. mysql> show variables like 'character%'; 2. +--------------------------+--------------------------+ 3. | Variable_name | Value | 4. +---

mysql 乱码

问题描述 大家好我在用MYSQL图形用户界面查看数据的时候,看到的数据表都是乱码,不知道怎么处理,请大家指教.谢谢 解决方案 解决方案二:能不能把问题再说的具体点?应该是字符集设置的问题.解决方案三:设置字符集,最好是全部设成utf-8,楼主google一下mysql乱码,应该有很多解决方案解决方案四:当时安装mysql时是不是没设置字符编码格式?如果没设置的话你现在可以找到my.ini文件打开后找到设置编码的地方将ISO8859-1改成utf-8解决方案五:引用3楼java_cxrs的回复:

10分钟学会理解和解决MySQL乱码问题

原文:10分钟学会理解和解决MySQL乱码问题 在阅读本文之前,强烈建议对字符集编码概念还比较模糊的同学 阅读下博主之前对相关概念的一篇科普:十分钟搞清字符集和字符编码 本博客已经迁移至: http://cenalulu.github.io/ 为了更好的体验,请通过此链接阅读: http://cenalulu.github.io/mysql/mysql-mojibake/ MySQL出现乱码的原因 要了解为什么会出现乱码,我们就先要了解从客户端发起请求,到MySQL存储数据,再到下次从表取回客户

java-在jae上搭建的Java项目,连接mysql乱码,本地没问题

问题描述 在jae上搭建的Java项目,连接mysql乱码,本地没问题 云数据库上显示的编码是utf-8,java连接mysql用的也是utf-8,在本地连接mysql没有任何问题,在jae上就出问题,哪位朋友遇见过同样的问题吗?

数据-mySql乱码问题,该设的都设了,还是一样。一样

问题描述 mySql乱码问题,该设的都设了,还是一样.一样 解决方案 你的mysql是哪个版本的我用的最新版的什么都没有动就能用中文输入输出也很正常如果不行就将现在的mysql删除重新装一个:现在用图形化界面的很多了这个是我的建议 解决方案二: 建议使用图形化界面的软件 解决方案三: 对,建议使用navicat 解决方案四: 是不是传入的数据是中文才会乱码,是英文字母就不会乱码? 解决方案五: 用select语句调出来看看乱码是怎么样的...

MySQL乱码问题终极指南_Mysql

mysql的字符集设置众多,从客户端到连接到结果集,从服务器到库到表到列,都可以设置字符集,灵活很强大,但就是很容易出问题,如果不了解其机制,很容易就出现乱码问题. 为了让大家尽量在工作中少受或者不受乱码的困扰,这里我结合之前其它同学在论坛的发帖,并结合自己的理解和实践,详细分析总结了一下,以飨各位看官. 关于字符集和乱码的基础知识这里就不详细说明了(请自行搜索),但有一个问题需要特别强调一下:乱码是怎么产生的? 这个问题相信很多同学都是模棱两可,或者没有认真想过,反正理解就是"字符编码&quo

jsp中文乱码 jsp mysql 乱码的解决方法_JSP编程

jsp中文乱码 jsp mysql 乱码要servlet里面支持中文的方法: 在dopost或者doget的第一句加上: request.setCharacterEncoding("GB2312"); response.setCharacterEncoding("GB2312"); jsp乱码问题在jsp里面就把 <%@ page contentType="text/html; charset=gb2312" language="

深入理解MySQL乱码问题及MySQL乱码解决

要了解为什么会出现乱码,我们就先要理解:从客户端发起请求,到MySQL存储数据,再到下次从表取回客户端的过程中,哪些环节会有编码/解码的行为.为了更好的解释这个过程,博主制作了两张流程图,分别对应存入和取出两个阶段. 存入MySQL经历的编码转换过程   上图中有3次编码/解码的过程(红色箭头).三个红色箭头分别对应:客户端编码,MySQL Server解码,Client编码向表编码的转换.其中Terminal可以是一个Bash,一个Web页面又或者是一个APP.本文中我们假定Bash是我们的T

JSP/JDBC MySQL乱码问题~~~

js|mysql|问题 綠起:JSP的request 默认为ISO8859_1,所以在处理中文的时候,要显示中文的话,必须转成GBK的,如下String str=new String(request.getParameter("name").getBytes("ISO8859-1"),"GBK"); out.println(str); 这样就可以显示中文了 MYSQL操作时的中文问题:这个要看MySQL的默认编码了,一般不调整的话为latin1其