mysql中的字符集

MySQL字符集 MySQL字符集设置分为两类:1)创建对象的默认值。2)控制server和client端交互通信的配置。下面介绍下几个MYSQL命令: 1)show character set;或show char set;查看数据库支持的所有字符集 2)status;或\s;查看当前状态 里面包括当然的字符集设置 3)show variables like 'char%'; 阅读详情

目录

字符集... 1

mysql中的字符集和校对规则... 1

转换函数... 4

 

 

字符集

字符集是一个系统所支持的所有抽象字符的集合。

字符编码是将字符转换为特定的二进制序列,以便计算机识别。

编码字符集就是一种规则,它以特定的字符编码方案将字符转化为计算机能够识别的二进制码。通常所说的字符集就是指编码字符集。因为不同符集使用的编码方式不同,所以导致了不同字符集之间转换时会出现乱码。比如有两个字符集char1和char2,,在char1中,我们规定a(0001),b(0010),?(1111);在char2中,规定a(0101),c(1001),?(1111),这时如果需要在char1和char2之间进行转换,就有会出现问题。char1中的编码0001对应的字符是a,在转换为char2时,要将其编码为0101;对于char1中的1111,转换为char2时,其数值不变;而对于char1中的0010,其对应的字符b,但在char2中没有对应的字符,所以理论上无法转换,对于这类无法转换的情况,我们可以将它们统一转换为目标字符集中的一个特殊字符(“替换字符”),在这里我们可以将?作为替换字符,这时b就转换成?,出现了信息丢失和乱码。同样的道理,当将char2中的字符c转换为char1时,也会出现信息丢失。就是说,在字符集转换的过程中,如果源字符集中的某个字符在目标字符集中没有定义,将会出现信息丢失(乱码)。

 

mysql中的字符集和校对规则

1)   MySQL字符集包括字符集(characterset)和校对规则(collation)两个概念。字符集用来定义mysql存储字符的编码规则。校对规则用来指定在字符集内部,字符的比较规则,如大小写不敏感、大小写敏感、二元(binary全部可能的规则中最简单的校对规则)。

2)   SHOW CHARACTER SET;查看mysql支持的字符集和相应字符集的默认校对规则;

SHOW COLLATION;查看mysql支持的校对规则;

SHOW VARIABLES LIKE 'character%';查看当前状态字符集的设置情况;

SHOW GLOBAL VARIABLES LIKE ‘character%’;查看全局字符集的设置;

SHOW VARIABLES LIKE 'collation%';查看校对规则的设置,也可以通过查看datadir/db_name/db.opt文件来查看当前数据库的默认字符集和校对规则;

SHOW COLLATION LIKE ‘latin1%’;查看latin1字符集的校对规则。

SHOW CREATE DATABASE db_name;查看db_name数据库的字符集。

SHOW CREATE TABLE\G;查看表和列的字符集。

SHOW FULL COLUMNS FROM table_name FROMdb_name;查看列的详细信息。

3)   mysql中的字符集和校对规则

MySQL中字符集和校对规则有4个级别的默认设置:服务器及、数据库级、表级和列级。

查看mysql的字符集设置:

    mysql>show variables like 'character%';

+--------------------------+----------------------------+

|Variable_name            | Value            |

+--------------------------+----------------------------+

|character_set_client        |utf8             | 客户端字符集

|character_set_connection    | utf8            |  连接字符集

|character_set_database     | latin2          |  数据库级字符集

|character_set_filesystem    |binary           |  文件系统字符集

|character_set_results       |utf8             |  查询结果字符集

|character_set_server       |latin1            |  服务器及字符集

| character_set_system     |utf8             |  数据库元数据字符集(数据库的定义内容,列名、数据库名、用户名、版本、SHOW的内容、information_schema的内容)

|character_sets_dir        | /usr/share/mysql/charsets/      |

+--------------------------+----------------------------+

8 rows inset (0.00 sec)

 

Ÿ 服务器级字符集和校对规则

启动时指定:

# mysqld –-user=root –character-set-server=latin1–collation-server=latin1_swedish_ci

#user指的是系统用户,不是mysql授权表中的用户. 如果是root用户,则强制使用此参数。测试结束后在datadir目录下执行 chown mysql:mysqlmysql-bin*。[①]注释

配置文件中指定:

