iis服务器助手广告
返回顶部
首页 > 资讯 > 数据库 >如何进行mysql乱码产生的探讨
  • 736
分享到

如何进行mysql乱码产生的探讨

2024-04-02 19:04:59 736人浏览 八月长安
摘要

这期内容当中小编将会给大家带来有关如何进行Mysql乱码产生的探讨,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。 实验一 1。首先,在下面情况下: mysql>

这期内容当中小编将会给大家带来有关如何进行Mysql乱码产生的探讨,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

实验一

1。首先,在下面情况下:

mysql> show variables like 'character_set_%';

+--------------------------+---------------------------------------+

| Variable_name            | Value                                 |

+--------------------------+---------------------------------------+

| character_set_client     | latin1                                |

| character_set_connection | latin1                                |

| character_set_database   | latin1                                |

| character_set_filesystem | binary                                |

| character_set_results    | latin1                                |

| character_set_server     | latin1                                |

| character_set_system     | utf8                                  |

| character_sets_dir       | D:\Programs\mysql5045\share\charsets\ |

+--------------------------+---------------------------------------+

建表,并加入3个记录:大,阿,爱

2。set character_set_results=utf8;

则显示:(cmd窗口中,cmd窗口代码页936)

大->麓贸

阿->掳垄

爱->掳庐

分析编码:

大U:5927,GBK:B4F3

麓U:9E93,GBK:C2B4

贸U:8D38,GBK:C3B3

阿U:963F,GBK:B0A2

掳U:63B3,GBK:C2B0

垄U:5784,GBK:C2A2

爱U:7231,GBK:B0AE

掳U:63B3,GBK:C2B0

庐U:5E90,GBK:C2AE

3。改成set character_set_results=gb2312;

一样是乱码

4。结论:

乱码的产生,是由于单字节向多字节扩展引起的。B0A2 如果作为单字节存储(虽然表示的是1个汉字,但是因为是latin1单字节,所以认为B0A2是不相关的两个字符),此时如果把character_set_results变成utf8多字节,那么数据库mysql 会试图把每个单字节扩展成近似的(不知道具体的算法)双字节。所以乱码

反之,多字节向单字节转换时,不会有变动,仅仅是原来2各字节表示的一个字符‘B0A2’变成了表示两个字符而已。---- 这个说法经验证是错误的。

数据库存储的内容(磁盘上,内存里)不会受character_set_的影响,只是提交,查询的过程中,受到字符集转换的影响。

实验二

1。

create table y (id int, name char(4)) default charset gb2312;

2。在不改变默认character_set_ 是latin1的情况下,如果插入一个汉字,则显示乱码

3。改成set names gb2312,显示没问题(cmd窗口中,cmd窗口代码页936)

4。我原以为如上述实验1种的结论2,“多字节向单字节转换时,不会有变动”。所以我开始以为,set names gb2312 后,把character_set_results 改成latin1,显示不会出问题。结果,

一个汉字,则显示一个问号;两个汉字,则显示两个问号的乱码(估计一个问号代表一个字符)。也就是说,改成character_set_results = latin1后,多字节的数据存储,在向单字节表示转换时,mysql把提出的信息“缩水了”,把两个字节,换算成了一个字节。

5。如何,不让mysql缩水呢,我想到了character_set_results = binary;结果,果然显示正常。

PS

开发的使用mysql的应用程序,是对应作为独立的使用自己的character_set_client的字符集的

cmd 窗口登陆mysql,也是作为一个独立的,拥有自己character_set_client变量的应用

同理,打开不同的cmd窗口,都拥有独自的character_set_client变量

实验三07/16/2010

1。建一个默认字符集utf8的表(用navicat ,在utf8的界面下 代码页65001),并且插入utf8编码的汉字;大学;

2。切换到mysql console(代码页936)

3。set names gbk; 然后显示刚才所建立的表,能正确现实吗?---- 能!当然,只把character_set_results 成gbk,也能正常显示

实验四

1。mysql console(代码页936)建立一个表x3 ( name char(32) ),默认字符集default charset gbk;

2。默认环境变量  

| character_set_client     | latin1

| character_set_connection | latin1

| character_set_database   | latin1

| character_set_filesystem | binary

| character_set_results    | latin1

| character_set_server     | latin1

| character_set_system     |utf8 //不知道对以下过程、分析是否有影响

