广告
返回顶部
首页 > 资讯 > 数据库 >如何终结mysql中文乱码
  • 697
分享到

如何终结mysql中文乱码

2024-04-02 19:04:59 697人浏览 泡泡鱼
摘要

本篇文章给大家分享的是有关如何终结Mysql中文乱码,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。 我自己都不知

本篇文章给大家分享的是有关如何终结Mysql中文乱码,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

我自己都不知道为了中文问题烦恼了多少个日子,最恨瑞典人了-谁叫他发明了mysql,还设置了默认设置:latin1.曾经也在想假如中国人发明了 mysql(my see狗),呵呵,那么我们还有这样烦恼吗?默认的就是gk2312 或者gbk.倘若考虑到台湾朋友加一个big5.就得了。可是呢?事实不是这样的,没有办法,自己只好baidu一下,Google一下,甚至yahoo 一下。能找到的方法都试过了,好久了,直到今天让我找到了,想明白了。所以急切和大家分享以下心得。
 为了说的明白一些,我觉个例子:
很简单,就是从html中接受两个输入,然后由jsp处理写到mysql且从数据库返回这个结果显示出来。
Mysql_jstl.html

<html>
<head>
 <title>CH14 - Mysql_jstl.html</title>
<meta Http-equiv="Content-Type" content="text/html; charset= GB2312">
</head>
<body>

<h3>将信息存入 Mysql 中 - 使用 JSTL 写法</h3>
<fORM name="form" action="Mysql_jstl.jsp" method="post" >
 <p>姓:<input name="last_name" type="text" id="last_name"></p>
 <p>名:<input name="first_name" type="text" id="first_name"></p>
 <p>
   <input type="submit" value="传送">
   <input type="reset" value="取消">
 </p>
</form>

</body>
</html>




Mysql_jstl.jsp<%@ page contentType="text/html;charset=GB2312" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

<html>
<head>
 <title>CH14 - Mysql_jstl.jsp</title>
</head>
<body>

<h3>将信息存入 Mysql 中 - 使用 JSTL 写法</h3>

<fmt:requestEncoding value="GB2312" />

<c:set var="birth" value="1978/12/11" />
<c:set var="sex" value="F" />
<c:set var="email" value="aaa@asdf.com" />

<sql:setDataSource driver="com.mysql.jdbc.Driver"
        url="jdbc:mysql://localhost:3306/sample?useUnicode=true&characterEncoding=UTF-8"
        user="root"
        passWord="44444" />

<sql:update>
 INSERT INTO employee(employee_id, last_name, first_name, birth, sex, emmail)
 VALUES ( ? , ? , ? , ? , ? , ? )
 
 <sql:param value="${employee_id}" />
 <sql:param value="${param.last_name}" />
 <sql:param value="${param.first_name}" />
 <sql:param value="${birth}" />
 <sql:param value="${sex}" />
 <sql:param value="${email}" />
</sql:update>

<sql:query var="result">
 SELECT * FROM employee
</sql:query>

从 employee 取出所有新增的姓名:<br>
<c:forEach items="${result.rows}" var="row" >
新增姓名:<c:out value="${row.last_name}" />
    <c:out value="${row.first_name}" /><br>
</c:forEach>

</body>
</html>


接下来就是创建数据库,名字为sample

然后建立一个table: employee,内容如下(其中应该是email,可是我不小心在建数据库打错了,将错就错了如何终结mysql中文乱码):
+-------------+------------------+------+-----+---------+----------------+
| Field       | Type             | Null | Key | Default | Extra          |
+-------------+------------------+------+-----+---------+----------------+
| employee_id | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| last_name   | varchar(20)      | YES  |     | NULL    |                |
| first_name  | varchar(20)      | YES  |     | NULL    |                |
| birth       | date             | YES  |     | NULL    |                |
| sex         | enum('m','f')    | YES  |     | m       |                |
| emmail      | varchar(39)      | YES  |     | NULL    |                |
+-------------+------------------+------+-----+---------+----------------+

