当前位置: 首页 > news >正文

MySQL-字符集和比较规则

在计算机中只能存储二进制数据,那该怎么存储字符串呢?当然是建立字符与二进制数据的映射关系
了,建立这个关系最起码要搞清楚两件事:

  1. 界定清楚字符范围:需要把哪些字符映射成二进制数据?
  2. 编码与解码:也就是字符串与二进制数据如何映射。将一个字符映射成一个二进制数据的过程也叫做 编码将一个二进制数据映射到一个字符的过程叫做 解码

常见字符集

ASCII 字符集

ASCII 字符集共收录128个字符,包括空格、标点符号、数字、大小写字母和一些不可见字符。由于总共才128个字符,所以可以使用1个字节来进行编码。

ISO 8859-1 字符集

ISO 8859-1 字符集共收录256个字符,是在 ASCII 字符集的基础上又扩充了128个西欧常用字符(包括德法两国的字母),也可以使用1个字节来进行编码。这个字符集也有一个别名 latin1

GB2312 字符集

GB2312 字符集收录了汉字以及拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母。其中收录汉字6763个,其他文字符号682个。

同时这种字符集又兼容 ASCII 字符集,所以在编码方式上显得有些奇怪,如果该字符(ASCII 字符)在 ASCII 字符集中,则采用1字节编码,否则采用2字节编码。

这种表示一个字符需要的字节数可能不同的编码方式称为 变长编码方式

GBK 字符集

GBK 字符集只是在收录字符范围上对 GB2312 字符集作了扩充,编码方式上兼容 GB2312 。

utf8 字符集

收录地球上能想到的所有字符,而且还在不断扩充。utf8字符集兼容 ASCII 字符集,采用变长编码方式,编码一个字符需要使用1~4个字节。

utf8只是Unicode字符集的一种编码方案,Unicode字符集可以采用utf8、utf16、utf32这几种编码方案。

  • utf8使用1~4个字节编码一个字符;
  • utf16使用2个或4个字节编码一个字符;
  • utf32使用4个字节编码一个字符。

MySQL 支持字符集与排序规则

查看MySQL支持的字符集

MySQL 支持好多好多种字符集,查看当前 MySQL 中支持的字符集可以用下边这个语句:

SHOW (CHARACTER SET|CHARSET) [LIKE 匹配的模式];

CHARACTER SET 和 CHARSET 是同义词,用任意一个都可以。

show character set ;

执行上面语句,输出如下:

CharsetDescriptionDefault collationMaxlen
armscii8ARMSCII-8 Armenianarmscii8_general_ci1
asciiUS ASCIIascii_general_ci1
big5Big5 Traditional Chinesebig5_chinese_ci2
binaryBinary pseudo charsetbinary1
cp1250Windows Central Europeancp1250_general_ci1
cp1251Windows Cyrilliccp1251_general_ci1
cp1256Windows Arabiccp1256_general_ci1
cp1257Windows Balticcp1257_general_ci1
cp850DOS West Europeancp850_general_ci1
cp852DOS Central Europeancp852_general_ci1
cp866DOS Russiancp866_general_ci1
cp932SJIS for Windows Japanesecp932_japanese_ci2
dec8DEC West Europeandec8_swedish_ci1
eucjpmsUJIS for Windows Japaneseeucjpms_japanese_ci3
euckrEUC-KR Koreaneuckr_korean_ci2
gb18030China National Standard GB18030gb18030_chinese_ci4
gb2312GB2312 Simplified Chinesegb2312_chinese_ci2
gbkGBK Simplified Chinesegbk_chinese_ci2
geostd8GEOSTD8 Georgiangeostd8_general_ci1
greekISO 8859-7 Greekgreek_general_ci1
hebrewISO 8859-8 Hebrewhebrew_general_ci1
hp8HP West Europeanhp8_english_ci1
keybcs2DOS Kamenicky Czech-Slovakkeybcs2_general_ci1
koi8rKOI8-R Relcom Russiankoi8r_general_ci1
koi8uKOI8-U Ukrainiankoi8u_general_ci1
latin1cp1252 West Europeanlatin1_swedish_ci1
latin2ISO 8859-2 Central Europeanlatin2_general_ci1
latin5ISO 8859-9 Turkishlatin5_turkish_ci1
latin7ISO 8859-13 Balticlatin7_general_ci1
macceMac Central Europeanmacce_general_ci1
macromanMac West Europeanmacroman_general_ci1
sjisShift-JIS Japanesesjis_japanese_ci2
swe77bit Swedishswe7_swedish_ci1
tis620TIS620 Thaitis620_thai_ci1
ucs2UCS-2 Unicodeucs2_general_ci2
ujisEUC-JP Japaneseujis_japanese_ci3
utf16UTF-16 Unicodeutf16_general_ci4
utf16leUTF-16LE Unicodeutf16le_general_ci4
utf32UTF-32 Unicodeutf32_general_ci4
utf8mb3UTF-8 Unicodeutf8mb3_general_ci3
utf8mb4UTF-8 Unicodeutf8mb4_0900_ai_ci4

