mysql 256byte可以存多少汉字,字符编码length,char_length函数
mysql 256byte可以存多少汉字,字符编码length,char_length函数
在MySQL中,UTF-8编码下,每个汉字至少占用3个字节。因此,256字节可以存储的汉字数量为:
(256字节) / (3字节/汉字) = 85.3汉字
由于UTF-8编码中,对于单字节的字符、双字节字符和三字节字符有不同的编码方式,实际使用中可能不能完全均匀分配这256个字节,这样算下来可能存储的汉字数量会更少。但是,这个计算给出了一个大致的范围。
请注意,由于MySQL在存储汉字时可能会使用额外的字节来完成UTF-8编码,所以实际能存储的汉字数量会更少。例如,对于4字节的UTF-8编码(用于表示扩展字符),每个字符将占用4个字节,这将进一步减少可存储的汉字数量。
实际应用中,考虑到数据库表的其他开销,如行首位、字段分隔符等,实际存储汉字的数量可能会更少。所以,在设计数据库表的时候,应当考虑到这些因素,并适当减少预期的存储量。
一个中文汉字占多少字节与编码有关
在mysql中,一个中文汉字所占的字节数与编码格式有关:如果是GBK编码,则一个中文汉字占2个字节;如果是UTF8编码,则一个中文汉字占3个字节,而英文字母占1字节。
UTF8:一个中文汉字=3个字节 utf-8, 英文字母1字节
GBK:一个中文汉字=2个字节 gbk, 英文字母2字节
函数
length()返回字节数,char_length()返回字符数。
GBK、GB2312等与UTF8之间都必须通过Unicode编码才能相互转换:
GBK、GB2312 --> Unicode --> UTF8
UTF8 --> Unicode -> GBK、GB2312
GB2312是GBK的子集,GBK是GB18030的子集
GBK是包括中日韩字符的大字符集合
为了避免所有乱码问题,应该采用UTF-8,将来要支持国际化也非常方便
UTF8可以看作是大字符集,它包含了大部分文字的编码。
使用UTF8的一个好处是其他地区的用户(如香港台湾)无需安装简体中文支持就能正常观看你的文字而不会出现乱码。
gb2312是简体中文的码
gbk支持简体中文及繁体中文
big5支持繁体中文
utf8支持几乎所有字符
mysql demo: #创建表 CREATE TABLE `book` ( `SNO` VARCHAR(3) NOT NULL, `SNAME` VARCHAR(9) NOT NULL ) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci #添加数据 INSERT INTO `book` (`SNO`, `SNAME`) VALUES('001','KangKang'); INSERT INTO `book` (`SNO`, `SNAME`) VALUES('002','Mike'); INSERT INTO `book` (`SNO`, `SNAME`) VALUES('003','Jane'); INSERT INTO `book` (`SNO`, `SNAME`) VALUES('123','test'); INSERT INTO `book` (`SNO`, `SNAME`) VALUES('124','test1'); INSERT INTO `book` (`SNO`, `SNAME`) VALUES('中国人','长城'); #添加超出字符长度的测试:Data too long for column 'SNO' at row 1 INSERT INTO `book` (`SNO`, `SNAME`) VALUES('124a','test1'); INSERT INTO `book` (`SNO`, `SNAME`) VALUES('中国人a','长城'); SELECT sno,sname,LENGTH(sno),CHAR_LENGTH(sno) FROM `book`; #查询返回结果: "sno" "sname" "length(sno)" "char_length(sno)" "001" "KangKang" "3" "3" "002" "Mike" "3" "3" "003" "Jane" "3" "3" "123" "test" "3" "3" "124" "test1" "3" "3" "中国人" "长城" "9" "3"
结论:
在字符集为UTF-8的情况下:
若 MySQL version < 4.1:VARCHAR以字节为单位存储,假设全部为常用汉字,则VARCHAR(255)共可存放约85个汉字。
若 MySQL version >= 4.1:VARCHAR以字符为单位存储,假设全部为常用汉字,则VARCHAR(255)可以存放255个汉字。
当然,现在MySQL基本都大于4.1版本的,所以说MySQL中varchar(n)表示n个字符,无论汉字和英文,Mysql都能存入n个字符,仅是实际字节长度有所区别。