character_set_client   character_set_connection character_set_results 是latin1的情况下,插入数据:insert x3 values('大');

显示:ERROR 1406 (22001): Data too long for column 'name' at row 1

3。set character_set_client=gbk;然后insert x3 values('大');插入没有问题,但显然,数据经过 (character_set_connection=latin1)的转换,已经是有损了

4。不管character_set_results 设不设成gbk,都不能正常显示结果

5。set names gbk;则插入现实都没问题。并且此时,一个uf8字符集的表的显示也没问题(实验三)。而且进行连接查询,亦没问题。

6。当然,set names utf8,如果在一个utf8的软件界面上,显示输出也没问题(navicat 验证了)

7。如果设成set names binary。在936代码页的显示界面上,可以看到,x3依然可以正常现实;但像实验三那样建的表就不能正常显示了。

--------

分析第2点:Data too long for column 'name' at row 1

我的char 够长,插入数据够短,所以不是数据太长了。也就是说这个提示是错误的。

我知道,如果表x3 默认字符集 是latin1的话,插入是没问题的(一直以来都是这么玩的);这是因为,虽然输入端mysql console 代码页是936,但因为三个主环境变量character_set_c%都是latin1,所以,mysql 认为insert x3 values('大') 输入的是2个字符(当然,如果从utf8界面输入,可能就认为是输入3个字符)。存储的自然也是2个字符。显示的时候也是显示的2个字符,只不过936代码页把这两个字符自然组合,显示成汉字了(早期环境常见现象)。

当默认字符集变为gbk的时候,发生了什么?不知道。。。。。

实验五

一个很狗屎的问题出现了:936  console

环境变量如 实验一.1。

mysql> set names latin1;

Query OK, 0 rows affected (0.00 sec)

mysql> create table x4 (

    -> name char(32) primary key);

Query OK, 0 rows affected (0.09 sec)

mysql> drop table x4;

Query OK, 0 rows affected (0.06 sec)

mysql> create table x4 (

    -> name char(32) primary key) default charset utf8;

Query OK, 0 rows affected (0.10 sec)

mysql> insert x4 values('乃');

Query OK, 1 row affected (0.04 sec)

mysql> create table x5 (

    -> name char(32) primary key) default charset gbk;

Query OK, 0 rows affected (0.09 sec)

mysql> insert x5 values('乃');

ERROR 1406 (22001): Data too long for column 'name' at row 1

mysql>

结论,我实在对实验四中分析的第3点做出结论。character_set_system utf8 有关~~  

上述就是小编为大家分享的如何进行mysql乱码产生的探讨了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程网数据库频道。

您可能感兴趣的文档:

--结束END--

本文标题: 如何进行mysql乱码产生的探讨

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

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

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

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