shell>vi /etc/my.cnf  #在[mysqld]下面添加default-character-set=latin1

                                       #新版本的mysql为character_set_server=latin1

(重)编译时指定:

shell>./configure –with-charset=latin1 –with-collation=latin1_swedish_ci

运行时更改:

mysql>set global character_set_server=latin2; #global作用于新的连接,重启服务后失效

 

Ÿ 数据库级字符集和校对规则

数据库级字符集可以在CREATE DATABASE时指定,也可以使用ALTER DATABASE修改默认的字符集和校对规则。如果在CREATE DATABASE时没有指定默认的字符集和校对规则,这时会采用服务器的默认字符集和校对规则。[②]注释。也可以通过编辑datadir/db_name/db.opt文件来设置对应数据库的默认字符集和校对规则。

 

Ÿ 表级字符集和校对规则

CREATE TABLE时指定:

mysql>createtable t_charset(

     >id int(3) auto_increment,

     >name char(5),

     >primary key(id))

     >character set latin2

     >collate latin2_general_ci;

QueryOK, 0 rows affected (0.00 sec)

使用ALTER TABLE更改:

mysql>altertable t_charset

     >character set latin1

     >collate latin1_swedish_ci;

如果建表时没有指定默认字符集和校对规则,系统会自动使用数据库紧急的默认设置。

 

Ÿ 列级字符集和校对

CREATE TABLE时指定:

mysql>createtable t_charset1(

     >col1varchar(5)

>character set latin1

>collatelatin1_general_ci);

         #int类型的列无法指定字符集类型

ALTER TABLE修改列的字符集:

mysql>alter table t_charset1

     >change col1 col2char(10)

     >character set latin1

     >collationlatin1_general_ci;

如果没有指定 列字符集,则使用表字符集和校对规则的默认值。

 

Ÿ 连接字符集和校对

每个客户端都有一个与链接相关的字符集和校对规则。客户端登录到服务器所做的事情称为一个链接。客户端发送SQL语句,如查询,通过连接发送到服务器。服务器通过连接发送相应给客户端,如结果集。对于客户端连接,会涉及到与服务器之间字符集转换的问题,这些问题提由相应的系统变量来解决:

ü  当查询离开客户端后,在查询中使用哪种字符集:character_set_client指定。

ü  server接收到查询后,转换为哪种字符集:character_set_connection和collation_connection指定。server将客户端发送的语句从character_set_client转换为character_set_connection。collation_connection对于比较字面值很重要。列值的比较会使用具有更高优先级的列校对规则。

ü  server将结果集发送到客户端之前,转换为哪种字符集:character_set_results指示server返给client的结果集使用的字符集.包括结果数据,如列值,结果元数据。

设置连接字符集和校对:

ü  SET NAMES ‘charset_name’;指定客户端发送的SQL语句使用的字符集、结果集的字符集、连接的字符集。set names ‘x’与这三个语句等价:

mysql>set character_set_client= x ;

mysql>setcharacter_set_results = x;

mysql>setcharacter_set_connection = x;

ü  SET CHARACTER SET charset_name; 与这三个语句等价:

mysql>setcharacter_set_client = charset_name;

mysql>setcharacter_set_results=charset_name;

mysql>setcharacter_set_connection=@@character_set_database;

   默认情况client、results、connection字符集使用操作系统LANG变量设置的字符集。如果在my.cnf配置文件中指定了[client]的default-character-set,则优先使用客户端字符集。

 

 

转换函数CONVERT()和CAST()

Ÿ CONVERT()提供不同字符集之间转换数据的功能。

语法:CONVERT (expr USING transcoding_name);

例子:mysql>selectconvert(_latin1’Mumu’ USING utf8);

 

Ÿ CAST()提供不同数据类型之间的转换

语法:CAST(char_string AS data_type CHARACTER SET charset_name)

# 将char_string转换为data_type的数据类型,字符集为charset_name

例子:mysql >select cast(_latin1’test’ as char(2) character set utf8);

 



[①] 我们知道每次重启mysql服务都会创建一个bin日志文件(datadir/mysql-bin.nnnnnn)。正常情况下启动数据库的系统用户为安装数据库时默认创建的mysql,启动mysql服务时创建的bin日志文件的所有者和组也是mysql,而现在启动mysqld服务指定了系统用户--user=root,生成的bin日志文件的所有者和所属组就变成了对应的root用户。这样就会导致无法以常规方式启动mysql数据库,比如service mysql start会提示server quit without updating PID file启动失败,err日志中提示无法找到最新的bin日志(mysql-bin.数字最大的,这与mysql-bin.index有关)。