列说明:

  • Charset:字符集名称;
  • Description:字符集描述;
  • Default collation:字符集中一种默认的 比较规则;
  • Maxlen:代表该种字符集表示一个字符最多需要几个字节。

utf字符集

在 MySQL 中 utf8 是 utf8mb3 的别名,所以之后在 MySQL 中提到 utf8 就意味着使用1~3个字节来表示一个字符,如果大家有使用4字节编码一个字符的情况,比如存储一些emoji表情啥的,那请使用 utf8mb4 。

utf8mb3与utf8mb4的区别:

  1. utf8mb3 :阉割过的 utf8 字符集,只使用1~3个字节表示字符。
  2. utf8mb4 :正宗的 utf8 字符集,使用1~4个字节表示字符。

为什么需要utf8mb3和utf8mb4呢?
在 MySQL 中字符集表示一个字符所用最大字节长度在某些方面会影响系统的存储和性能,常用的一些字符使用1~3个字节就可以表示了,所以可以使用utf8mb3编码存储和性能更佳。

查看MySQL比较规则

查看 MySQL 中支持的比较规则的命令如下:

SHOW COLLATION [LIKE 匹配的模式];
show collation  ;

执行上面语句,有286个比较规则,挑选常见的输出如下:

CollationCharsetIdDefaultCompiledSortlenPad_attribute
ascii_binascii65Yes1PAD SPACE
ascii_general_ciascii11YesYes1PAD SPACE
gb18030_bingb18030249Yes1PAD SPACE
gb18030_chinese_cigb18030248YesYes2PAD SPACE
gb18030_unicode_520_cigb18030250Yes8PAD SPACE
gb2312_bingb231286Yes1PAD SPACE
gb2312_chinese_cigb231224YesYes1PAD SPACE
gbk_bingbk87Yes1PAD SPACE
gbk_chinese_cigbk28YesYes1PAD SPACE
latin1_binlatin147Yes1PAD SPACE
latin1_danish_cilatin115Yes1PAD SPACE
latin1_general_cilatin148Yes1PAD SPACE
latin1_general_cslatin149Yes1PAD SPACE
latin1_german1_cilatin15Yes1PAD SPACE
latin1_german2_cilatin131Yes2PAD SPACE
latin1_spanish_cilatin194Yes1PAD SPACE
latin1_swedish_cilatin18YesYes1PAD SPACE
latin2_binlatin277Yes1PAD SPACE
latin2_croatian_cilatin227Yes1PAD SPACE
latin2_czech_cslatin22Yes4PAD SPACE
latin2_general_cilatin29YesYes1PAD SPACE
latin2_hungarian_cilatin221Yes1PAD SPACE
latin5_binlatin578Yes1PAD SPACE
latin5_turkish_cilatin530YesYes1PAD SPACE
latin7_binlatin779Yes1PAD SPACE
latin7_estonian_cslatin720Yes1PAD SPACE
latin7_general_cilatin741YesYes1PAD SPACE
utf16le_binutf16le62Yes1PAD SPACE
utf16le_general_ciutf16le56YesYes1PAD SPACE
utf16_binutf1655Yes1PAD SPACE
utf16_croatian_ciutf16122Yes8PAD SPACE
utf16_czech_ciutf16111Yes8PAD SPACE
utf16_danish_ciutf16112Yes8PAD SPACE
utf16_esperanto_ciutf16118Yes8PAD SPACE
utf16_estonian_ciutf16107Yes8PAD SPACE
utf16_general_ciutf1654YesYes1PAD SPACE
utf16_german2_ciutf16121Yes8PAD SPACE
utf16_hungarian_ciutf16119Yes8PAD SPACE
utf16_icelandic_ciutf16102Yes8PAD SPACE
utf16_latvian_ciutf16103Yes8PAD SPACE
utf16_lithuanian_ciutf16113Yes8PAD SPACE
utf16_persian_ciutf16117Yes8PAD SPACE
utf16_polish_ciutf16106Yes8PAD SPACE
utf16_romanian_ciutf16104Yes8PAD SPACE
utf16_roman_ciutf16116Yes8PAD SPACE
utf16_sinhala_ciutf16120Yes8PAD SPACE
utf16_slovak_ciutf16114Yes8PAD SPACE
utf16_slovenian_ciutf16105Yes8PAD SPACE
utf16_spanish2_ciutf16115Yes8PAD SPACE
utf16_spanish_ciutf16108Yes8PAD SPACE
utf16_swedish_ciutf16109Yes8PAD SPACE
utf16_turkish_ciutf16110Yes8PAD SPACE
utf16_unicode_520_ciutf16123Yes8PAD SPACE
utf16_unicode_ciutf16101Yes8PAD SPACE
utf16_vietnamese_ciutf16124Yes8PAD SPACE
utf32_binutf3261Yes1PAD SPACE
utf32_croatian_ciutf32181Yes8PAD SPACE
utf32_czech_ciutf32170Yes8PAD SPACE
utf32_danish_ciutf32171Yes8PAD SPACE
utf32_esperanto_ciutf32177Yes8PAD SPACE
utf32_estonian_ciutf32166Yes8PAD SPACE
utf32_general_ciutf3260YesYes1PAD SPACE
utf32_german2_ciutf32180Yes8PAD SPACE
utf32_hungarian_ciutf32178Yes8PAD SPACE
utf32_icelandic_ciutf32161Yes8PAD SPACE
utf32_latvian_ciutf32162Yes8PAD SPACE
utf32_lithuanian_ciutf32172Yes8PAD SPACE
utf32_persian_ciutf32176Yes8PAD SPACE
utf32_polish_ciutf32165Yes8PAD SPACE
utf32_romanian_ciutf32163Yes8PAD SPACE
utf32_roman_ciutf32175Yes8PAD SPACE
utf32_sinhala_ciutf32179Yes8PAD SPACE
utf32_slovak_ciutf32173Yes8PAD SPACE
utf32_slovenian_ciutf32164Yes8PAD SPACE
utf32_spanish2_ciutf32174Yes8PAD SPACE
utf32_spanish_ciutf32167Yes8PAD SPACE
utf32_swedish_ciutf32168Yes8PAD SPACE
utf32_turkish_ciutf32169Yes8PAD SPACE
utf32_unicode_520_ciutf32182Yes8PAD SPACE
utf32_unicode_ciutf32160Yes8PAD SPACE
utf32_vietnamese_ciutf32183Yes8PAD SPACE
utf8mb3_binutf8mb383Yes1PAD SPACE
utf8mb3_croatian_ciutf8mb3213Yes8PAD SPACE
utf8mb3_czech_ciutf8mb3202Yes8PAD SPACE
utf8mb3_danish_ciutf8mb3203Yes8PAD SPACE
utf8mb3_esperanto_ciutf8mb3209Yes8PAD SPACE
utf8mb3_estonian_ciutf8mb3198Yes8PAD SPACE
utf8mb3_general_ciutf8mb333YesYes1PAD SPACE
utf8mb3_general_mysql500_ciutf8mb3223Yes1PAD SPACE
utf8mb3_german2_ciutf8mb3212Yes8PAD SPACE
utf8mb3_hungarian_ciutf8mb3210Yes8PAD SPACE
utf8mb3_icelandic_ciutf8mb3193Yes8PAD SPACE
utf8mb3_latvian_ciutf8mb3194Yes8PAD SPACE
utf8mb3_lithuanian_ciutf8mb3204Yes8PAD SPACE
utf8mb3_persian_ciutf8mb3208Yes8PAD SPACE
utf8mb3_polish_ciutf8mb3197Yes8PAD SPACE
utf8mb3_romanian_ciutf8mb3195Yes8PAD SPACE
utf8mb3_roman_ciutf8mb3207Yes8PAD SPACE
utf8mb3_sinhala_ciutf8mb3211Yes8PAD SPACE
utf8mb3_slovak_ciutf8mb3205Yes8PAD SPACE
utf8mb3_slovenian_ciutf8mb3196Yes8PAD SPACE
utf8mb3_spanish2_ciutf8mb3206Yes8PAD SPACE
utf8mb3_spanish_ciutf8mb3199Yes8PAD SPACE
utf8mb3_swedish_ciutf8mb3200Yes8PAD SPACE
utf8mb3_tolower_ciutf8mb376Yes1PAD SPACE
utf8mb3_turkish_ciutf8mb3201Yes8PAD SPACE
utf8mb3_unicode_520_ciutf8mb3214Yes8PAD SPACE
utf8mb3_unicode_ciutf8mb3192Yes8PAD SPACE
utf8mb3_vietnamese_ciutf8mb3215Yes8PAD SPACE
utf8mb4_0900_ai_ciutf8mb4255YesYes0NO PAD
utf8mb4_0900_as_ciutf8mb4305Yes0NO PAD
utf8mb4_0900_as_csutf8mb4278Yes0NO PAD
utf8mb4_0900_binutf8mb4309Yes1NO PAD
utf8mb4_bg_0900_ai_ciutf8mb4318Yes0NO PAD
utf8mb4_bg_0900_as_csutf8mb4319Yes0NO PAD
utf8mb4_binutf8mb446Yes1PAD SPACE
utf8mb4_bs_0900_ai_ciutf8mb4316Yes0NO PAD
utf8mb4_bs_0900_as_csutf8mb4317Yes0NO PAD
utf8mb4_croatian_ciutf8mb4245Yes8PAD SPACE
utf8mb4_cs_0900_ai_ciutf8mb4266Yes0NO PAD
utf8mb4_cs_0900_as_csutf8mb4289Yes0NO PAD
utf8mb4_czech_ciutf8mb4234Yes8PAD SPACE
utf8mb4_danish_ciutf8mb4235Yes8PAD SPACE
utf8mb4_da_0900_ai_ciutf8mb4267Yes0NO PAD
utf8mb4_da_0900_as_csutf8mb4290Yes0NO PAD
utf8mb4_de_pb_0900_ai_ciutf8mb4256Yes0NO PAD
utf8mb4_de_pb_0900_as_csutf8mb4279Yes0NO PAD
utf8mb4_eo_0900_ai_ciutf8mb4273Yes0NO PAD
utf8mb4_eo_0900_as_csutf8mb4296Yes0NO PAD
utf8mb4_esperanto_ciutf8mb4241Yes8PAD SPACE
utf8mb4_estonian_ciutf8mb4230Yes8PAD SPACE
utf8mb4_es_0900_ai_ciutf8mb4263Yes0NO PAD
utf8mb4_es_0900_as_csutf8mb4286Yes0NO PAD
utf8mb4_es_trad_0900_ai_ciutf8mb4270Yes0NO PAD
utf8mb4_es_trad_0900_as_csutf8mb4293Yes0NO PAD
utf8mb4_et_0900_ai_ciutf8mb4262Yes0NO PAD
utf8mb4_et_0900_as_csutf8mb4285Yes0NO PAD
utf8mb4_general_ciutf8mb445Yes1PAD SPACE
utf8mb4_german2_ciutf8mb4244Yes8PAD SPACE
utf8mb4_gl_0900_ai_ciutf8mb4320Yes0NO PAD
utf8mb4_gl_0900_as_csutf8mb4321Yes0NO PAD
utf8mb4_hr_0900_ai_ciutf8mb4275Yes0NO PAD
utf8mb4_hr_0900_as_csutf8mb4298Yes0NO PAD
utf8mb4_hungarian_ciutf8mb4242Yes8PAD SPACE
utf8mb4_hu_0900_ai_ciutf8mb4274Yes0NO PAD
utf8mb4_hu_0900_as_csutf8mb4297Yes0NO PAD
utf8mb4_icelandic_ciutf8mb4225Yes8PAD SPACE
utf8mb4_is_0900_ai_ciutf8mb4257Yes0NO PAD
utf8mb4_is_0900_as_csutf8mb4280Yes0NO PAD
utf8mb4_ja_0900_as_csutf8mb4303Yes0NO PAD
utf8mb4_ja_0900_as_cs_ksutf8mb4304Yes24NO PAD
utf8mb4_latvian_ciutf8mb4226Yes8PAD SPACE
utf8mb4_la_0900_ai_ciutf8mb4271Yes0NO PAD
utf8mb4_la_0900_as_csutf8mb4294Yes0NO PAD
utf8mb4_lithuanian_ciutf8mb4236Yes8PAD SPACE
utf8mb4_lt_0900_ai_ciutf8mb4268Yes0NO PAD
utf8mb4_lt_0900_as_csutf8mb4291Yes0NO PAD
utf8mb4_lv_0900_ai_ciutf8mb4258Yes0NO PAD
utf8mb4_lv_0900_as_csutf8mb4281Yes0NO PAD
utf8mb4_mn_cyrl_0900_ai_ciutf8mb4322Yes0NO PAD
utf8mb4_mn_cyrl_0900_as_csutf8mb4323Yes0NO PAD
utf8mb4_nb_0900_ai_ciutf8mb4310Yes0NO PAD
utf8mb4_nb_0900_as_csutf8mb4311Yes0NO PAD
utf8mb4_nn_0900_ai_ciutf8mb4312Yes0NO PAD
utf8mb4_nn_0900_as_csutf8mb4313Yes0NO PAD
utf8mb4_persian_ciutf8mb4240Yes8PAD SPACE
utf8mb4_pl_0900_ai_ciutf8mb4261Yes0NO PAD
utf8mb4_pl_0900_as_csutf8mb4284Yes0NO PAD
utf8mb4_polish_ciutf8mb4229Yes8PAD SPACE
utf8mb4_romanian_ciutf8mb4227Yes8PAD SPACE
utf8mb4_roman_ciutf8mb4239Yes8PAD SPACE
utf8mb4_ro_0900_ai_ciutf8mb4259Yes0NO PAD
utf8mb4_ro_0900_as_csutf8mb4282Yes0NO PAD
utf8mb4_ru_0900_ai_ciutf8mb4306Yes0NO PAD
utf8mb4_ru_0900_as_csutf8mb4307Yes0NO PAD
utf8mb4_sinhala_ciutf8mb4243Yes8PAD SPACE
utf8mb4_sk_0900_ai_ciutf8mb4269Yes0NO PAD
utf8mb4_sk_0900_as_csutf8mb4292Yes0NO PAD
utf8mb4_slovak_ciutf8mb4237Yes8PAD SPACE
utf8mb4_slovenian_ciutf8mb4228Yes8PAD SPACE
utf8mb4_sl_0900_ai_ciutf8mb4260Yes0NO PAD
utf8mb4_sl_0900_as_csutf8mb4283Yes0NO PAD
utf8mb4_spanish2_ciutf8mb4238Yes8PAD SPACE
utf8mb4_spanish_ciutf8mb4231Yes8PAD SPACE
utf8mb4_sr_latn_0900_ai_ciutf8mb4314Yes0NO PAD
utf8mb4_sr_latn_0900_as_csutf8mb4315Yes0NO PAD
utf8mb4_sv_0900_ai_ciutf8mb4264Yes0NO PAD
utf8mb4_sv_0900_as_csutf8mb4287Yes0NO PAD
utf8mb4_swedish_ciutf8mb4232Yes8PAD SPACE
utf8mb4_tr_0900_ai_ciutf8mb4265Yes0NO PAD
utf8mb4_tr_0900_as_csutf8mb4288Yes0NO PAD
utf8mb4_turkish_ciutf8mb4233Yes8PAD SPACE
utf8mb4_unicode_520_ciutf8mb4246Yes8PAD SPACE
utf8mb4_unicode_ciutf8mb4224Yes8PAD SPACE
utf8mb4_vietnamese_ciutf8mb4247Yes8PAD SPACE
utf8mb4_vi_0900_ai_ciutf8mb4277Yes0NO PAD
utf8mb4_vi_0900_as_csutf8mb4300Yes0NO PAD
utf8mb4_zh_0900_as_csutf8mb4308Yes0NO PAD

