二进制字符串 | 非二进制字符串 | |
存储 | 二进制字符串是一个字节序列,可以存储任何类型的信息,例如图像、MP3文件。 | 非二进制字符串是一系列字符,存储的是具有特定字符集和排序规则的文本。例: '张三' |
字符集 | 没有字符集,与字符集没有关系 | 可以指定MySQL拥有的字符集 |
比较规则 | 须逐个字节比较其数值 | 指定字符排序规则 |
1.字符集
查看非二进制字符串可以使用的字符集
字符集 的单字节字符和多字节字符
-- 指定为utf8 , 那么值都是单字节的
-- 指定为 ucs2 , 那么值都是多字节字符
length() -- 查看值的字节长度
char_length() -- 查看字符长度
查看表使用的字符集
show create table aaa CREATE TABLE `aaa` ( `id` int NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci CHARSET=utf8mb4 为aaa表使用的字符集
更改表使用的字符集
ALTER TABLE aaa DEFAULT CHARACTER SET ucs2; CREATE TABLE `aaa` ( `id` int NOT NULL AUTO_INCREMENT,
//ALTER DATABASE 或 ALTER TABLE 命令对已经存在的数据没有作用,只对新创建记录生效 `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=ucs2
再添加一列
ALTER TABLE aaa add column ename varchar(200)
ename 列的字符集为 ucs2
2.排序规则
- _ci 不区分大小写 _cs 区分大小写 _bin(此值按照 二进制的排序规则来排序 ) 。二进制排序规则 : 根据每个字符的数值来进行排序,如果一个值的开头比另一个值的开头大,那么就认定为开头大的值大,不论后面有多小。