如果只是这样的话,就会出现这样的错误:报告的错误是:sqle=com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long
for column 'last_name' at row 1 从 employee!
有的情况是:| name        |
+-------------+
| ??          |
| 54243654321 |
| ??          |
| ??          |
+-------------+出现问号!

前面我们已经说过了,mysql默认的编码是latin1,不是我们所需要的gbk,所以我们要修改成为utf8,因为若要正确显示中文繁、简、日文、韩文 使用utf8,修改方法如下:
 ALTER DATABASE sample ####这里修改整个数据库的编码
      CHARACTER SET utf8
      DEFAULT CHARACTER SET utf8
      COLLATE utf8_general_ci
      DEFAULT COLLATE utf8_general_ci;

当然了,你也可在在建数据库的时候指定编码,比如:

CREATE DATABASE sample

      CHARACTER SET utf8
      DEFAULT CHARACTER SET utf8
      COLLATE utf8_general_ci
      DEFAULT COLLATE utf8_general_ci ;

接下来要做的是打开mysql所在的目录下的my.nin

mysql> show variables like '%character%';
+--------------------------+-------------------------------------------+
| Variable_name            | Value                                     |
+--------------------------+-------------------------------------------+
| character_set_client     | latin1                                    |
| character_set_connection | latin1                                    |
| character_set_database   | utf8                                      |
| character_set_results    | latin1                                    |
| character_set_server     | utf8                                                                         
| character_set_system     | utf8                                      |
| character_sets_dir       | C:MySQLMySQL Server 5.0sharecharsets |
+--------------------------+-------------------------------------------+

mysql> show variables like '%collation%';
+----------------------+-------------------+
| Variable_name        | Value             |
+----------------------+-------------------+
| collation_connection | latin1_swedish_ci |
| collation_database   | utf8_general_ci   |
| collation_server     | utf8_general_ci   |
+----------------------+-------------------+



接着你再看看执行那个Mysql.html 文件:这回你可以看到的是
mysql> select * from employee;
+-------------+-----------+------------+------------+------+--------------+
| employee_id | last_name | first_name | birth      | sex  | emmail       |
+-------------+-----------+------------+------------+------+--------------+
|          12 | ?         | ??         | 1978-12-11 | f    | aaa@asdf.com |
|          13 | ?         | ??         | 1978-12-11 | f    | aaa@asdf.com |
|          14 | ?         | ??         | 1978-12-11 | f    | aaa@asdf.com |
|          15 | ?         | ??         | 1978-12-11 | f    | aaa@asdf.com |
|          16 | ?         | ??         | 1978-12-11 | f    | aaa@asdf.com |
|          17 | ?         | ??         | 1978-12-11 | f    | aaa@asdf.com |
+-------------+-----------+------------+------------+------+--------------+

这当然不是我们希望看到的,我们需要的现实完美正确的中文:
我们还有最后一招:
mysql> SET NAMES 'gbk' ;Query OK, 0 rows affected (0.00 sec)
因为我们需要的是gbk.
看看mysql中的character设置情况:
mysql> SHOW VARIABLES LIKE '%character%' ;
+--------------------------+-------------------------------------------+
| Variable_name            | Value                                     |
+--------------------------+-------------------------------------------+
| character_set_client     | gbk                                       |
| character_set_connection | gbk                                       |
| character_set_database   | utf8                                      |
| character_set_results    | gbk                                       |
| character_set_server     | utf8                                      |
| character_set_system     | utf8                                      |
| character_sets_dir       | C:MySQLMySQL Server 5.0sharecharsets |
+--------------------------+-------------------------------------------+
7 rows in set (0.00 sec)

mysql> SHOW VARIABLES LIKE '%collation%' ;
+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | gbk_chinese_ci  |
| collation_database   | utf8_general_ci |
| collation_server     | utf8_general_ci |
+----------------------+-----------------+

这个才是我们最终需要的。
在来查看执行完Mysql_jstl.jsp后的数据库中的结果:
mysql> select * from employee;
|          14 | 王        | 彭给       | 1978-12-11 | f    | aaa@asdf.com |
|          15 | 田        | 王光       | 1978-12-11 | f    | aaa@asdf.com |
|          16 | 息        | 存入       | 1978-12-11 | f    | aaa@asdf.com |
|          17 | 往        | 小杯       | 1978-12-11 | f    | aaa@asdf.com |
+-------------+-----------+------------+------------+------+--------------+