列说明:

  • Collation:比较规则名称,命名方式 字符集名称_语言_后缀
后缀英文释义描述
_aiaccent insensitive不区分重音
_asaccent sensitive区分重音
_cicase insensitive不区分大小写
_cscase sensitive区分大小写
_binbinary以二进制方式比较
  • Charset: 比较规则所属字符集。
  • Id:比较规则id。
  • Default:YES 的就是该字符集的默认比较规则。
  • Compiled:是否将字符集编译到服务器中。
  • Sortlen:这与对字符集中表示的字符串进行排序所需的内存量有关。

字符集的应用

MySQL 有4个级别的字符集和比较规则,分别是:

  1. 服务器级别
  2. 数据库级别
  3. 表级别
  4. 列级别

由于字符集和比较规则是互相有联系的,如果我们只修改了字符集,比较规则也会跟着变化,如果只修改了比较规则,字符集也会跟着变化,具体规则如下:

  • 只修改字符集,则比较规则将变为修改后的字符集默认的比较规则。
  • 只修改比较规则,则字符集将变为修改后的比较规则对应的字符集。

服务器级别

MySQL 提供了两个系统变量来表示服务器级别的字符集和比较规则。

系统变量描述查看系统变量系统变量值
character_set_server服务器级别的字符集SHOW VARIABLES LIKE ‘character_set_server’;utf8mb3
collation_server服务器级别的比较规则SHOW VARIABLES LIKE ‘collation_server’;utf8mb3_general_ci

