MySQL-字符集和比较规则

news2024/10/1 9:46:14

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

  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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/338282.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

九龙证券|外资强势出手!这只科创板百元股,被疯狂加仓

本周,北上资金净买入29.32亿元,连续第13周加仓A股。分商场看,北上资金加仓重点倾向于沪市的白马蓝筹股,沪股通取得50.34亿元,深股通则被净卖出21.02亿元。 食品饮料本周取得逾23亿元的增持,居职业首位&…

leaflet 读取上传的geojson文件,转换为wkt文件(057)

第057个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet中上传geojson文件,解析geojson文件并转换为WKT,并在地图上显示图片。 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果. 文章目录 示例效果配置方式示例源代码(共128行)安装 @terraf…

软件测试/自动化测试/测试开发/性能测试经典好书推荐

目录 前言 测试理论与实践 性能测试 安全测试 自动化测试 编程语言与开发技能 管理技能 前言 软件测试入行容易进阶难。从测试小白成长为测试经理、总监级别人才,要跨越长长的技术栈升级之路,挑战非常高的综合能力要求。 大牛都是相似的&#xf…

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

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

【设计模式之美 设计原则与思想:面向对象】14 | 实战二(下):如何利用面向对象设计和编程开发接口鉴权功能?

在上一节课中,针对接口鉴权功能的开发,我们讲了如何进行面向对象分析(OOA),也就是需求分析。实际上,需求定义清楚之后,这个问题就已经解决了一大半,这也是为什么我花了那么多篇幅来讲…

创建Django项目

创建Django项目 步骤 创建Django项目 django-admin startproject name 创建子应用 python manager.py startapp name创建工程 在使用Flask框架时,项目工程目录的组织与创建是需要我们自己手动创建完成的。 在django中,项目工程目录可以借助django提供…

嵌软工程师要掌握的硬件知识2:一文看懂什么开漏和推挽电路(open-drain / push-pull)

想了解开漏和推挽,就要先了解一下三极管和场效应管是什么,在其他章节有详细介绍,本文就不再进行赘述。 1 推挽(push pull)电路 1.1 理解什么是推挽电路 - 详细介绍 如图所示,Q3是个NPN型三极管,Q4是个PNP型三极管。 1)当Vin电压为正时,上面的N型三极管控制端有电…

ccc-Classification-李宏毅(4)

文章目录Classification 概念Example ApplicationHow to do ClassificationWhy not RegesssionProbability from Class - FeatureProbability from ClassHow’s the results?Modifying ModelThree StepsProbability DistributionClassification 概念 本质是找一个函数&#x…

电商导购CPS,淘宝联盟如何跟单实现用户和订单绑定

前言 大家好,我是小悟 做过自媒体的小伙伴都知道,不管是发图文还是发短视频,直播也好,可以带货。在你的内容里面挂上商品,你自己都不需要囤货,如果用户通过这个商品下单成交了,自媒体平台就会…

基于 MySQL 排它锁实现分布式可重入锁解决方案

一、MySQL 排它锁和共享锁 在进行实验前,先来了解下MySQL 的排它锁和共享锁,在 MySQL 中的锁分为表锁和行锁,在行锁中锁又分成了排它锁和共享锁两种类型。 1. 排它锁 排他锁又称为写锁,简称X锁,是一种悲观锁&#x…

【C++】模板初阶STL简介

今天,你内卷了吗? 文章目录一、泛型编程二、函数模板(显示实例化和隐式实例化)1.函数模板格式2.单参数模板3.多参数模板4.模板参数的匹配原则三、类模板(没有推演的时机,统一显示实例化)1.类模…

RTOS之二环境搭建初识RTOS

参考:https://blog.csdn.net/kouxi1/article/details/123650688RTOS本质就是切换线程栈,栈换了环境就换了,一个重要的结构tcb(linux叫PCB或thread_info):struct tcb{int32_t *sp; // 重要的sp指针&#xff…

seata【SAGA模式】代码实践(细节未必完全符合saga的配置,仅参考)

seata SAGA模式: 代码仍然是上一篇AT模式的代码:AT模式 不需要undo_log表 下面开始: 首先,saga模式依靠状态机的json文件来执行整个流程,其中的开始节点的服务即TM,然后状态机需要依靠三张表&#xff0…

【大数据】Hadoop-HA-Federation-3.3.1集群高可用联邦安装部署文档(建议收藏哦)

背景概述 单 NameNode 的架构使得 HDFS 在集群扩展性和性能上都有潜在的问题,当集群大到一定程度后,NameNode 进程使用的内存可能会达到上百 G,NameNode 成为了性能的瓶颈。因而提出了 namenode 水平扩展方案-- Federation。 Federation 中…

C语言---字符串函数总结

🚀write in front🚀 📝个人主页:认真写博客的夏目浅石. 🎁欢迎各位→点赞👍 收藏⭐️ 留言📝 📣系列专栏:夏目的C语言宝藏 💬总结:希望你看完之…

ChatGPT国内使用方法全攻略(完整图文教程)

你好呀,我是月亮,一个90后的老程序员啦~ 最近ChatGPT完全火出圈了。 相关教程很多,我整理了一份网盘汇总,包含注册、谷歌浏览器插件使用、国内面注册平台,需要的小伙伴自取~ 网盘地址:使用方式汇总文档 …

数据库实践LAB大纲 06 INDEX

索引 索引是一个列表 —— 若干列集合和这些值的记录在数据表存储位置的物理地址 作用 加快检索速度唯一性索引 —— 保障数据唯一性加速表的连接分组和排序进行检索的时候 —— 减少时间消耗 一般建立原则 经常查询的数据主键外键连接字段排序字段少涉及、重复值多的字段…

分享114个JS菜单导航,总有一款适合您

分享114个JS菜单导航,总有一款适合您 114个JS菜单导航下载链接:https://pan.baidu.com/s/1t4_v0PipMjw3ULTLqkEiDQ?pwdgoi2 提取码:goi2 Python采集代码下载链接:https://wwgn.lanzoul.com/iKGwb0kye3wj $.ajax({type: &quo…

“万字“ Java I/O流讲解

Java I/O流讲解 每博一文案 谁让你读了这么多书,又知道了双水村以外还有一个大世界,如果从小你就在这个天地里,日出而作,日落而息。 那你现在就会和众乡亲抱同一理想:经过几年的辛劳,像大哥一样娶个满意的…

2023年中国各大城市薪酬报告出炉

全国地区:https://download.csdn.net/download/std86021/87322224北京:https://download.csdn.net/download/std86021/87273488上海:https://download.csdn.net/download/std86021/87322226广州:https://download.csdn.net/downlo…