位置: 编程技术 - 正文

Windows服务器MySQL中文乱码的解决方法(服务器配置mysql)

编辑:rootadmin

推荐整理分享Windows服务器MySQL中文乱码的解决方法(服务器配置mysql),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:服务器操作mysql,在windows中mysql服务进程名是什么,mysql服务器在哪里开启,mysql的服务器端安装在哪里了,服务器配置mysql,服务器 mysql,windows mysql服务,windows mysql服务,内容如对您有帮助,希望把文章链接给更多的朋友!

我们自己鼓捣mysql时,总免不了会遇到这个问题:插入中文字符出现乱码,虽然这是运维先给配好的环境,但是在自己机子上玩的时候咧,总得知道个一二吧,不然以后如何优雅的吹牛B。

如果你也遇到了这个问题,咱先不谈原因,在PC自带的cmd中(或者是mysql安装版安装后的Command Line客户端,又或者是工作用的SecureCRT)试试效果。进入mysql环境,从头开始操作。假设你的客户端编码是gbk或者utf8(这么说太不严谨了,怎么能假设呢,但是一般来说假如安装后没动过,cmd是gbk编码,mysql安装后的Command Line客户端没装不记得,CRT看看Session Options里面的编码设置,一般也会设置成utf8),执行一些语句:

1. 设置编码客户端、连接、返回结果的字符集,先设置成latin1

2. 然后执行下面的看下各个字符是不是这样的

如果你的character_set_client、character_set_connection、character_set_results不是latin1,可以这样执行,把他们单个分别设置成latin1,比如设character_set_client,其他两个一样,确保这三个均是latin1(第一步的sql语句实际做的就是这件事),

3. 单独创建一个数据库db_latin1,当然是很简单的了,测试嘛,创建时就设置数据库的编码的为latin1

4. 在它下面创建一张表tab_latin1,字符集也设置成latin1,这里不设置字符也行,数据库级已经设置了,这里只创建一个name字段

5. 插入一些中文字符到表中,先说明,本机的cmd编码是gbk,查看方法是右键属性->选项,看下当前代码页即可知道

6. 查看下结果

看吧,正常显示中文了~~~

OK,都到这儿了你就不想知道“为什么我那样设置就是不行”么,当然得往下看看是不。上图:

我们知道mysql是客户端-服务器软件,每次操作都是客户端向服务端发送请求,然后可能会返回一些结果,这之间插入的字符经过了一系列转换。首先供我们编辑的客户端本身就有一种编码,比如PC端的命令行默认是gbk,PC自带notepad新建文本文件默认是ANSI,常用的文本编辑器如notepad++,我们可能会设置默认编码为utf8,就是说在编辑器上编辑,你所看到的本身就是一种编码了。

Windows服务器MySQL中文乱码的解决方法(服务器配置mysql)

1. 在客户端编辑后,首先转化为client对应的字符集,即上面打印出的character_set_client变量指示的字符集;

2. 向数据库服务发送请求,发送过程中,转化为connection对应连接字符集,即character_set_connection变量对应字符集;

3. 存储到数据库中,转化为数据库存储的字符集,可能是server级别(character_set_server)、database级别(character_set_database)或者表级别和列级别(这里还要细说下);

4. 数据库收到请求,执行查询得到结果,再次转化为results对应字符集,即character_set_results变量所指,该结果返回到客户端上;

5. 结果来了,是按照results字符集编码的,那我们让这个结果显示的客户端工具它支持什么样的编码也很重要,这决定了它如何去解码结果。假如这个结果是utf8编码,返回给某客户端了,但这个客户端只有ANSI编码,那当然不能显示正常,比如它返回到SecureCRT,结果显示不正常,但是CRT支持多种编码,我们手动将它调成utf8编码,那它就又显示正常了,所以严格来说这一步算不上,只是跟客户端条件有关,毕竟当我们知道后将客户端调整成正常的编码或者本来就支持转换results的编码后,这一步就不存在了。

在上面的第3步中,从连接字符集编码转化为数据库存储使用的编码时,要分几种情况,一般我们在装mysql时,特别是位安装版本时,中间有一个选择编码的步骤,大多会选择utf8编码,这时系统就可能会把一系列的字符集变量均设置成了utf8,比如character_set_server、character_set_connection、character_set_database等等。也就是说这个character_set_server变量在你启动mysql服务的事先就被设置好了,我们可以称它为服务器级编码,那我们在建表前,先得创建数据库,在创建数据库时,我们知道可以显式指定编码的,比如最开头时我创建时显式指定采用latin1字符集,也可以不指定,如果不指定的话,它将采用服务器级的字符集,即character_set_server,同理在创建表时,也可不指定编码,不指定的话,采用数据库级编码,级character_set_database,更加同理在创建表中列字段时也可指定编码,不指定编码的话将采用表级别字符集,因此有这么一个继承关系在这:

