MySQL 字符集
文章目录
- 1.简介
- 2.支持的字符集
- 3.字符集级别
- 4.数据库字符集
- 5.数据表字符集
- 6.表字段字符集
- 7.字符串常量字符集
- 8.客户端字符集
- 参考文献
1.简介
MySQL 支持多种字符集,使您能够使用各种字符集存储数据,并根据给定排序规则执行比较。
MySQL 服务器默认字符集和排序规则分别是 utf8mb4 和 utf8mb4_0900_ai_ci,但是您可以在服务器、数据库、表、列和字符串字面量级别指定字符集。
2.支持的字符集
MySQL 支持多种字符集,包括多个 Unicode 字符集。
使用SHOW CHARACTER SET语句查看可用的字符集:
SHOW CHARACTER SETCharset |Description |Default collation |Maxlen|
--------|-------------------------------|-------------------|------|
armscii8|ARMSCII-8 Armenian |armscii8_general_ci| 1|
ascii |US ASCII |ascii_general_ci | 1|
big5 |Big5 Traditional Chinese |big5_chinese_ci | 2|
...
utf32 |UTF-32 Unicode |utf32_general_ci | 4|
utf8 |UTF-8 Unicode |utf8_general_ci | 3|
utf8mb4 |UTF-8 Unicode |utf8mb4_0900_ai_ci | 4|
或查看视图 INFORMATION_SCHEMA.CHARACTER_SETS:
SELECT * FROM INFORMATION_SCHEMA.CHARACTER_SETS
MySQL 8.0 开始,默认字符集改为 utf8mb4,而不是之前的 latin1;Maxlen 表示该字符集中单个字符最多可能占用的字节数,utf8mb4 中的一个字符最多占用 4 个字节,用于存储表情符号(emoji);Default collation 表示该字符集默认的排序规则。
3.字符集级别
MySQL 支持多个不同级别的字符集设置,包括服务器级别、数据库级别、表级别、字段级别以及字符串常量级别。
使用 SHOW VARIABLES 语句查看当前设置:
SHOW VARIABLES LIKE '%character%';+--------------------------+-------------------------------------------+
| Variable_name | Value |
+--------------------------+-------------------------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /rdsdbbin/mysql-5.7.42.R6/share/charsets/ |
+--------------------------+-------------------------------------------+
8 rows in set (0.08 sec)
其中,character_set_server 表示 MySQL 服务器的全局默认字符集,可以在服务器配置文件中 [mysqld] 部分的 character-set-server 选项或者启动服务时通过命令行参数 --character-set-server 进行设置,也可以在运行时动态修改。
系统变量 character_set_system 是服务器存储元数据(Metadata)使用的字符集,总是设置为 utf8。character_set_filesystem 用于设置文件系统的字符集,主要影响打开文件时对文件名的解析。character_sets_dir 表示字符集的存储目录。
4.数据库字符集
character_set_database 表示当前默认数据库的字符集,可以通过如下语句查看:
SHOW VARIABLES LIKE 'character_set_database';
当我们使用 CREATE DATABASE 或者 ALTER DATABASE 时,可以为数据库指定一个字符集和排序规则:
CREATE DATABASE db_name[[DEFAULT] CHARACTER SET charset_name][[DEFAULT] COLLATE collation_name]ALTER DATABASE db_name[[DEFAULT] CHARACTER SET charset_name][[DEFAULT] COLLATE collation_name]
如果没有指定字符集 CHARACTER SET 或者排序规则 COLLATE,MySQL 默认使用 character_set_server 服务器字符集(utf8mb4)和排序规则(utf8mb4_0900_ai_ci)创建或者修改数据库。
对于某个具体数据库,可以使用 SHOW CREATE DATABASE 语句或者通过 information_schema.schemata 视图查看其字符集和排序规则。
SHOW CREATE DATABASE db_name;-- 或
SELECT default_character_set_name, default_collation_name
FROM information_schema.schemata
WHERE SCHEMA_NAME = 'db_name';
5.数据表字符集
对于 CREATE TABLE 和 ALTER TABLE 语句,可以为数据表指定一个字符集和排序规则。
CREATE TABLE table_name (column_list)[[DEFAULT] CHARACTER SET charset_name][COLLATE collation_name]]ALTER TABLE table_name[[DEFAULT] CHARACTER SET charset_name][COLLATE collation_name]
注意,MySQL 没有那么智能,修改数据表字符集时,并不会自动将表中历史数据转换为新的字符集编码。如果表中有历史数据,那么需要做一次转换,如转换为 utf8mb4。
ALTER TABLE tbl_nameCONVERT TO CHARACTER SET utf8mb4COLLATE utf8mb4_general_ci;
对于某个具体的表,可以使用 SHOW CREATE TABLE 语句或者通过 information_schema.TABLES 视图查看字符集和排序规则。
-- 查看字符集
SHOW CREATE TABLE tbl_name-- 查看排序规则
SELECT TABLE_COLLATION
FROM information_schema.TABLES
WHERE TABLE_NAME = 'tbl_name';
6.表字段字符集
每个 CHAR、VARCHAR、TEXT、ENUM、SET 类型的字段也可以拥有自己的字符集和排序规则。
col_name {CHAR | VARCHAR | TEXT} (col_length)[CHARACTER SET charset_name][COLLATE collation_name]col_name {ENUM | SET} (val_list)[CHARACTER SET charset_name][COLLATE collation_name]
如果没有指定字符集 CHARACTER SET 或者排序规则 COLLATE,MySQL 默认使用表的字符集和排序规则创建或者修改字段。使用 SHOW CREATE TABLE 语句可以查看表中字段的字符集和排序规则。
7.字符串常量字符集
另外,MySQL 中的字符串常量也有字符集和排序规则。例如,以下字符串常量使用相同的字符集:
SELECT '数据库';
SELECT _utf8mb4'数据库';
SELECT _utf8mb4'数据库' COLLATE utf8mb4_0900_ai_ci;
如果没有指定字符集或者排序规则,MySQL 使用默认的连接字符集 character_set_connection。
字符集和排序规则会对一些 MySQL 字符函数产生影响,例如:
SELECT length('abc'), char_length('abc'), length('数据库'), char_length('数据库');
length('abc')|char_length('abc')|length('数据库')|char_length('数据库')|
-------------|------------------|---------------|--------------------|3| 3| 9| 3|
LENGTH 函数返回以字节为单位的字符串长度,多字节字符集中字符占用的字节数可能不同;CHAR_LENGTH 函数返回以字符为单位的字符串长度。
CONVERT(expr USING transcoding_name) 函数可以实现不同字符集之间的数据转换。例如:
SELECT CONVERT('MySQL' USING ascii);
8.客户端字符集
MySQL 客户端应用和服务器连接之后,通过连接输入 SQL 语句,发送命令,接收服务器端的结果或者错误信息。在这个过程中,还会涉及到以下字符集设置:
- 客户端语句使用的字符集,MySQL 使用 character_set_client 的设置作为客户端字符集。
- 服务器接收到语句之后需要将其转换为哪种字符集,MySQL 使用 character_set_connection 的值作为转换的目标字符集。同时它也是字符串常量默认的字符集。
- 服务器在返回查询结果(包括字段名、字段值、错误信息等)之前需要将其转换为哪种字符集,MySQL 使用 character_set_results 作为这种转换的目标字符集。
客户端连接的字符集可以通过以下几种方法进行设置。
(1)连接数据库之后,使用 SET NAMES 语句设置。
SET NAMES {'charset_name'[COLLATE 'collation_name'] | DEFAULT}
该语句相当于同时设置了 character_set_client、character_set_results 以及 character_set_connection 的值。
(2)使用 SET CHARACTER SET 语句。
SET {CHARACTER SET | CHARSET}{'charset_name' | DEFAULT}
该语句用给定的字符集映射服务器和当前客户端之间发送的所有字符串。SET CHARACTER SET设置了三个会话系统变量:character_set_client 和 character_set_results 设置为给定的字符集,而 character_set_connection 设置为character_set_database 的值。
(3)如果客户端应用支持 --default-character-set 选项,例如 mysql、mysqladmin 等,可以在配置文件中 [mysql] 部分的 default-character-set 配置项进行设置。
(4)某些 MySQL 驱动程序允许在连接字符串中指定一个字符集编码,例如 JDBC 中的 characterEncoding。
为了避免不同字符集转换可能带来的问题,最好将客户端连接字符集和服务器的字符集设置为一致。
参考文献
Chapter 10 Character Sets, Collations, Unicode
13.7.6.3 SET NAMES Statement
13.7.6.2 SET CHARACTER SET Statement
相关文章:
MySQL 字符集
文章目录 1.简介2.支持的字符集3.字符集级别4.数据库字符集5.数据表字符集6.表字段字符集7.字符串常量字符集8.客户端字符集参考文献 1.简介 MySQL 支持多种字符集,使您能够使用各种字符集存储数据,并根据给定排序规则执行比较。 MySQL 服务器默认字符…...
java生成PDF的Util
java使用itext生成pdf-CSDN博客 接上文 支持绘制表格 支持表格中的文本 字体加粗、字体上色、单元格背景上色, 支持拼接文本 支持单行文本 多种背景颜色、字体上色 支持自定义水印 废话不说先上效果图 工具类代码 package com.zxw.文件.PDF.util;import com.…...
【openwrt学习笔记】新patch的制作和旧patch的修改
目录 一、参考资料二、使用QUILT工具添加补丁2.1 添加一个新的补丁2.2 编辑一个已存在的补丁2.3 补丁命名规范2.4 添加或修改内核补丁文件 三、使用diff 打补丁四、相关问题及解决方法4.1 make package/package-name/update Vs失败 一、参考资料 Working with patches 二、使…...
【GIT】Git clone https://xxx.git 报错仓库找不到,ssh却可以。
环境 MacBook Pro:13.0 (22A380),Intel。 Python:3.10.9 序言 最近在Mac电脑中按照stable diffusion webUI 时,总是报: MacBook-Pro:openai yutao$ git clone https://github.com/AUTOMATIC1111/stable-diffusion-…...
Vue系列(三)之 基础语法下篇【事件处理,表单综合案例,组件通信】
一. 事件处理 在 Vue.js 中,v-on 指令被用于监听 DOM 事件,并在事件触发时执行相应的方法,这些方法就是事件处理器。v-on 指令有简写形式 ,例如 click"handleClick" 会监听点击事件并执行 handleClick 方法。 事件处理…...
AI 编码助手 Codewhisperer 安装步骤和使用初体验
文章作者:为了自己加油 最近亚⻢逊云科技推出了一款基于机器学习的AI编程助手 Amazon Code Whisperer,可以实时提供代码建议。在编写代码时,它会自动根据现有的代码和注释给出建议。Amazon Code Whisperer与 GitHub Copilot 类似,…...
Python操作Elasticsearch
一、Python操作ES之基本使用 安装:pip3 install elasticsearch from elasticsearch import Elasticsearchobj = Elasticsearch() # 创建索引(Index) # result = obj.indices.create(index=user,ignore=400) # # print(result)# print(result) # 删除索引 # result = obj.i…...
面试打底稿② 专业技能的第二部分
简历原文 抽查部分 比较熟悉Nacos、Feign、SpringCloud Gateway等微服务的使用,有实际上手项目使用的经验;基本掌握Linux常用命令,了解Linux系统管理、网络管理、生产环境等必用服务,了解Docker的使用,在博客中多有关…...
java 对mybatis拦截Interceptor进行权限控制(条件修改),入参修改,返回修改
使用jsqlparser对sql解析拼装 基础准备 <dependency><groupId>com.github.jsqlparser</groupId><artifactId>jsqlparser</artifactId><version>4.5</version><scope>compile</scope> </dependency> <depende…...
鲲鹏+麒麟v10 sp1 打包tomcat
一、安装打包软件 yum install rpm-build yum install rpmdevtools 二、复制tar包 注意:如果要修改配置文件需要把tar包解压,修改tomcat配置文件 cp apache-tomcat-8.5.93.tar.gz /root/rpm-build/SOURCES 三、编辑/root/rpm-build/SOURCES/tomcat.…...
大屏大概是怎么个开发法(前端)
写在前面,博主是个在北京打拼的码农,从事前端工作5年了,做过十多个大大小小不同类型的项目,最近心血来潮在这儿写点东西,欢迎大家多多指教。 对于文章中出现的任何错误请大家批评指出,一定及时修改。有任何…...
什么是Selenium?使用Selenium进行自动化测试!
你知道什么是 Selenium 吗?你知道为什么要使用它吗?答案就在本文中,很高兴能够与你共飧。 自动化测试正席卷全球,Selenium 认证是业界最抢手的技能之一。 什么是 Selenium? Selenium 是一种开源工具,用于…...
第一章:最新版零基础学习 PYTHON 教程(第十七节 - Python 表达式语句–Python返回语句)
return 语句用于结束函数调用的执行,并将结果(return 关键字后面的表达式的值)“返回”给调用者。return 语句之后的语句不被执行。如果return语句没有任何表达式,则返回特殊值None。return 语句总体上用于调用函数,以便可以执行传递的语句。 注意: Return 语句不能在函数…...
前端碎知识点
1 统计字符串中每个字符出现的频率 const str fgasdfadfdasd;const result str.split().reduce((a, b) > {if (a[b]) {a[b];} else {a[b] 1;}return a; }, {});const resultNew str.split().reduce((a, b) > {// undefined,就是NaNa[b] || (a[b] 1);ret…...
【Leetcode Sheet】Weekly Practice 7
Leetcode Test 1462 课程表Ⅳ(9.12) 你总共需要上 numCourses 门课,课程编号依次为 0 到 numCourses-1 。你会得到一个数组 prerequisite ,其中 prerequisites[i] [ai, bi] 表示如果你想选 bi 课程,你 必须 先选 ai 课程。 有的课会有直接…...
leetcode Top100(23)回文链表
给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 输入:head [1,2,2,1] 输出:true采用动态数组,判断数组对称就可以了(这解法空间…...
WebGL绘制圆形的点
目录 前言 如何实现圆形的点? 片元着色器内置变量(gl_FragCoord、gl_PointCoord) gl_PointCoord的含义 示例程序(RoundedPoint.js) 代码详解 前言 本文将讨论示例程序RoundedPoint,该程序绘制了圆…...
《The Rise and Potential of Large Language Model Based Agents: A Survey》全文翻译
The Rise and Potential of Large Language Model Based Agents: A Surve - 基于 LLMs 的代理的兴起和潜力:一项调查 论文信息摘要1. 介绍2. 背景2.1 AI 代理的起源2.2 代理研究的技术趋势2.3 为什么大语言模型适合作为代理大脑的主要组件 论文信息 题目࿱…...
在线地图获取城市路网数据
在线地图获取城市路网数据 近期科研项目中,需要获取城市路网数据,于是详细阅读各大在线地图api接口,总结出来这么一条可行的思路: 首先获取城市轮廓根据城市轮廓把城市分割成若干个小块在每个小块中根据在线地图的POI检索接口&a…...
8.2 Jmeter if控制器使用
前提:jmeter脚本需要用到if控制器,if判断如果查询不到,则去新增。 1、添加if控制器 线程组-->逻辑控制器-->如果(if)控制器 1)、Expression (must evaluate to true or false) :表达式(值必须是tru…...
别再折腾双系统了!Win11/Win10下用WSL2搞定PyTorch+CUDA环境(附YOLOv5实战)
在Windows上打造高效深度学习环境:WSL2PyTorchCUDA全攻略 对于许多刚接触深度学习的开发者来说,环境配置往往是最令人头疼的第一步。传统做法要么是在Windows和Linux双系统间来回切换,要么忍受虚拟机性能低下的问题。而现在,WSL2&…...
为什么选择LLMs-Zero-to-Hero:初学者到大模型专家的快速通道 [特殊字符]
为什么选择LLMs-Zero-to-Hero:初学者到大模型专家的快速通道 🚀 【免费下载链接】LLMs-Zero-to-Hero 从无名小卒到大模型(LLM)大英雄~ 欢迎关注后续!!! 项目地址: https://gitcode.com/gh_mir…...
Taotoken多模型聚合平台在智能客服场景下的应用实践
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Taotoken多模型聚合平台在智能客服场景下的应用实践 对于智能客服系统的开发者而言,对话质量与成本控制是两大核心关切…...
为什么MASA全家桶汉化包能彻底改变你的Minecraft模组体验?
为什么MASA全家桶汉化包能彻底改变你的Minecraft模组体验? 【免费下载链接】masa-mods-chinese 一个masa mods的汉化资源包 项目地址: https://gitcode.com/gh_mirrors/ma/masa-mods-chinese 还在为MASA模组复杂的英文界面而头疼吗?作为中文Minec…...
成本数据多系统自动采集与分析实操指南:基于2026大模型Agent的超自动化实践
在2026年的数字化转型深水区,企业对于“成本”的理解已从静态的财务报表演进为实时的流式数据。然而,即便是在大模型技术全面爆发的今天,数据孤岛依然是阻碍成本精细化管理的首要顽疾。成本数据往往碎片化分布在ERP、MES、WMS、供应链平台及各…...
AI-Git-Narrator:基于LLM的Git提交历史自动化分析与文档生成工具
1. 项目概述与核心价值最近在折腾一个挺有意思的开源项目,叫AI-Git-Narrator。简单来说,它就像一个能“看懂”你代码提交历史的AI解说员。每次你往Git仓库里推送代码,它都能自动分析你这次提交到底改了啥,然后用自然语言生成一段清…...
MultiFunPlayer完整指南:3分钟学会设备与媒体完美同步,打造沉浸式娱乐体验
MultiFunPlayer完整指南:3分钟学会设备与媒体完美同步,打造沉浸式娱乐体验 【免费下载链接】MultiFunPlayer flexible application to synchronize various devices with media playback 项目地址: https://gitcode.com/gh_mirrors/mu/MultiFunPlayer …...
ssm图书在线商城(10044)
有需要的同学,源代码和配套文档领取,加文章最下方的名片哦 一、项目演示 项目演示视频 二、资料介绍 完整源代码(前后端源代码SQL脚本)配套文档(LWPPT开题报告/任务书)远程调试控屏包运行一键启动项目&…...
S32K3 Autosar开发环境一站式部署指南
1. S32K3 Autosar开发环境概述 第一次接触S32K3 Autosar开发的朋友可能会被复杂的工具链吓到。其实只要理清思路,整个环境搭建就像组装乐高积木——每个组件都有明确的位置和功能。S32K3是NXP面向汽车电子的明星MCU,而Autosar则是汽车软件开发的行业标准…...
Elsevier审稿追踪插件:告别焦虑等待,让投稿管理变轻松
Elsevier审稿追踪插件:告别焦虑等待,让投稿管理变轻松 【免费下载链接】Elsevier-Tracker 项目地址: https://gitcode.com/gh_mirrors/el/Elsevier-Tracker 你是否曾为Elsevier期刊投稿后的漫长等待而焦虑?每天反复刷新页面查看审稿进…...