[②] 我们知道如果使用SET GLOBAL character_set_server=latin2更改了全局系统变量,更改效果将作用于新连接,就是说如果具有create database权限的新session连接到mysql服务器,并且create database时没有指定字符集和校对规则,那么将会使用set global character_set_server中指定的字符集latin2和对应的校对规则,而不是服务器默认的字符集latin1。

CHARACTER SET utf8 COLLATE utf8_general_ci 老师在建一个表的时候对一个字段设置了CHARACTER SET utf8 COLLATE utf8_general_ci,不是第一张表而且感觉建数据库的时候也已经设了字符集编码,所以查资料了解了一下这样做的原因,虽然具体不是太清楚,但对CHARACTER SET utf8 COLLATE utf8_general_ci也有了一定了解。 DEFAULT CHARACTER SET utf8:数据库 阅读详情

相关推荐

MySQL查看与修改数据库字符集

根据MySQL官方文档解释,目前MySQL中的utf8字符集,实际上是utf8mb3字符集,即用3个字节的Unicode编码;而utf8mb4才是真正意义上的4个字节的UTF8编码。不过在较新的MySQL版本(8.0.32)中,已经只能查询到utf8mb3和utf8mb4两个UTF8编码,而看不到名为utf8的字符集。

Sebastien23的博客 2695

数据库-字符集

MySQL 字符编码集中有两套 UTF-8 编码实现:utf8和 utf8mb4。如果使用 utf8的话,存储emoji 符号和一些比较复杂的汉字、繁体字就会出错。为什么会这样呢?这篇文章可以从源头给你解答。

Java程序员的知识博客 2478

python中frida的安装+frida-server(雷电模拟器)保姆级安装教程

frida的安装,安卓逆向,adb

2301_80224944的博客 4582

MySQL 字符集概念与原理及如何配置字符集 - 超详细图文详解

MySQL 字符集概念与原理及如何配置字符集?我们在使用 MySQL 的过程中,经常会碰到诸如乱码之类的问题。字符编码与字符集密切相关,MySQL 支持种类繁多的字符集类型,这些字符集到底如何影响 MySQL 数据存储与数据在客户端与服务端之间的传输的呢?我们该如何选择并配置正确的字符集?你真的理解 character_set_client、character_set_connection 和 character_set_results 三个变量的含义吗?那就通过这篇文章来帮你捋清细节和解除困扰吧!

指尖流连敲击梦想,代码行行承载远方! 1万+

NVIDIA DRIVE SDK学习(二)——NvMedia

可以通过使用NvSciBuf API通过NvMedia Tensor属性分配NvSciBuf来创建NvMedia张量。由于NvSciBuf API有助于NvMedia和NVIDIA®CUDA®之间的数据共享,这使得分配的张量可以在NvSciBuf API允许的情况下重复使用。它支持图像聚合操作。NvSciSync组件使得NvMedia组件可以与其他组件保持同步,比如CUDA组件、基于NvSciSync的组件等。立体视差模式:在这种模式下,该模块通过左图像和右图像来产生立体视差,从而进行物体深度测量。

weixin_39592381的博客 3046

开源AI数字人DUIX:从零构建你的智能交互助手

本文详细介绍了如何利用开源AI数字人DUIX从零构建智能交互助手。文章阐述了DUIX作为开源项目的核心优势,包括低成本启动、低网络依赖和高度可定制性,并提供了从开发环境搭建、核心模块(AI模型、语音、形象)配置到个性化业务逻辑开发与最终部署的完整实践指南,帮助开发者快速掌握构建专属AI数字人的全流程。

weixin_29051811的博客 505

MySql数据库系统字符集

引用自:https://www.cnblogs.com/chyingp/p/mysql-character-set-collation.html 一、内容概述 在MySQL的使用过程中,了解字符集、字符序的概念,以及不同设置对数据存储、比较的影响非常重要。不少同学在日常工作中遇到的“乱码”问题,很有可能就是因为对字符集与字符序的理解不到位、设置错误造成的。 本文由浅入深,分别介绍了如下内容: 字符集、字符序的基本概念及联系 MySQL支持的字符集、字符序设置级,各设置级别之间的联系 ser.