可以看到在我的计算机中服务器级别默认的字符集是 utf8 ,默认的比较规则是 utf8_general_ci 。

默认字符集和比较规则设置,修改my.ini

character_set_server=utf8mb4
collation_server=utf8mb4_general_ci

数据库级别

在创建和修改数据库的时候可以指定该数据库的字符集和比较规则,具体语法如下:

CREATE DATABASE 数据库名[[DEFAULT] CHARACTER SET 字符集名称][[DEFAULT] COLLATE 比较规则名称];ALTER DATABASE 数据库名[[DEFAULT] CHARACTER SET 字符集名称][[DEFAULT] COLLATE 比较规则名称];

查看数据库字符集和比较规则:

select SCHEMA_NAME,DEFAULT_CHARACTER_SET_NAME,DEFAULT_COLLATION_NAME,SQL_PATH 
from information_schema.SCHEMATA;

在这里插入图片描述

表级别

在创建和修改表的时候指定表的字符集和比较规则,语法如下:

CREATE TABLE 表名 (列的信息)[[DEFAULT] CHARACTER SET 字符集名称][COLLATE 比较规则名称]]ALTER TABLE 表名[[DEFAULT] CHARACTER SET 字符集名称][COLLATE 比较规则名称]

查询MySQL表字符集和比较规则:

