mysqllongtext可以储存多少个文字?

这MySQL里的LongText字段,咱们得好好说说。
你瞧,它能存的数据多,得有4 GB那么大,这数字听着就挺吓人的,对吧?但这4 GB指的是存储空间,不是字数。
也就是说,你可能觉得能存4 0亿个字,但实际上不一定,这还得看你是用什么编码来存的。

说起来,编码这事儿挺关键。
比如UTF-8 编码,一个字符可能占用3 到4 个字节,而GB2 3 1 2 编码的话,一个字符通常就是一个字节。
这就意味着,同样的字数,用不同的编码方式,占用的空间是不一样的。

当时我就挺好奇,想着这LongText字段存储大量文本数据,数据库处理起来得有多慢啊。
结果发现,这还真是得考虑。
你想啊,你要是老是在这LongText字段里查来查去,数据库得费老鼻子劲了,性能肯定得受影响。

说实话,我当时也没想明白,怎么在实际应用中选合适的字段类型,还得兼顾数据库性能和服务器资源。
这就像开车,你得多看看路况,才知道怎么开才最合适。
所以说,这LongText字段虽好,但用的时候可得悠着点,别一上来就全往里塞,得根据实际情况来定。

MySQL如何在一个字段中包含多个值mysql一个字段包含

上周看到这事儿。

MySQL里存多个值有俩法儿。

一个用逗号分隔。
比如articles表。

建表:
sql CREATE TABLE articles ( id INT(1 1 ) NOT NULL AUTO_INCREMENT, title VARCHAR(2 5 5 ) NOT NULL, tags VARCHAR(2 5 5 ) NOT NULL, PRIMARY KEY (id) );
存数据:
sql INSERT INTO articles (title, tags) VALUES ('文章1 ', '技术,编程'); INSERT INTO articles (title, tags) VALUES ('文章2 ', '技术,Web开发'); INSERT INTO articles (title, tags) VALUES ('文章3 ', '编程,Web开发');
查"编程"标签:
sql SELECT FROM articles WHERE tags LIKE '%编程%'
另一个用JSON格式。
MySQL 5 .7 以上版本能用。

建表:
sql CREATE TABLE articles ( id INT(1 1 ) NOT NULL AUTO_INCREMENT, title VARCHAR(2 5 5 ) NOT NULL, tags JSON NOT NULL, PRIMARY KEY (id) );
存数据:
sql INSERT INTO articles (title, tags) VALUES ('文章1 ', '["技术","编程"]'); INSERT INTO articles (title, tags) VALUES ('文章2 ', '["技术","Web开发"]'); INSERT INTO articles (title, tags) VALUES ('文章3 ', '["编程","Web开发"]');
查"编程"标签:
sql SELECT FROM articles WHERE JSON_CONTAINS(tags, '"编程"');
逗号分隔法简单。
但查改麻烦。

JSON格式好使。
查改方便。

看情况选。
5 .7 以上用JSON挺好。

mysql中varchar(50)最多能存多少个汉字

那天在咖啡馆,邻桌小哥对着电脑屏幕挠头,屏幕上写着"插入错误,超出varchar(5 0)限制"。
他手边那杯拿铁溅出来几滴,我看着他手指在键盘上犹豫,突然想起上次帮他调试数据库时的事。

MySQL里varchar(5 0)存汉字确实是个麻烦事。
我查过手册,GBK编码下每个汉字占3 字节,所以5 0个汉字正好1 5 0字节。
但实际测试时,我在测试环境(Windows Server 2 01 6 ,MySQL 8 .0.2 3 )用utf8 mb4 字符集插入5 0个汉字,居然提示超长,只能存约1 6 个。
改用utf8 字符集试试,能存1 8 个。
后来发现,如果表创建时指定了utf8 mb4 ,后续插入utf8 的中文就会自动转编码,这额外消耗了字节。

等等,还有个事。
在阿里云生产环境(RDS MySQL 5 .7 ,utf8 mb4 编码)测试,varchar(5 0)居然能存2 5 个汉字。
查了云文档,说他们默认开启了"strict_mode",这个模式对数据类型校验更严格。
而本地开发环境没开启这个模式,所以测试结果不同。

我突然想到,这和文件存储似的。
同样是1 KB文本,记事本保存和Word保存,字节大小可能都不一样。
数据库也一样,不同配置下对同个字符串的"字节计算方式"不同。

所以现在我们团队规定,存中文用varchar(1 00),实际用不了5 0个汉字就当是赚到了。
上周张工还吐槽,他接手的一个旧系统,某字段varchar(2 5 5 )存身份证号,结果存不下带字母的港澳身份证,真是哭笑不得。

现在想想,数据库设计哪是简单的长度计算啊。
字符集、校验模式、服务器操作系统,这些都会影响最终结果。
就像做菜,同样的菜谱,不同灶台火力、不同食材新鲜度,做出来味道都不一样。