mysql 中 utf8mb4_general_ci 与utf8_general_ci 区别
时间: 2023-10-07 19:07:23 浏览: 169
在MySQL中,utf8和utf8mb4都是用于存储Unicode字符集的编码。utf8编码最多支持3个字节,而utf8mb4则支持4个字节,这意味着utf8mb4可以存储更多的Unicode字符。具体来说,utf8mb4可以存储的字符包括了emoji表情等一些特殊字符,而utf8则不能。
在排序及比较方面,utf8mb4_general_ci与utf8_general_ci是两种不同的排序规则。utf8_general_ci是基于Unicode字符集的一种排序规则,它会先将字符进行规范化,再进行比较。utf8_general_ci不区分大小写,也不区分重音符号。而utf8mb4_general_ci则是专门用于utf8mb4编码的一种排序规则。与utf8_general_ci不同,utf8mb4_general_ci会将字符根据它们的Unicode编码进行比较,这意味着它会区分大小写和重音符号。如果您需要使用emoji表情或其他特殊字符,则应该使用utf8mb4编码,并选择utf8mb4_general_ci排序规则。
相关问题
怎么把mysql的建表语句转换成pgsql的建表语句,建表语句如下:CREATE TABLE bi_app_user_expiry_time ( pkid varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '主键', user_pkid varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户id', expiry_time varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '有效期', update_user varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '修改人', update_time varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '修改日期', PRIMARY KEY (pkid) USING BTREE, UNIQUE KEY uk_pkid (pkid) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='用户资源有效期表';
可以使用以下的pgsql建表语句来替代mysql的建表语句:
```
CREATE TABLE bi_app_user_expiry_time (
pkid varchar(30) NOT NULL,
user_pkid varchar(30) NOT NULL,
expiry_time varchar(100) NOT NULL,
update_user varchar(30) DEFAULT NULL,
update_time varchar(100) DEFAULT NULL,
PRIMARY KEY (pkid),
UNIQUE (pkid)
) WITH (
OIDS=FALSE
) ;
```
需要注意的是,pgsql不支持使用 `USING BTREE` 语法来指定索引类型,因此在替换建表语句时需要将这部分语句去掉。同时,pgsql中的 `UNIQUE` 约束会自动创建索引,因此不需要单独指定索引。
mysql数据库编码utf8mb4_0900_ai_ci和utf8mb4_general_ci的区别
MySQL中的`utf8mb4_0900_ai_ci`和`utf8mb4_general_ci`都是为了支持UTF-8字符集,但它们之间存在一些关键区别:
1. **排序规则**:
- `utf8mb4_0900_ai_ci`(ASCII Ignorant Case Insensitive):这是一种对大小写不敏感的排序规则,但它只处理ASCII字符范围内的字词顺序。对于非ASCII字符,它会按照Unicode全字节范围进行排序,可能会导致一些意想不到的结果,尤其是当涉及非英语字母时。
- `utf8mb4_general_ci`(General Case Insensitive):这是MySQL推荐的标准通用排序规则,它同样是对大小写不敏感的,但是整个字符串都基于Unicode进行比较,包括所有的多字节字符。
2. **搜索速度**:
- `utf8mb4_0900_ai_ci`由于仅考虑ASCII字符,其搜索速度通常比`utf8mb4_general_ci`更快。然而,如果你的数据集中包含大量的非ASCII字符,这个优势就不复存在了。
- `utf8mb4_general_ci`虽然速度略慢,但在处理各种语言和字符集时提供了更一致的行为。
3. **兼容性**:
- `utf8mb4_0900_ai_ci`在某些旧版本的MySQL中可能存在兼容性问题,因为它不是一个通用的字符集选项。
- `utf8mb4_general_ci`更通用,适用于大部分现代MySQL环境。
综上所述,选择哪一个取决于你的具体需求。如果你的数据主要是英文或者其他ASCII字符,而且对搜索性能有较高要求,可以选择`utf8mb4_0900_ai_ci`。但如果需要处理多种语言的复杂情况,建议使用`utf8mb4_general_ci`,尽管这可能会牺牲一些查询速度。同时,确保你的表和字段也都设置为`utf8mb4`字符集。
阅读全文