show table status  from spring_security like 'user';#或者
select * from information_schema.TABLES
where TABLE_SCHEMA='spring_security' and  TABLE_NAME='user';

spring_security是数据库名称,user为表名称。输出结果格式化如下:
在这里插入图片描述

show create table user;

字符集输出:

CREATE TABLE `user` (`id` bigint NOT NULL AUTO_INCREMENT,`created_time` datetime DEFAULT NULL,`name` varchar(255) DEFAULT NULL,`password` varchar(255) DEFAULT NULL,`updated_time` datetime DEFAULT NULL,`user_id` bigint DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb3

列级别

对于存储字符串的列,同一个表中的不同的列也可以有不同的字符集和比较规则。我们在创建和
修改列定义的时候可以指定该列的字符集和比较规则,语法如下:

CREATE TABLE 表名(列名 字符串类型 [CHARACTER SET 字符集名称] [COLLATE 比较规则名称],其他列...
);ALTER TABLE 表名 MODIFY 列名 字符串类型 [CHARACTER SET 字符集名称] [COLLATE 比较规则名称];

客户端和服务器通信中的字符集

从客户端发往服务器的请求本质上就是一个字符串,服务器向客户端返回的结果本质上也是一个字符
串,而字符串其实是使用某种字符集编码的二进制数据。这个字符串可不是使用一种字符集的编码方式一成不变,从发送请求到返回结果这个过程中伴随着多次字符集的转换,在这个过程中会用到3个系统变量。

系统变量描述
character_set_client服务器解码请求时使用的字符集
character_set_connection服务器处理请求时会把请求字符串从 character_set_client 转为 character_set_connection
character_set_results服务器向客户端返回数据时使用的字符集

查看MySQL字符集配置:

show variables like 'character%'

在这里插入图片描述
这几个变量与客户端和服务端的交互关系:
在这里插入图片描述

MySQL 中从发送请求到返回结果过程里发生的各种字符集转换,非常麻烦。所以我们通常都把 character_set_clientcharacter_set_connectioncharacter_set_results 这三个系统变量设置成和客户端使用的字符集一致的情况,这样减少了很多无谓的字符集转换。

MySQL 提供了一条非常简便的语句:

SET NAMES 字符集名;

上面语句产生的效果与下面一样:

SET character_set_client = 字符集名;
SET character_set_connection = 字符集名;
SET character_set_results = 字符集名;

另外,如果想在启动客户端的时候就把 character_set_clientcharacter_set_connection
character_set_results 这三个系统变量的值设置成一样的,那我们可以在启动客户端的时候指定一个叫default-character-set 的启动选项。
my.ini文件配置:

default-character-set=utf8

相关文章:

MySQL-字符集和比较规则

在计算机中只能存储二进制数据,那该怎么存储字符串呢?当然是建立字符与二进制数据的映射关系 了,建立这个关系最起码要搞清楚两件事: 界定清楚字符范围:需要把哪些字符映射成二进制数据?编码与解码&#x…...

微搭低代码从入门到精通12-网格布局

开发小程序首要的就是考虑布局的问题,我们在以前的版本只能选择普通容器结合图片和文本组件来构建页面。 使用通用组件布局也可以,但有个问题是你要先学习CSS,要懂布局的概念,比如需要知道啥是flex布局,然后还得熟悉每…...

【c语言】二叉树

主页:114514的代码大冒险 qq:2188956112(欢迎小伙伴呀hi✿(。◕ᴗ◕。)✿ ) Gitee:庄嘉豪 (zhuang-jiahaoxxx) - Gitee.com 引入 我们之前已经学过线性数据结构,今天我们将介绍非线性数据结构----树 树是一种非线性的…...

六、Java框架之SpringBoot

黑马课程 文章目录1. SpringBoot入门1.1 SpringBoot入门案例步骤1:创建SpringBoot项目高版本springboot常见错误步骤2:创建BookController步骤3:启动服务器并运行程序pom.xml示例1.2 官网创建SpringBoot1.3 SpringBoot工程快速启动问题导入打…...

「Python|环境安装|Windows」如何在Windows上安装Python环境?

本文主要介绍如何在Windows上安装Python,帮助初学者或者非程序员伙伴快速搭建可以运行python代码的环境。 文章目录安装python做一点小配置验证python如何安装指定版本的python编程语言的环境搭建一直是学习编程的第一道门槛。 对于如何在Linux系统上安装指定版本的…...

人工智能轨道交通行业周刊-第33期(2023.2.6-2.12)

本期关键词:高铁激光清洗、高铁确认列车、无线通信系统、推理服务优化、量子信息技术 1 整理涉及公众号名单 1.1 行业类 RT轨道交通中关村轨道交通产业服务平台人民铁道世界轨道交通资讯网铁路信号技术交流北京铁路轨道交通网上榜铁路视点ITS World轨道交通联盟V…...

五分钟看懂Java字节码:极简手册

字节码新手很容易被厚厚的 JVM 书籍劝退,即使我看过相关书籍,工作真正用到时也全忘了,还得现学。 等我有了一定的字节码阅读经验,才发现字节码其实非常简单,只需要三步就能快速学会: 先了解 JVM 的基本结…...

C++ 类与对象(下)

✅<1>主页&#xff1a;我的代码爱吃辣 &#x1f4c3;<2>知识讲解&#xff1a;C &#x1f525;<3>创作者&#xff1a;我的代码爱吃辣 ☂️<4>开发环境&#xff1a;Visual Studio 2022 &#x1f4ac;<5>前言&#xff1a;C类与对象的收尾工作&#…...

Java基础——I/O

一、异常 异常是程序中可能出现的问题&#xff0c;它的父类是Exception。异常分为两类&#xff0c;编译时异常、运行时异常。 编译时异常&#xff1a;没有继承RuntimeException的异常&#xff0c;直接继承于Exception。编译阶段就会错误提示。运行时异常&#xff1a;RuntimeE…...

关于@hide的理解

在上一篇文章《学习HandlerThread》我们提到虽然HandlerThread类里有getThreadHandler()方法得到Handler&#xff0c;但是我们不可能调用到它。因为这个方法用hide注释了 /*** return a shared {link Handler} associated with this thread* hide*/NonNullpublic Handler getT…...

使用python加密主机文件几种方法实现

本文主要介绍了使用python加密主机文件几种方法实现&#xff0c;文中通过示例代码介绍的非常详细&#xff0c;对大家的学习或者工作具有一定的参考学习价值&#xff0c;需要的朋友们下面随着小编来一起学习学习吧数据加密是一种保护数据安全的技术&#xff0c;通过对数据进行编…...

西湖论剑 2023 比赛复现

WEB real_ez_node 在 route/index.js 中&#xff1a; router.post(/copy,(req,res)>{res.setHeader(Content-type,text/html;charsetutf-8)var ip req.connection.remoteAddress;console.log(ip);var obj {msg: ,}if (!ip.includes(127.0.0.1)) {obj.msg"only for…...

微信小程序更换管理员/重置管理员

方式1&#xff1a; 首先进入微信公众平台官网进入并登录后在管理中找到成员管理选项找到管理员点击后方的修改选项需要使用原管理员的微信进行扫码验证扫码后在手机上确认绑定新管理员&#xff0c;注意&#xff1a;如果是个人账号不可以更改成其他人。 方式2&#xff1a;原管…...

企业进存销管理系统

技术&#xff1a;Java、JSP等摘要&#xff1a;随着当今世界计算机技术的飞速发展&#xff0c;计算机在企业管理中应用的普及&#xff0c;利用计算机实现企业进销存管理势在必行。本系统结合公司实际的进销存制度&#xff0c;通过对本公司的供应商、客户、商品、进货、销售、进销…...

C++入门

变量变量创建的语法: 数据类型 变量名 变量初始值;int a 10;cout << a << endl;常量作用:用于记录程序中不可更改的教国C定义常量两种方式1).#define 宏常量:#define 常量名 常量值通常在文件上方定义。表示一个常量2).const 修饰的变量const 数据类型 常量名 常…...

