菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
1902
0

MySQL 字段长度

原创
05/13 14:22
阅读数 1537

在我们通过数据库工具手动创建数据库的时候会看到,这样的内容:字符集、排序规则这两个在创建数据库的时候用途是什么呢?我们点开字符集可查看到包含内容还是比较多的:

MySQL 字符集与排序规则

一、字符集和排序规则对应关系

排序规则,就是指字符比较时是否区分大小写,以及是按照字符编码进行比较还是直接用二进制数据比较。

armscii8 (ARMSCII-8 Armenian)

armscii8_bin 亚美尼亚语, 二进制

armscii8_general_ci 亚美尼亚语, 不区分大小写

ascii (US ASCII)

ascii_bin 西欧 (多语言), 二进制

ascii_general_ci 西欧 (多语言), 不区分大小写

big5 (Big5 Traditional Chinese)

big5_bin 繁体中文, 二进制

big5_chinese_ci 繁体中文, 不区分大小写

binary (Binary pseudo charset)

binary 二进制

cp1250 (Windows Central European)

cp1250_bin 中欧 (多语言), 二进制

cp1250_croatian_ci 克罗地亚语, 不区分大小写

cp1250_czech_cs 捷克语, 区分大小写

cp1250_general_ci 中欧 (多语言), 不区分大小写

cp1251 (Windows Cyrillic)

cp1251_bin 西里尔语 (多语言), 二进制

cp1251_bulgarian_ci 保加利亚语, 不区分大小写

cp1251_general_ci 西里尔语 (多语言), 不区分大小写

cp1251_general_cs 西里尔语 (多语言), 区分大小写

cp1251_ukrainian_ci 乌克兰语, 不区分大小写

cp1256 (Windows Arabic)

cp1256_bin 阿拉伯语, 二进制

cp1256_general_ci 阿拉伯语, 不区分大小写

cp1257 (Windows Baltic)

cp1257_bin 巴拉克语 (多语言), 二进制

cp1257_general_ci 巴拉克语 (多语言), 不区分大小写

cp1257_lithuanian_ci 立陶宛语, 不区分大小写

cp850 (DOS West European)

cp850_bin 西欧 (多语言), 二进制

cp850_general_ci 西欧 (多语言), 不区分大小写

cp852 (DOS Central European)

cp852_bin 中欧 (多语言), 二进制

cp852_general_ci 中欧 (多语言), 不区分大小写

cp866 (DOS Russian)

cp866_bin 俄语, 二进制

cp866_general_ci 俄语, 不区分大小写

cp932 (SJIS for Windows Japanese)

cp932_bin 日语, 二进制

cp932_japanese_ci 日语, 不区分大小写

dec8 (DEC West European)

dec8_bin 西欧 (多语言), 二进制

dec8_swedish_ci 瑞典语, 不区分大小写

eucjpms (UJIS for Windows Japanese)

eucjpms_bin 日语, 二进制

eucjpms_japanese_ci 日语, 不区分大小写

euckr (EUC-KR Korean)

euckr_bin 朝鲜语, 二进制

euckr_korean_ci 朝鲜语, 不区分大小写

gb2312 (GB2312 Simplified Chinese)

gb2312_bin 简体中文, 二进制

gb2312_chinese_ci 简体中文, 不区分大小写

gbk (GBK Simplified Chinese)

gbk_bin 简体中文, 二进制

gbk_chinese_ci 简体中文, 不区分大小写

geostd8 (GEOSTD8 Georgian)

geostd8_bin 乔治亚语, 二进制

geostd8_general_ci 乔治亚语, 不区分大小写

greek (ISO 8859-7 Greek)

greek_bin 希腊语, 二进制

greek_general_ci 希腊语, 不区分大小写

hebrew (ISO 8859-8 Hebrew)

hebrew_bin 希伯来语, 二进制

hebrew_general_ci 希伯来语, 不区分大小写

hp8 (HP West European)

hp8_bin 西欧 (多语言), 二进制

hp8_english_ci 英语, 不区分大小写

keybcs2 (DOS Kamenicky Czech-Slovak)

keybcs2_bin 捷克斯洛伐克语, 二进制

keybcs2_general_ci 捷克斯洛伐克语, 不区分大小写

koi8r (KOI8-R Relcom Russian)

koi8r_bin 俄语, 二进制

koi8r_general_ci 俄语, 不区分大小写

koi8u (KOI8-U Ukrainian)

koi8u_bin 乌克兰语, 二进制

koi8u_general_ci 乌克兰语, 不区分大小写

latin1 (cp1252 West European)

latin1_bin 西欧 (多语言), 二进制

latin1_danish_ci 丹麦语, 不区分大小写

latin1_general_ci 西欧 (多语言), 不区分大小写

latin1_general_cs 西欧 (多语言), 区分大小写