下载Word文档
猜你喜欢
  • 如何进行mysql乱码产生的探讨
    这期内容当中小编将会给大家带来有关如何进行mysql乱码产生的探讨,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。 实验一 1。首先,在下面情况下: mysql>...
    99+
    2024-04-02
  • 如何进行mysql的备份与恢复的探讨
    如何进行mysql的备份与恢复的探讨,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1,我现在的备份方案为:A(master)-...
    99+
    2024-04-02
  • 如何进行对REMOTE_LOGIN_PASSWORDFILE参数的探讨
    本篇文章给大家分享的是有关如何进行对REMOTE_LOGIN_PASSWORDFILE参数的探讨,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。...
    99+
    2024-04-02
  • 探讨如何解决Golang的文件乱码问题
    最近学习 Golang 的过程中,遇到了一个非常让人头疼的问题——文件乱码。在这篇文章中,我们将探讨如何解决 Golang 中的文件乱码问题。一、文件编码在讨论如何解决 Golang 中的文件乱码问题之前,我们需要了解有关文件编码的一些基础...
    99+
    2023-05-14
  • 探讨如何在Go中进行DTO转换
    Go是一门优秀的编程语言,被广泛用于微服务和Web开发中。在Go应用程序中,DTO(Data Transfer Object)转换是常见的问题。本文将探讨如何在Go中进行DTO转换。一、什么是DTODTO是一个通用的设计模式,用于解决Jav...
    99+
    2023-05-14
  • 如何进行数据库权限分配的探讨
    本篇文章为大家展示了如何进行数据库权限分配的探讨,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。首先我们先了解下数据库的权限相关的内容主体“主体” 是可以请求 SQL...
    99+
    2024-04-02
  • 如何进行对于VS2005图片法进行研究与探讨
    如何进行对于VS2005图片法进行研究与探讨,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。今天打算把工作逐步转移到系统上来,所以先给VS2005打上sp1补丁。以前听说安装...
    99+
    2023-06-17
  • win11强制关机产生乱码如何解决
    这篇文章主要介绍了win11强制关机产生乱码如何解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇win11强制关机产生乱码如何解决文章都会有所收获,下面我们一起来看看吧。方法一: 首先,我们进入系统,在搜索框...
    99+
    2023-07-01
  • 探讨如何设置PHP代码执行时间
    PHP是一种强大的服务器端脚本语言,它被广泛地应用于Web开发领域。在PHP中,我们经常需要设置代码执行时间,以避免一些长时间运行的操作,如查询大型数据库、处理大量数据等,影响服务器性能,甚至导致服务器崩溃。接下来,我们将探讨如何设置PHP...
    99+
    2023-05-14
  • 如何进行微信红包实现原理探讨
    这篇文章将为大家详细讲解有关如何进行微信红包实现原理探讨,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一、背景以下内容基于QCon某高可用架构群讨论总结群里某同学问起微信红包架构,腾讯财付通...
    99+
    2023-06-04
  • 如何进行C#回车切换焦点实现的探讨
    今天就跟大家聊聊有关如何进行C#回车切换焦点实现的探讨,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。C#回车切换焦点实现的探讨,我们在学习 Windows程序中Tab键是默认的切换输...
    99+
    2023-06-17
  • 探讨如何将Go应用程序部署到生产环境中(步骤)
    在现代软件开发中,快速且可靠的部署程序是至关重要的。部署软件涉及许多领域,其中之一是选择最适合您特定情况的技术栈。在本文中,我们将探讨使用Go编程语言进行部署时的过程和流程。Go是一种由谷歌开发的编程语言,它是一种静态类型的编程语言,其设计...
    99+
    2023-05-14
  • 如何进行Java多线程同步机制的深入探讨
    今天就跟大家聊聊有关如何进行Java多线程同步机制的深入探讨,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。在很多程序员的脑海中Java多线程都会占据一定的位置,众所周知,在Java多...
    99+
    2023-06-17
  • 如何进行C++代码的代码生成?
    如何进行C++代码的代码生成代码生成是软件开发中的一个重要环节,可以提高开发效率和代码质量。而对于C++开发来说,代码生成更是具有重要意义。本文将介绍如何进行C++代码的代码生成,帮助开发者提高开发效率和代码质量。使用模板库使用模板库是进行...
    99+
    2023-11-02
    - C++代码生成 - 代码自动生成 - C++编程工具
  • mysql如何产生死锁的
    这篇文章将为大家详细讲解有关mysql如何产生死锁的,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。mysql中死锁<DeadLock>:是指两个或两个以上的进...
    99+
    2024-04-02
  • 怎样进行Java线程控制权源代码的深入探讨
    怎样进行Java线程控制权源代码的深入探讨,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Java线程控制权的问题十分重要,我们在不断的学习中需要不断的注意相关的问题。下面我们就...
    99+
    2023-06-17
  • 如何探讨WinForm不同代码的实现
    这篇文章给大家介绍如何探讨WinForm不同代码的实现,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。在进入正文之前,想请大家先欣赏下面两段代码://这是一个控制台程序,请先添加System.Windows.Form.d...
    99+
    2023-06-17
  • mysql死锁是如何产生的
    这篇文章主要介绍mysql死锁是如何产生的,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!mysql是一种关系型数据库管理系统,使用的 SQL 语言是用于访问数据库的最常用标准化语言。...
    99+
    2024-04-02
  • 生产场景如何对linux系统进行分区
    这篇文章主要介绍生产场景如何对linux系统进行分区,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!前言:我们买房子时,会考虑1室1厅,2室1厅,或3室2厅......!那么具体如何选,是要看手中的money和家庭的人...
    99+
    2023-06-12
  • 如何进行大数据中报表工具制表能力的探讨
    这期内容当中小编将会给大家带来有关如何进行大数据中报表工具制表能力的探讨,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。所谓报表工具,最核心最本质的功能,就是它的制表能力,即是否能够不写代码而制作出自己需要...
    99+
    2023-06-03
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作