视频知识点(20)- H264码流如何在SPS中获取宽高信息?

《音视频开发》系列-总览 前沿 了解H264视频编码格式的小伙伴都知道,H264编码中存在两个非常重要的参数集。没错,它们就是序列参数集(SPS)和图像参数集(PPS),而且通常情况下,PPS会依赖SPS中的部分参数信息,同时,视频码流的宽高信息也存储在SPS中。那么如何从中获取视…...

鲜花数据集实验结果总结

从read_split_data中得到&#xff1a;训练数据集&#xff0c;验证数据集&#xff0c;训练标签&#xff0c;验证标签。的所有的具体详细路径 数据集位置&#xff1a;https://download.csdn.net/download/guoguozgw/87437634 import os #一种轻量级的数据交换格式&#xff0c; …...

ElasticJob-Lite架构篇 - 认知分布式任务调度ElasticJob-Lite

前言 本文基于 ElasticJob-Lite 3.x 版本展开分析。 如果 Quartz 集群中有多个服务端节点&#xff0c;任务决定在哪个服务端节点上执行的呢&#xff1f; Quartz 采用随机负载&#xff0c;通过 DB 抢占下一个即将触发的 Trigger 绑定的任务的执行权限。 在 Quartz 的基础上&…...

【直击招聘C++】2.6 对象之间的复制