可以高兴得看到了中文,并且在浏览器中也显示正确。

但是仅仅这样的话,当你重新启动mysql的时候
所有的设置又失效了。
mysql> show variables like '%character%';
+--------------------------+-------------------------------------------+
| Variable_name            | Value                                     |
+--------------------------+-------------------------------------------+
| character_set_client     | latin1                                    |
| character_set_connection | latin1                                    |
| character_set_database   | utf8                                      |
| character_set_results    | latin1                                    |
| character_set_server     | utf8                                      |
| character_set_system     | utf8                                      |
| character_sets_dir       | C:MySQLMySQL Server 5.0sharecharsets |
+--------------------------+-------------------------------------------+

mysql> SHOW VARIABLES LIKE '%collation%' ;
+----------------------+-------------------+
| Variable_name        | Value             |
+----------------------+-------------------+
| collation_connection | latin1_swedish_ci |
| collation_database   | utf8_general_ci   |
| collation_server     | utf8_general_ci   |
+----------------------+-------------------+
重新读取又出现乱码:
mysql> select * from employee;
+-------------+-----------+------------+------------+--
| employee_id | last_name | first_name | birth      | s
+-------------+-----------+------------+------------+--
|          12 | ?         | ??         | 1978-12-11 | f
|          13 | ?         | ??         | 1978-12-11 | f
|          14 | ?         | ??         | 1978-12-11 | f
|          15 | ?         | ??         | 1978-12-11 | f
|          16 | ?         | ??         | 1978-12-11 | f
|          17 | ?         | ??         | 1978-12-11 | f
+-------------+-----------+------------+------------+--
所以我们需要在客户端设置系统能识别中文的编码gbk并没有保存到my.ini文件中。所以要修改my.ini文件

在[mysql]段加入一下代码改成:default-character-set=gbk 这样设置就得到保存了。
重启就可以了。mysql> show variables like '%character%';
+--------------------------+----------------
| Variable_name            | Value
+--------------------------+----------------
| character_set_client     | gbk
| character_set_connection | gbk
| character_set_database   | utf8
| character_set_results    | gbk
| character_set_server     | utf8
| character_set_system     | utf8
| character_sets_dir       | C:MySQLMySQL
+--------------------------+----------------
mysql> SHOW VARIABLES LIKE '%collation%' ;
+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | gbk_chinese_ci  |
| collation_database   | utf8_general_ci |
| collation_server     | utf8_general_ci |
+----------------------+-----------------+

以上就是如何终结mysql中文乱码,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网数据库频道。

您可能感兴趣的文档:

--结束END--

本文标题: 如何终结mysql中文乱码