latin1_german1_ci 德语 (字典), 不区分大小写

latin1_german2_ci 德语 (电话本), 不区分大小写

latin1_spanish_ci 西班牙语, 不区分大小写

latin1_swedish_ci 瑞典语, 不区分大小写

latin2 (ISO 8859-2 Central European)

latin2_bin 中欧 (多语言), 二进制

latin2_croatian_ci 克罗地亚语, 不区分大小写

latin2_czech_cs 捷克语, 区分大小写

latin2_general_ci 中欧 (多语言), 不区分大小写

latin2_hungarian_ci 匈牙利语, 不区分大小写

latin5 (ISO 8859-9 Turkish)

latin5_bin 土耳其语, 二进制

latin5_turkish_ci 土耳其语, 不区分大小写

latin7 (ISO 8859-13 Baltic)

latin7_bin 巴拉克语 (多语言), 二进制

latin7_estonian_cs 爱沙尼亚语, 区分大小写

latin7_general_ci 巴拉克语 (多语言), 不区分大小写

latin7_general_cs 巴拉克语 (多语言), 区分大小写

macce (Mac Central European)

macce_bin 中欧 (多语言), 二进制

macce_general_ci 中欧 (多语言), 不区分大小写

macroman (Mac West European)

macroman_bin 西欧 (多语言), 二进制

macroman_general_ci 西欧 (多语言), 不区分大小写

sjis (Shift-JIS Japanese)

sjis_bin 日语, 二进制

sjis_japanese_ci 日语, 不区分大小写

swe7 (7bit Swedish)

swe7_bin 瑞典语, 二进制

swe7_swedish_ci 瑞典语, 不区分大小写

tis620 (TIS620 Thai)

tis620_bin 泰语, 二进制

tis620_thai_ci 泰语, 不区分大小写

ucs2 (UCS-2 Unicode)

ucs2_bin Unicode (多语言), 二进制

ucs2_czech_ci 捷克语, 不区分大小写

ucs2_danish_ci 丹麦语, 不区分大小写

ucs2_esperanto_ci 未知, 不区分大小写

ucs2_estonian_ci 爱沙尼亚语, 不区分大小写

ucs2_general_ci Unicode (多语言), 不区分大小写

ucs2_hungarian_ci 匈牙利语, 不区分大小写

ucs2_icelandic_ci 冰岛语, 不区分大小写

ucs2_latvian_ci 拉脱维亚语, 不区分大小写

ucs2_lithuanian_ci 立陶宛语, 不区分大小写

ucs2_persian_ci 波斯语, 不区分大小写

ucs2_polish_ci 波兰语, 不区分大小写

ucs2_roman_ci 西欧, 不区分大小写

ucs2_romanian_ci 罗马尼亚语, 不区分大小写

ucs2_slovak_ci 斯洛伐克语, 不区分大小写

ucs2_slovenian_ci 斯洛文尼亚语, 不区分大小写

ucs2_spanish2_ci 传统西班牙语, 不区分大小写

ucs2_spanish_ci 西班牙语, 不区分大小写

ucs2_swedish_ci 瑞典语, 不区分大小写

ucs2_turkish_ci 土耳其语, 不区分大小写

ucs2_unicode_ci Unicode (多语言), 不区分大小写

ujis (EUC-JP Japanese)

ujis_bin 日语, 二进制

ujis_japanese_ci 日语, 不区分大小写

utf8 (UTF-8 Unicode)

utf8_bin Unicode (多语言), 二进制

utf8_czech_ci 捷克语, 不区分大小写

utf8_danish_ci 丹麦语, 不区分大小写

utf8_esperanto_ci 未知, 不区分大小写

utf8_estonian_ci 爱沙尼亚语, 不区分大小写

utf8_general_ci Unicode (多语言), 不区分大小写

utf8_hungarian_ci 匈牙利语, 不区分大小写

utf8_icelandic_ci 冰岛语, 不区分大小写

utf8_latvian_ci 拉脱维亚语, 不区分大小写

utf8_lithuanian_ci 立陶宛语, 不区分大小写

utf8_persian_ci 波斯语, 不区分大小写

utf8_polish_ci 波兰语, 不区分大小写

utf8_roman_ci 西欧, 不区分大小写

utf8_romanian_ci 罗马尼亚语, 不区分大小写

utf8_slovak_ci 斯洛伐克语, 不区分大小写

utf8_slovenian_ci 斯洛文尼亚语, 不区分大小写

utf8_spanish2_ci 传统西班牙语, 不区分大小写

utf8_spanish_ci 西班牙语, 不区分大小写

utf8_swedish_ci 瑞典语, 不区分大小写

utf8_turkish_ci 土耳其语, 不区分大小写

utf8_unicode_ci Unicode (多语言), 不区分大小写

来源:https://www.cnblogs.com/chenjfblog/p/76872...

unicode与general选择