2.6 对象之间的复制一、要点归纳1. 对象之间的复制操作1.1 运算符1.2 拷贝构造函数2. 对象之间的浅复制和深复制2.1 对象的浅复制2.2 对象的深复制二、面试真题解析面试题1面试题2一、要点归纳 1. 对象之间的复制操作 同一个类的对象之间可以进行复制操作&#xff0c;即将一个…...

学了这么久python,不会连自己啥python版本都不知道吧?

人生苦短&#xff0c;我用Python 源码资料电子书:点击此处跳转文末名片获取 查看 Python 版本 我们可以在命令窗口(Windows 使用 winR 调出 cmd 运行框)使用以下命令查看我们使用的 Python 版本&#xff1a; python -V 或 python --version 以上命令执行结果如下&#xff1a; …...

Revive:从间谍软件进化成银行木马

2022 年 6 月&#xff0c;Cleafy 研究人员发现了一个新的安卓银行木马 Revive。之所以选择 Revive 这个名称&#xff0c;是因为恶意软件为防止停止工作启用的一项功能名为 revive。 Revive 属于持续潜伏的那一类恶意软件&#xff0c;因为它是为特定目标开发和定制的。这种类型…...

Python 之 NumPy 简介和创建数组

文章目录一、NumPy 简介1. 为什么要使用 NumPy2. NumPy 数据类型3. NumPy 数组属性4. NumPy 的 ndarray 对象二、numpy.array() 创建数组1. 基础理论2. 基础操作演示3. numpy.array() 参数详解三、numpy.arange() 生成区间数组四、numpy.linspace() 创建等差数列五、numpy.logs…...

