网站首页 > 教程文章 正文
对于数据库来讲,有一个很重要却容易忽略的重要概念:字符集和字符编码。
1.字符集:是多个字符(英文、汉字、其他国家语言字符)的集合
常见的字符集有ASCII字符集、LATIN1字符集、GBK字符集、UTF8字符集。
ASCII字符编码:一个英文字母(不分大小写)占用一个字节的空间,一个中文汉字占用两个字节的空间。
LATIN1字符编码:是ASCII字符编码的扩展。
GBK字符编码,是对GB2312编码的扩展,使用两个字节表示一个字符。
UTF8字符编码:一个英文字符占用一个字节的存储空间,一个中文(含繁体)占用三个字节的存储空间。
在MYSQL中通过如下方式,查看字符集相关信息
(1)查看连接客户端、连接、数据库服务器、数据库等字符集
SHOW VARIABLES LIKE '%char%';
需要注意的是以下几个参数:
character_set_client:表示客户端使用的字符集。
character_set_connection:表示连接数据库时的字符集,如果程序中没有指明连接数据库使用的字符集类型则按照这个字符集设置。
character_set_server:表示服务器使用的字符集。
character_set_database:表示创建数据库使用的字符集。
character_set_results:表示数据库给客户端返回时使用的编码格式。
MYSQL从发送请求到获得结果的经过几次字符集的转换过程,如下图:
从上面可以看到character_set_database和character_set_server的编码不一样,一个为utf8,另一个为utf8mb4。这两个有什么不同呢?
在MYSQL5.5.3之前,utf8编码最大仅支持3个字节表示一个字符。在MYSQL5.5.3之后,增加了utf8mb4,最大可用使用4个字节表示一个字符。其可以用于支持Emoji 表情(Emoji是一种特殊的 Unicode 编码)和一些不常见的汉字、新增的unicode字符等。
所以在mysql中最好使用utf8mb4字符集。
(2)查看某个数据库、某个表、某个字段的字符编码
1)查看某个数据库的字符编码:
show create database dbname; 或者
select * from information_schema.schemata where schema_name = dbname;
2)查看某个表的字符编码:
show create table tablename;
3)查看某个字段的字符编码:
show full columns from tablename;
(3)修改客户端、连接、结果字符编码,修改数据库、某个表、某个字段的字符编码
1)修改客户端、连接、结果字符编码:
set names 'utf8';
相当于同时:
set character_set_client = utf8;
set character_set_results = utf8;
set character_set_connection = utf8;
2)修改数据库的字符编码:
alter database database_name character set xxx;
修改库的字符集,影响后续创建的表的默认定义;对于已创建的表的字符集不受影响。
3)修改数据表的字符编码:
alter table table_name character set xxx;
修改表的字符集,影响后续该表新增列的默认定义,已有列的字符集不受影响。
alter table table_name convert to character set xxx;
同时修改表字符集和已有列字符集,并将已有数据进行字符集编码转换。
4)修改数据表的字段的字符编码:
alter table table_name modify col_name varchar(col_length) character set xxx;
临时修改编码:
SET GLOBAL character_set_server=utf8; 临时修改服务器编码,重启mysql服务后失效
SET GLOBAL character_set_database=utf8; 临时修改数据库编码,重启mysql服务后失效
利用KETTLE向MYSQL推送数据时出现乱码的解决方案
比如向mysql数据库中推送,出现这样的错误:Incorrect string value: '\xF0\x9F\x91\x80' for column
可以在kettle的目的数据库连接中,设置如下即可。
第一步:在【高级】中,输入:set names utf8mb4;
第二步:在【选项】中,输入:defaultFetchSize 500,useCursorFetch true,characterEncoding utf8,即可。
猜你喜欢
- 2024-12-23 了解MySQL的字符集 mysql字符集问题
- 2024-12-23 go-admin开源项目,快速搭建一个管理后台系统,直接二次开发上线
- 2024-12-23 Windows安装Gitea windows安装gitlab
- 2024-12-23 MySQL字符集和排序规则 mysql字符集和排序规则详解
- 2024-12-23 Python开发 常见异常和解决办法 python中会出现哪些异常
- 2024-12-23 mysql1366错误:字符集冲突导致插入数据异常,解决方案
- 2024-12-23 MySQL-8.0.26免安装版配置步骤 mysql5.7.32免安装教程
- 2024-12-23 MySQL8免安装版(Windows)安装配置
- 2024-12-23 MySQL 8.0.25 免安装版完整配置步骤(收藏)
- 2024-12-23 MySQL 数据库的小白安装与登录 mysql数据库安装教学视频教程
- 最近发表
- 标签列表
-
- location.href (44)
- document.ready (36)
- git checkout -b (34)
- 跃点数 (35)
- 阿里云镜像地址 (33)
- qt qmessagebox (36)
- md5 sha1 (32)
- mybatis plus page (35)
- semaphore 使用详解 (32)
- update from 语句 (32)
- vue @scroll (38)
- 堆栈区别 (33)
- 在线子域名爆破 (32)
- 什么是容器 (33)
- sha1 md5 (33)
- navicat导出数据 (34)
- 阿里云acp考试 (33)
- 阿里云 nacos (34)
- redhat官网下载镜像 (36)
- srs服务器 (33)
- pico开发者 (33)
- https的端口号 (34)
- vscode更改主题 (35)
- 阿里云资源池 (34)
- os.path.join (33)