cibiren2011的专栏 1157

stm32f103运行FreeRTOS使用DMA实现USART1不定长接收

使用DMA是实现USART1的不定长接收和发送数据。接收采用FIFO缓存和队列的方式向应用层抛数据。首先定义接收和发送的缓存区,缓存区的大小根据收发数据量确定。DMA接收开启转移完成和转移一般中断。在中断中从缓存向FIFO转移数据。串口开启空闲中断,实现接收数据的分帧。分帧后的数据节点通过写入到队列。发送数据缓存的大小根据发送数据量调整。然后初始化串口和DMA。串口的发送数据接口函数。...

polaris_zgx的博客 1991

MySQL字符集详解

今天继续给大家介绍MySQL相关知识,本文主要内容是MySQL字符集。 一、MySQL字符集简介 二、查看和设置MySQL字符集 (一)查看当前字符集设置 (二)更改默认字符集 (三)在创建表时指定字符集 三、更改MySQL字符集

永远是少年 2万+

AUTOSAR RTE配置实战:从ECU分区到Task映射的完整指南

本文提供了一份AUTOSAR RTE配置的完整实战指南。从创建ECU分区、定义OS任务,到实现Runnable Entity与Task的精确映射,详细解析了每一步的操作要点与常见陷阱。文章结合配置工具界面,旨在帮助开发者高效完成RTE配置,确保系统实时性与数据一致性,是掌握AUTOSAR核心开发流程的实用参考。

weixin_29228203的博客 486

kaggle社区LLM Classification Finetuning

预测用户在一个由大型语言模型(LLMs)驱动的聊天机器人之间的正面交锋中会偏好哪些回应。获得来自聊天机器人竞技场(Chatbot Arena)的对话数据集,其中不同的LLMs对用户的提示生成答案。通过开发一个胜出的机器学习模型,帮助改进聊天机器人与人类的互动方式,并确保它们更好地符合人类的偏好。实际上是进行一个序列的分类。

m0_73542617的博客 1928

MySQL字符集是什么

一、什么是字符集 字符集指的是某个范围字符的编码规则 比如utf8字符集对于所有中文汉字采用3个字节来表示(编码),所以我们称utf8为一种字符集。 这里的范围就是指所有的中文汉字 编码规则就是指 都采用3个字节来表示一个汉字 比如ASCII字符集对于所有英文字母采用1个字节来表示(编码),所以我们称ASCII为一种字符集。 这里的范围就是指所有的英文字母 编码规则就是指 都采用1个字节来表示一个字母 二、MySQL客户端和MySQL服务端字符集是如何交互的 1、前置知识 MySQL客户端

wenpan的博客 7898

【电容/电感】电路板会“滋滋”的响,我们称它为啸叫

一、啸叫的起源 大部分硬件工程师应该都遇到过,PCBA上电后出现“滋滋滋”的叫声,其声响或大或小,或时有时无,或深沉或刺耳,或变化无常者皆有。该现象我们称为“啸叫”,一般分为电感啸叫和电容啸叫。

云轩阁 6万+

MySQL 字符集

字符集是计算机科学中的一个重要概念,用于定义文本中可以使用的字符集合。而 MySQL 字符集则是 MySQL 数据库管理系统中用于存储和处理文本数据的字符集。  

星星的专栏 945

传感器应用案例:压力传感器在工业自动化中的应用_(13).压力传感器的数据采集与处理

数据采集系统(Data Acquisition System, DAS)是连接传感器和控制系统的重要桥梁。它包括硬件(如数据采集卡、信号调理器)和软件(如数据采集软件、数据处理算法)两部分。信号调理:将传感器输出的模拟信号转换为适合AD转换的信号。AD转换:将模拟信号转换为数字信号。数据传输:将数字信号传输到控制系统或上位机。存储:将采集的数据存储在本地或远程数据库中。实时性:保证数据的实时性和准确性。压力传感器的数据采集与处理是工业自动化中不可或缺的一部分。

2401_87715305的博客 1621

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

mysql中基字符集,MySQL中的字符集

