一、示例sql:
CREATE TABLE test_index(
id BIGINT auto_increment COMMENT '主键',
PRIMARY key(id) COMMENT '主键',
user_name VARCHAR(64) not null COMMENT '用户名',
nick_name VARCHAR(64) not null COMMENT '姓名',
INDEX name(user_name,nick_name) COMMENT '用户名称',
age INT(3) not null COMMENT '年龄',
`code` VARCHAR(21) not null COMMENT '唯一代码',
UNIQUE(`code`) COMMENT '唯一代码',
phone VARCHAR(11) COMMENT '联系电话',
create_by BIGINT(64) not null COMMENT '创建者',
create_time datetime not null COMMENT '创建时间'
)CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci,COMMENT = '测试索引表',ENGINE = InnoDB;
二、字符集:
2.1对应代码片段:
CHARACTER SET utf8mb4
2.2字符集介绍:
在MySQL中创建表时,可以选择不同的字符集(character set),这会直接影响到字符的存储和处理方式。不同的字符集能够支持不同语言的字符编码,这对于国际化或多语言的应用尤其重要。
2.2.1以下是一些常见的MySQL字符集及其区别:
(1). **ASCII**
这是最基本的字符集,仅支持英文和部分控制字符,共128个字符。
每个字符占用1字节。
(2). **GBK**
主要用于简体中文,是GB2312的扩展,支持更多的汉字和符号。
每个字符占用1或2字节。
(3). **GB2312**
最初的简体中文字符集,支持较少的汉字和符号。
每个字符占用2字节。
(4). **BIG5**
用于繁体中文,支持繁体汉字和符号。
每个字符占用2字节。
(5). **UTF8**(通常指的是`utf8mb3`)
支持世界上大多数语言的字符,包括中文、日文、韩文等。
每个字符占用1到3字节,对于ASCII字符集中的字符只占用1字节。
(6). **UTF8MB4**
这是完整的UTF-8字符集,支持所有Unicode字符,包括表情符号和其他辅助平面字符。
每个字符占用1到4字节。
2.2.2选择字符集时,需要考虑以下几个因素:
**存储空间**:多字节字符集比单字节字符集占用更多空间。
**性能**:多字节字符集可能会影响查询性能,尤其是在全文索引和字符串比较操作上。
**字符支持**:需要确保所选字符集能支持应用程序中使用的全部字符。
在创建表时,可以使用`CREATE TABLE`语句的`CHARACTER SET`或`CHARSET`子句来指定字符集
三、校对/排序规则:
在MySQL中,字符集通常会伴随一个排序规则(collation),它定义了字符的排序和比较方式。例如:
utf8mb4_general_ci
`utf8mb4_general_ci`表示不区分大小写的排序规则,`utf8mb4_general_cs`表示区分大小写,而`utf8mb4_bin`则表示二进制比较,即区分大小写和特殊字符。
四、注意事项:
1、字符集(CHARACTER ):选错字符集,可能导致有些内容无法存储,比如emoj表情
2、校对/排序规则(COLLATE):两张表不同的规则可能导致无法联表,列入下图:
我的test_index表采用了`utf8mb4_general_ci`规则,test_join采用了`utf8mb4_unicode_ci`规则