utf8_unicode_ci比较准确,utf8_general_ci速度比较快。通常情况下 utf8_general_ci的准确性就够我们用的了,在我看过很多程序源码后,发现它们大多数也用的是utf8_general_ci,所以新建数据 库时一般选用utf8_general_ci就可以了


看到上面的介绍大致有一个对字符集和排序规则的了解,其中我们对utf8、gbk、gb2312比较熟悉也是最经常使用的字符集,下面主要针对这三个进行说明。

1、UTF8:(Unicode Transformation Format-8bit),允许含BOM,但通常不含BOM。是用以解决国际上字符的一种多字节编码,它对英文使用8位(即一个字节),中文使用24为(三个字节)来编码。UTF-8包含全世界所有国家需要用到的字符,是国际编码,通用性强。UTF-8编码的文字可以在各国支持UTF8字符集的浏览器上显示。如,如果是UTF8编码,则在外国人的英文IE上也能显示中文,他们无需下载IE的中文语言支持包。

2.gbk:是国家标准GB2312基础上扩容后兼容GB2312的标准。GBK的文字编码是用双字节来表示的,即不论中、英文字符均使用双字节来表示,为了区分中文,将其最高位都设定成1。GBK包含全部中文字符,是国家编码,通用性比UTF8差,不过UTF8占用的数据库比GBD大。

GB2312是GBK的子集,GBK是GB18030的子集

GBK是包括中日韩字符的大字符集合

如果是中文的网站 推荐GB2312 GBK有时还是有点问题

为了避免所有乱码问题,应该采用UTF-8,将来要支持国际化也非常方便

UTF-8可以看作是大字符集,它包含了大部分文字的编码。

使用UTF-8的一个好处是其他地区的用户(如香港台湾)无需安装简体中文支持就能正常观看你的文字而不会出现乱码。

gb2312是简体中文的码

gbk支持简体中文及繁体中文

big5支持繁体中文

utf-8支持几乎所有字符

通过命令:show character set like '%utf%'; 可以查看到utf下所有的字符集:

MySQL 字段长度

UTF8和UTF8mb4的区别在于:

1.utf8mb4比utf8多了emoji编码支持(Emoji 表情);

2.utf8 3个字节,utf8mb4 4个字节;

为什么会有UTF8MB4?

既然utf8应付日常使用完全没有问题,那为什么还要使用utf8mb4呢? 低版本的MySQL支持的utf8编码,最大字符长度为 3 字节,如果遇到 4 字节的字符就会出现错误了。三个字节的 UTF-8 最大能编码的 Unicode 字符是 0xFFFF,也就是 Unicode 中的基本多文平面(BMP)。也就是说,任何不在基本多文平面的 Unicode字符,都无法使用MySQL原有的 utf8 字符集存储。这些不在BMP中的字符包括哪些呢?最常见的就是Emoji 表情(Emoji 是一种特殊的 Unicode 编码,常见于 ios 和 android 手机上),和一些不常用的汉字,以及任何新增的 Unicode 字符等等。

UTF-8编码

理论上将, UTF-8 格式使用一至六个字节,最大能编码 31 位字符。最新的 UTF-8 规范只使用一到四个字节,最大能编码21位,正好能够表示所有的 17个 Unicode 平面。关于UTF编码,请阅读《常见编码总结》一文。
而utf8 则是 Mysql 早期版本中支持的一种字符集,只支持最长三个字节的 UTF-8字符,也就是 Unicode 中的基本多文本平面。这可能是因为在MySQL发布初期,基本多文种平面之外的字符确实很少用到。而在MySQL5.5.3版本后,要在 Mysql 中保存 4 字节长度的 UTF-8 字符,就可以使用 utf8mb4 字符集了。例如可以用utf8mb4字符编码直接存储emoj表情,而不是存表情的替换字符。

如果实际用途上来看,可以给要用到emoji的库或者说表,设置utf8mb4.

比如评论要支持emoji可以用到.

建议普通表使用utf8 如果这个表需要支持emoji就使用utf8mb4

新建mysql库或者表的时候还有一个排序规则

什么是Unicode

统一码、万国码、单一码)是计算机科学领域里的一项业界标准,包括字符集、编码方案等。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。

因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理。最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以,一个字节能表示的最大的整数就是255(二进制11111111=十进制255),0 - 255被用来表示大小写英文字母、数字和一些符号,这个编码表被称为ASCII编码,比如大写字母A的编码是65,小写字母z的编码是122。

如果要表示中文,显然一个字节是不够的,至少需要两个字节,而且还不能和ASCII编码冲突,所以,中国制定了GB2312编码,用来把中文编进去。

类似的,日文和韩文等其他语言也有这个问题。为了统一所有文字的编码,Unicode应运而生Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了

发表评论

0/200
1902 点赞
0 评论
收藏
为你推荐 换一批