character_set_server => character_set_database => character set in table(无此变量) => character set column(无此变量)

mysql创建表可以细化到这四个层次,不是每一层都必须指定,默认使用上一级的字符集(字符校对规则也是这样的,collation,稍后说明)。

那么有没有可能character_set_server没有指定呢,如果任何地方都没指定,特别是非安装版中,如果忘了,mysql在编译时默认采用latin1,为了应对这种情况,特别是非安装版本中在配置mysql时,经常需要手动配置mysql配置文件mysql.ini,其中就有大概这么一项:

在配置文件中默认采用的字符集,因此如果指定了character_set_server默认就会采用它,这样其他层次都不指定的话依次继承。

其他的,character_set_filesystem:把操作系统上的字符转换成此字符集,即把character_set_client转换成character_set_filesystem,默认为binary则不转换,character_set_system:此变量总是utf8,为存储系统元字符的字符集,如表名、列名、用户名等,character_set_dir:很明显是指示一个目录的变量,打开这个目录,里边存放的是mysql的各种用于编码字符集的xml格式文件。以上三个值在解决乱码问题时基本可忽视。

好,转换流程和各变量的含义清楚了,就要搞清楚哪些字符集编码之间可以转换,能转换可能也是在一定编码范围内的字符能转换,不至于出现乱码甚至损坏。损坏了就再也无法正确显示了,哪怕设置是正确的,还原是还原不回来的。当然关于字符之间的转化情况很多,字符集有那么多种,随便两个之间都可以转换一下试试,不能一一列举,可以参考这篇文章: mysql使用者经常利用Latin1的这种全覆盖特性,将其它类型的字符串,gbk,utf8,big5等,保存在latin1列中。保存的过程中没有数据丢失,只要原样取出来,便又是合法的gbk/utf8/big字符串。如果将gbk字符串保存在utf8列中,则gbk字符串中那些不符合utf8编码格式的内容,会被抛弃,保存的内容无法原样取出,数据实际上遭到了破坏。

综上,如果我们看到一个字段的字符集是latin1的,那么,他保存的可能是任何编码的字符串;而一个字段的字符集是utf8或者gbk的,那么他保存的就应该是utf8或gbk的——除非数据库的使用者用错了。】

我没有深入学习过utf8、gbk编码的细节,极可能说的不准确,只知道简单的ASCII编码(-_-),但是可以了解个全局情况。从上面来看,latin1的单字节编码方式很有用,其他的编码可以转换为它再转回去而不至于丢失内容。所谓单字节编码就是挨着一个个来,我理解是,比如圣诞节到了,你要送妹子一箱苹果,为制造浪漫,商铺提供两种包装方式,一是按个数来,即单个苹果包装进一个盒子,来一个包装一个,这样,妹子在拆完所有的盒子后完完整整的可以还原为一个个完整的和一箱完好无损的苹果,二是按重量来,每个盒子限重2两、3两、6两,这样在包装时,若刚好重3两的当然可以完整的放进一个盒子,但是若不够或者多了,勉不了要切开苹果,或者再往盒子中添加其他的部分苹果,这样的话,妹子再无论怎样拆开盒子,都会得到一箱残缺不堪的苹果了,因为你在按照这种包装方式进行时,已经破坏了单个苹果的完整性,现在还原不回来了~我们的字符集编码转换就是在做这种重新包装的工作,latin1恰好就像单个苹果包装,而utf8就像第二种方式。

而刚才说的完全匹配的情况是,你去买一箱苹果,箱子里边的所有苹果重量已经恰好要么是2两,要么是3两或6两的,这样再按重量包装时当然就恰好分配了,得到的仍然是完整的苹果。

所以说白了,两种可行的方式是:

1. 所有变量均设置成latin1(set names latin1;),这样,即便我们所使用的编辑客户端编码多样(gbk或utf8),最终可以得到正确结果;

2. 所有的设置成gbk或者gb(国标编码,只用于简体中文),采用完全匹配;

3. 针对中间的转换过程,比如gbk输入,将character_set_client、character_set_connection视为latin1,character_set_database设为gb,建表时定字符集为gb,character_set_results也可以定为gb,当然这只是鸡肋,本质上还是用了latin1,gbk转latin1再转gb时只适用于简体。

最后,关于字符集校对规则,只了解一点。在我们设置mysql字符集时,mysql会自动给一个对应的校对规则,比如设置charset为utf8,默认的collation就是utf8_general_ci,gb字符集对应gb_chinese_ci,mysql命令查看所有校对规则是show collation,查看某一对应字符集的校对规就是show collation like 'utf8%'了。

