位置: 编程技术 - 正文

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关闭连接命令)

  • 出口货物退(免)税管理办法
  • 个人所得税手续费返还时间
  • 申请纳税申报怎么申报
  • 小规模免税的税额怎么处理
  • 以前年度应收账款无法收回的账务处理
  • 结转税金为贷方怎么结转?
  • 吸收合并控股合并新设合并的区别
  • 事业单位经营结余为负数的原因
  • 该期已经申报此税种且数据已提交,不能预约扣款
  • 学校的房子归哪里管
  • 核定征收分几种
  • 记账凭证填制的内容
  • 发票报销增值税
  • 坏账准备的计提应当关注
  • 消费税的计算公式推导过程
  • 进料加工可分为
  • 跨行汇入会计分录
  • win7显示更新失败怎么办啊
  • win10电脑设备管理器在哪
  • php str函数
  • vue.js前端
  • win7纯净版本
  • php生成html
  • 以银行存款交纳欠缴税金会计分录
  • php二维数组按某个键值排序
  • 微信公众号php开发教程
  • 装修费用当月摊还是次月摊销
  • javaweb总结笔记
  • golang char
  • userpasswords
  • 印花税申报完成如何缴纳
  • 赠送礼品账务处理会计分录
  • 税控服务费在电子税务局表一里怎么填写
  • 发票报销可以跨年吗
  • 文化事业建设费税收优惠2023
  • 织梦可以放两个模板吗
  • 加计扣除所得税处理
  • 融资租入的固定资产需要计提折旧吗
  • sqlserver强制转换为字符
  • sql中循环语句怎么写
  • 物业公司一般纳税人简易征收
  • 库存商品期末余额怎么计算
  • 收入费用表格式
  • 如何把有余额的账单删除
  • 短期借款财务处理
  • 向投资者分配现金股利的会计分录?
  • 企业处置子公司
  • 全面推开营改增政策指引
  • 小规模纳税人采用简易计税方法征收增值税
  • 安全生产费相关规定
  • 企业当年实现的净利润即为企业当年可供分配的利润
  • 兼职人员属于雇佣人吗
  • 成本类科目借贷规则
  • 残保金在网上怎么申报
  • 把excel表格里的文字复制到word
  • redhat安装yum
  • window2008 64位系统没有office组件问题分析及解决
  • 创建svn库
  • 如何利用批处理实现更改ip修改
  • 2015微软发布会
  • 安装centos6.10
  • 苹果手机
  • git连接linux服务器
  • ramaint.exe - ramaint是什么进程 有什么用
  • win7桌面快捷方式图标没箭头
  • linux发布项目
  • 铁嘴啥意思
  • js继承的关键字
  • 好好了解 英文
  • shell脚本中判断grep的结果
  • 防止重复调用接口
  • python的argparse用法
  • jquery示例
  • 股权转让申报期限
  • 狠抓组织收入工作
  • 广东交通定额发票在哪开
  • 国家税务培训信息网官网
  • ca登录的用户名和密码分别是什么
  • 浙江电子税务局app
  • 对外销售产品
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设