与六年测试工程师促膝长谈,他分享的这些让我对软件测试工作有了全新的认知~

不知不觉已经从事软件测试六年了&#xff0c;2016年毕业到进入外包公司外包给微软做软件测试&#xff0c; 到现在加入著名的外企。六年的时间过得真快。长期的测试工作也让我对软件测试有了比较深入的认识。但是我至今还是一个底层的测试人员&#xff0c;我的看法都比较狭隘&am…...

裕太微在科创板上市:市值约186亿元,哈勃科技和小米基金为股东

2月10日&#xff0c;裕太微电子股份有限公司&#xff08;下称“裕太微”&#xff0c;SH:688515&#xff09;在上海证券交易所上市。本次上市&#xff0c;裕太微的发行价为92元/股&#xff0c;发行2000万股&#xff0c;发行市盈率不适用&#xff0c;发行后总股本8000万股。 根据…...

毕业后5年,我终于变成了月薪13000的软件测试工程师

我用了近2个月的时间转行&#xff0c;在今年1月底顺利入职了一家北京的互联网公司&#xff0c;从事的是软件测试的工作。 和大家看到的一样&#xff0c;我求职的时间花费的比较短&#xff0c;求职过程非常顺利&#xff0c;面试了一周就拿到了3家offer&#xff0c;3家offer的薪…...

实践指南|如何在 Jina 中使用 OpenTelemetry 进行应用程序的监控和跟踪

随着软件和云技术的普及&#xff0c;越来越多的企业开始采用微服务架构、容器化、多云部署和持续部署模式&#xff0c;这增加了因系统失败而给运维/ SRE / DevOps 团队带来的压力&#xff0c;从而增加了开发团队和他们之间的摩擦&#xff0c;因为开发团队总是想尽快部署新功能&…...

MySQL 创建数据表

在创建数据库之后&#xff0c;接下来就要在数据库中创建数据表。所谓创建数据表&#xff0c;指的是在已经创建的数据库中建立新表。 创建数据表的过程是规定数据列的属性的过程&#xff0c;同时也是实施数据完整性&#xff08;包括实体完整性、引用完整性和域完整性&#xff09…...

一文详解网络安全事件的防护与响应

网络安全事件的发生&#xff0c;往往意味着一家企业的生产经营活动受到影响&#xff0c;甚至数据资产遭到泄露。日益复杂的威胁形势使现代企业面临更大的网络安全风险。因此&#xff0c;企业必须提前准备好响应网络安全事件的措施&#xff0c;并制定流程清晰、目标明确的事件响…...

vue directive 注册局部指令

注册局部指令 vue directive 在注册局部指令时&#xff0c;是通过在组件 options 选项中设置 directives 属性。如下&#xff1a; directives: {focus: {// 指令的定义inserted: function (el) {el.focus()}} }在模板中的任何元素上都可以使用新的 v-focus property&#xff…...

LC-70-爬楼梯

原题链接&#xff1a;爬楼梯 个人解法 思路&#xff1a; 动态规划 状态表示&#xff1a;f[i]表示走到第n阶台阶有几种方法 状态转移&#xff1a;f[i] f[i -1] f[i - 2] 这实际上就是斐波那契数列&#xff0c;通过转移可以看到&#xff0c;我们只用了三个变量&#xff0c;故…...