本文链接: https://www.lsjlt.com/news/66639.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何终结mysql中文乱码
    本篇文章给大家分享的是有关如何终结mysql中文乱码,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。 我自己都不知...
    99+
    2022-10-19
  • python MYsql中文乱码
    以前用php连mssqy时也经常出现中文乱码(中文变问号)的问题,那时就明白是编码没设置好导航,现在的Python连mssql数据库也同样出现这问题,问题一样,解决的办法当然也会相似,现在我们来看看解决方法。  python一直对中文支持的...
    99+
    2023-01-31
    乱码 中文 python
  • Redhat AS4终端中文乱码怎么解决
    本篇内容主要讲解“Redhat AS4终端中文乱码怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Redhat AS4终端中文乱码怎么解决”吧!修改/etc/sysconfig/i18n文...
    99+
    2023-06-10
  • mysql toad中文乱码如何解决
    这篇文章主要介绍了mysql toad中文乱码如何解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇mysql toad中文乱码如何解决文章都会有所收获,下面我们一起来看看吧。...
    99+
    2023-02-15
    mysql toad
  • mysql中文乱码记录
    0.中文乱码 1.查看mysql中表结构 show create table log_data charset为utf8,代码端:通过gorm修改 在创建表时候修改(这里在连接数据库时已经修改过了,但是没有修改成功) //db为已...
    99+
    2021-09-04
    mysql中文乱码记录
  • mysql存储中文乱码
    表现 前端页面,封装到html里的中文可以显示,和后台相关的中文显示都是 ??? 。查看network请求,传参正常。 查看mysql编码,是utf8。再看连接数据库的JDBC设置,也是utf8。 解决 问了同事,把 /etc/m...
    99+
    2016-01-04
    mysql存储中文乱码
  • mysql中文查询乱码如何解决
    本篇内容介绍了“mysql中文查询乱码如何解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2023-05-12
    mysql
  • MYSQL中文乱码问题如何解决
    这篇文章主要介绍了MYSQL中文乱码问题如何解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇MYSQL中文乱码问题如何解决文章都会有所收获,下面我们一起来看看吧。一、乱码的原因: client客户端的编码不是...
    99+
    2023-07-02
  • mysql日文乱码如何解决
    这篇文章主要讲解了“mysql日文乱码如何解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mysql日文乱码如何解决”吧! m...
    99+
    2023-02-16
    mysql
  • MySQL中文乱码怎么办
    这篇文章给大家分享的是有关MySQL中文乱码怎么办的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。前言:MySQL是我们项目中非常常用的数据型数据库。但是因为我们需要在数据库保存中...
    99+
    2022-10-19
  • mysql csv中文乱码问题如何解决
    这篇文章主要讲解了“mysql csv中文乱码问题如何解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mysql csv中文乱码问题如何解决”吧!mysq...
    99+
    2023-02-14
    mysql csv
  • mysql注释是中文乱码如何解决
    小编给大家分享一下mysql注释是中文乱码如何解决,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!mysql注释是中文乱码的解决办...
    99+
    2022-10-18
  • mysql数据库中文乱码如何解决
    mysql数据库中文乱码的解决方法:更改数据库安装时的字符编码。打开mysql安装目录。找到my.ini文件,以记事本的方式打开。直接修改配置文件的字符编码为utf8。default-character-set=utf8character-...
    99+
    2022-10-10
  • java中常见的中文乱码总结
    在Java中,常见的中文乱码问题主要有以下几种情况:1. 字符串编码不一致:在Java中,字符串是以Unicode编码表示的,而在进...
    99+
    2023-08-11
    java
  • vscode终端输出中文乱码问题解决图文教程
    目录乱码原因方法一(永久性)方法二(永久性)强力推荐!!!!!!!!!!!附加(CMD修改成旧控制台)方法三(临时性)总结解决vscode终端输出中文乱码问题,强推方法二,少走几年弯...
    99+
    2023-01-03
    vscode控制台中文输出乱码 vscode输出中文乱码 vscode输出乱码怎么解决
  • VScode运行C++中文终端乱码的解决方案
    目录问题原因查看VSCODE编码方式查看终端编码方式解决办法更改VSCODE编码方式选通过编码保存选择编码方式为gbk总结问题 Vscode编辑器中中文显示正常 F5调试运行后中文...
    99+
    2023-01-06
    VScode 终端乱码 VScode c++中文乱码 C++中文终端乱码
  • CentOS终端命令行显示中文乱码的问题如何解决
    这篇文章主要讲解了“CentOS终端命令行显示中文乱码的问题如何解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“CentOS终端命令行显示中文乱码的问题如何解决”吧!安装CentOS的时候...
    99+
    2023-06-10
  • mysql 5.6中文乱码怎么办
    这篇文章主要为大家展示了“mysql 5.6中文乱码怎么办”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“mysql 5.6中文乱码怎么办”这篇文章吧。mysql...
    99+
    2022-10-19
  • mysql jdbc中文乱码怎么办
    这篇文章将为大家详细讲解有关mysql jdbc中文乱码怎么办,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 mysql jdbc中文乱码的解...
    99+
    2022-10-19
  • 如何解决MySQL使用中文乱码问题
    这篇文章给大家分享的是有关如何解决MySQL使用中文乱码问题的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1、中文乱码1.1、中文乱码 create table user(name&...
    99+
    2023-06-28
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作