我们在开发过程中可能会碰到MySQL字符集的问题,有时候发现存入某个字符,数据库存储不对。有时候发现,存储某个字符正确,但是获取到的又是乱码。这种情况下一个一个去网上搜索,实在是浪费时间。这里总结一下MySQL中字符集的规则以及配置方法,下次遇到问题时,不妨从这里总结的入手。首先,先了解两个概念。字符集和校对规则MySQL包含字符集(character)和校对规则(collation)两个概念。字...

weixin_42505252的博客 262

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

深入Mysql字符集设置

· 作者:laruence(http://www.laruence.com/) · 本文地址: http://www.laruence.com/2008/01/05/12.html · 转载请注明出处 根据Chaos  Wang的PPT整理而成, 在此再次感谢Chaos Wang的此次TechTalk  基本概念• 字符(Character)是指人类语言中最小

雪候鸟的专栏 7766

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

MySQL的字符集

mysql字符集

SADADADG的博客 4038

查看 MySQL 字符集的方法

1 MySQL字符集设置 系统变量: – character_set_server:默认的内部操作字符集 – character_set_client:客户端来源数据使用的字符集 – character_set_connection:连接层字符集 – character_set_results:查询结果字符集 – character_set_database:当前选中数据库的默认字符集 – c...

leo__1990的博客 2万+

mysql 所有字符集_mysql字符集

mysql字符集字符集基础字符集:数据库中的字符集包含两层含义各种文字和符号的集合,包括各国家文字,标点符号,图形符号,数字等。字符的编码方式,即二进制数据与字符的映射规则;字符集分类:ASCII:美国信息互换标准编码;英语和其他西欧语言;单字节编码,7位(bits)表示一个字符,共128字符。GBK:汉字内码扩展规范;中日韩汉字、英文、数字;双字节编码;共收录了21003个汉字,GB2312的扩...

weixin_34929072的博客 3073

mysql 修改字段的字符集_MySQL修改字符集

一、修改字符集1、修改数据库字符集alter database db_new charset utf8mb4;2、修改表字符集alter table tb charset=utf8mb4;3、修改表字符集和校验规则alter table tb charset=utf8mb4 collate=utf8mb4_general_ci;4、修改表字段的字符集和校验规则alter table tb modi...

weixin_39836803的博客 1万+

Mysql字符集

mysql字符集和排序规则

程序员一博 3294

MySQL字符集的转换

MySQL支持 ASCII、Latin1、GBK以及Unicode 等绝大多数字符集。需要注意的是utf8 字符集包括 utf8 和 utf8mb4 这两个字符集,且占用的最大长度不一样。在 MySQL 8.0之前的版本,utf8类型每个字符最大占用3个字节空间,8.0之后的版本支持utf8mb4类型,单个字符最大占用4字节空间,且可以支持表情等特殊符号。字符集的作用是提供字符到编码的映射,但是不定义字符之间的比较关系。与数字相关类型一样,字符与字符之间也有大小关系,这一部分工作则由比较规则定义。

2301_76664379的博客 1461

mysql gbk字符集_Mysql字符集知识总结

字符集&字符编码方式字符集(Character set)是多个字符的集合,字符集种类较多,每个字符集包含的字符个数不同,这里的字符可以是英文字符,汉字字符,或者其他国家语言字符。常见字符集包括:ASCII字符集、LATIN1字符集、GB2312字符集、GBK字符集、GB18030字符集、Unicode字符集等。字符编码方式是用一个或多个字节表示字符集中的一个字符。每种字符集都有自己特有的编...

weixin_35426022的博客 1161

MySql中的字符集和怎样选择字符集

字符集概述 字符集是一套符号和编码的规则,不论是在oracle数据库还是在mysql数据库,都 存在字符集的选择问题,而且如果在数据库创建阶段没有正确选择字符集,那么可能在后期 需要更换字符集,而字符集的更换是代价比较高的操作,也存在一定的风险,所以,我们推 荐在应用开始阶段,就按照需求正确的选择合适的字符集,避免后期不必要的调整。 www.163.com 网易技术部 17 4.2

程序与人生 7207

MySQL查看字符集以及修改字符集

MySQL查看字符集以及修改字符集

YSTWD_WY的博客 1万+
上一篇: 用户、组、ACL、PAM、SU、SUDO
下一篇: mysql中的事件、存储过程、触发器
杰克牌辣酱
博客等级 码龄18年 26粉丝 141原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值