字符集校对是一种对使用当前字符集时采用的排序、对比方式,即便同一种字符集,在不同的地区也是不同的对比方式,所以才有校对这么一说,比如utf8_general_ci,这个ci就是case insensitive,即大小写不敏感,采用它校对时,查询某字段值匹配时,大小写的记录都会出现,当然还有其他的规则,utf8打印出来一大坨,不细研究了~

去掉mysql连接时报警声音的方法 在使用命令行进入mysql时如果没有进行设置会有报警音很是吓人,使用这个命令可以去掉吓人的声音。mysql-hlocalhost-uroot-b-p起作用的就是-p。

Mysql字符串字段判断是否包含某个字符串的2种方法 假设有个表:CREATETABLEusers(idint(6)NOTNULLAUTO_INCREMENT,PRIMARYKEY(id),user_nameVARCHAR()NOTNULL,emailsVARCHAR()NOTNULL);初始化表,并添加些记录。truncatetableusersINSERTINTOus

8种MySQL分页方法总结 MySQL的分页似乎一直是个问题,有什么优化方法吗?网上看到网上推荐了一些分页方法,但似乎不太可行,你能点评一下吗?方法1:直接使用数据库提供

标签: 服务器配置mysql

本文链接地址:https://www.jiuchutong.com/biancheng/321365.html 转载请保留说明!

上一篇:对MySQL几种联合查询的通俗解释(mysql组合)

下一篇:去掉mysql连接时报警声音的方法(mysql关闭连接命令)

  • 科普一下发票知识
  • 车船使用税会打折么
  • 国企的注册资本也很少吗
  • 设备采购及安装属于工程还是货物
  • 不需要缴纳税款和服役的是形势户寺观户
  • 减免税款计入哪个科目
  • 2021年停车费税率
  • 如何在房产证上加父母名字
  • 出口货物预收账款会计分录
  • 当月忘记暂估怎么办
  • 利润表中所得税怎么算
  • 股东借款利息代扣代缴增值税是怎样算的?
  • 事业单位收到增值税专用发票抵扣联怎么办
  • 增值税发票备注栏怎么填写
  • 建筑业预交的增值税
  • 出口退税生产企业增值税附加税怎么申报
  • 作废的发票怎么处理
  • 增加实收资本印花税税目
  • 其他应收账款贷方表示什么意思
  • 报税营业成本包括管理费用吗
  • 防洪工程维护费取消
  • 未开票的增值税发票能验旧吗
  • 现金为负数时怎么做账
  • 春节发放物品计入什么科目
  • 汽车销售公司购买车辆会计科目
  • 没有权限使用网络资源,请与这台服务器的管理员联系
  • 最小巧的单反相机
  • 金融资产的会计处理方法
  • 免购车税政策
  • 上传图片照片
  • php字符串在另一个字符串出现
  • linux杀死程序
  • 个人简历html网页代码含效果图
  • php判断文件是否存在的函数
  • 企业纳税人识别号是什么
  • 企业需要交哪些税种?分别怎么交
  • 购进固定资产没有发票怎么入账
  • 老板买了手机,算入什么费用
  • 老板怎么从公户拿钱
  • 认证未抵扣往哪里记
  • 取得异常凭证企业所得税调整
  • 生产成本福利费如何分摊
  • 货物赔偿款计入什么会计科目
  • 负数发票要交税吗
  • 违约金罚款计入什么科目
  • 什么差旅费
  • 日记账处理数据流程图
  • 工业企业的材料
  • sqlserver日期计算年龄
  • solaris修改ip地址和主机名
  • win7防火墙如何添加允许
  • win1020h2累积更新
  • windows任务管理
  • mac所有窗口最小化
  • winxp系统介绍
  • 苹果mac 最新系统
  • windows1021h2镜像下载
  • win10每周更新
  • win8 控制面板
  • Android游戏开发入门
  • 如何制作批处理
  • django中的model
  • python选择器
  • 新版unity
  • 如何给textarea赋值
  • php与nodejs
  • sockaddr_in和sockaddr
  • shell 整数赋值
  • excel替换一行内容
  • unity 2d ik
  • jQuery webuploader分片上传大文件
  • 安卓动态图标怎么实现
  • javascript要怎么学
  • Python随机生成数字求最小的三个数字
  • 广东发票查询真伪网站
  • 广东省地方税务局
  • 从事农业种植是什么职业
  • 国家税务总局公务员招录公告
  • 中建七局企业精神是什么
  • 辽宁社保缴费公众号
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设