数据库与eclipse编辑器的字符集设置

问题:

Mysql图形用户工具sqlyog,eclipse中执行sql语句(插入语句)插入数据库表格的字符串在sqlyog的表格中显示为“?”问号。(提示:插入语句中的字段name是赋值为字符串”张三”,表中显示“??”)。

 

之所以会出现这个问题,主要是没有设置好合适的字符集类型。

首先我们要清楚一点,即所下载的Mysql服务器它本身就有默认的字符集编码类型。

查看mysql服务器的字符集类型,通过命令行输入命令:

mysql

进入mysql命令行,如图:

再输入查看数据库字符集类型的命令:

show variables like ‘character%’;

如图中的character_set_database(客户端)的字符集和character_set_server(服务端)的字符集类型为latin1(即字符编码类型为拉丁字1,这是mysql默认的)。

 

Latin1是ISO-8859-1的别名,有些环境下写作Latin-1。ISO-8859-1编码是单字节编码,向下兼容ASCII,其编码范围是0x00-0xFF,0x00-0x7F之间完全和ASCII一致,0x80-0x9F之间是控制字符,0xA0-0xFF之间是文字符号。ISO-8859-1收录的字符除ASCII收录的字符外,还包括西欧语言、希腊语、泰语、阿拉伯语、希伯来语对应的文字符号。欧元符号出现的比较晚,没有被收录在ISO-8859-1当中。”——引自百度百科。

从百度百科的解释中我们可以很清楚地了解到latin1编码方式收录的字符并不包括汉字语言的。

 

因此,若我们想要通过eclipse等的编辑器执行DML语句(即insert、update、delete这类sql语句)去影响表格里的汉字信息,比如像问题里的往表格里插入张三且正常显示,则可以按照以下的步骤:

一、修改mysql服务器的服务端和客户端的字符编码方式

1、我的电脑->属性(服务)->mysql(mysql服务名称)右键->属性->停止服务

 

2、进入Mysql文件的根路径->my.ini

 

修改[mysqld]下的character-set-server=utf8

3、启动mysql服务!

 

查看重新设置了字符集类型的mysql的字符集信息,如下图:

 

 可看到character_set_database和character_set_server的字符集类型变成utf8了。

 

二、设置好eclipse编辑器的字符集类型

菜单栏中:File->properties

三、设置好数据库和数据库表格的字符编码方式

如果你是在图形化管理MYSQL数据库的工具里创建数据库和表格的,例如我是用sqlyog;

设置好数据库和表格的字符集,排序规则。

 

如果你通过执行sql语句建立数据库和表格的,sql可以这么写:

Mysql创建数据库并设置字符集和排序规则:

create database {database name} CHARACTER SET utf8 COLLATE utf8_general_ci
CHARACTER : 字符集(多数情况下要选择一个支持中文的字符集)
COLLATE : 排序规则,一般来说每种CHARSET都有多种它所支持的COLLATE,并且每种CHARSET都指定一种COLLATE为默认值。例如Latin1编码的默认COLLATE为latin1_swedish_ci,GBK编码的默认COLLATE为gbk_chinese_ci,utf8mb4编码的默认值为utf8mb4_general_ci Case Insensitive——引自 博客园 Copyright © 2021 xiaofei01gm

Mysql创建表格并设置字符集和排序规则:

CREATE TABLE 表名(列名1 数据类型,列名2 数据类型)CHARACTER SET utf8 COLLATE utf8_general_ci

例如:创建一个表名为people的表格

CREATE TABLE people(id int,name varchar(50))CHARACTER SET utf8 COLLATE utf8_general_ci

至此,通过sql语句(插入语句)插入数据库表格的字符串在图形化管理MYSQL数据库的工具sqlyog里的信息表中显示为“?”问号这个问题就解决啦!

我们可以来分析一下为什么一开始‘张三’在信息表里面显示的是‘??’,

通过下面这个式子应该能迅速弄明白

Utf8>latin1>ascll

上面是三个字符集所包括的字符范围大小的关系,‘张三’是汉字字符,utf8认识它,但是latin1不认识它,所以显示‘??’,我试过将eclipse的字符集设置为latin1,此时汉字都变成了乱码,但是执行完sql插入语句之后,信息表格里面的信息与乱码内容完全一样,也就是说utf8认识这些乱码,所以不会显示为‘?’。

这个是题外话,已解决问题的小伙伴可以一起讨论。

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值