mysql utf-8长度_MySQL VARCHAR长度和UTF-8?mysql

mysql5.0.3及以前版本varchar类型最大长度是255字符,

之后版本理论上长度可取值范围是1到65535字节,但实际上不可能取到这么大的值,原因是65535字节是mysql1行数据占用的长度。所以单个字段是不可能占用这么大的空间的。

那如果是你设置的值过大,mysql怎么处理呢?

根据设置的sql_mode不同会有两种情况:

mysql会把varchar类型转成text类型并产生一个warning;

MySQL报错;

学习回复

@喂马:如果utf8的话一行最大长度为21845,gbk的32767,然后多字段平分?回复

@苏生不惑:这个是和字符集有关系的,因为65535指的是字节,所以具体能有多少个字符你可以尝试一下如果一行只有一个字段,那就可以到65535了?

你的mysql知识上哪学的?

体育老师教的?

varchar最大255.

回复

@小虫0302:真不知道你们怎么当上程序员的呵呵,你的经验是老黄历了。确认一下你mysql的版本?

1118是行的长度过长,这个异常返回的说明里面会告诉你限制是多少,和mysql版本,引擎和编码都有关系。不过你这个语句在5.6上执行我并没有发现有报错。

引用来自“逝水fox”的答案

1118是行的长度过长,这个异常返回的说明里面会告诉你限制是多少,和mysql版本,引擎和编码都有关系。不过你这个语句在5.6上执行我并没有发现有报错。

我测试了下mysql5.0.45按你的sql执行后没问题

mysql>descnewtable;+-------------+------------------+------+-----+---------+----------------+|Field|Type|Null|Key|Default|Extra|+-------------+------------------+------+-----+---------+----------------+|goods_id|int(11)unsigned|NO|PRI|NULL|auto_increment||cat_id|int(11)|YES||NULL|||type_id|int(11)|YES||NULL|||brand_id|int(11)|YES||NULL|||goods_brand|varchar(200)|YES||NULL|||goods_brief|varchar(1000)|YES||NULL|||goods_info|varchar(2000)|YES||NULL|||goods_price|int(10)|YES||NULL||+-------------+------------------+------+-----+---------+----------------+8rowsinset(0.01sec)

mysql>insertintonewtablesetgoods_info='MyISAMDEFAULTCHARACTERSET=utf8COLLATE=utf8_general_ciCHECKSUM=0MyISAMDEFAULTCHARACTERSET=utf8COLLATE=utf8_general_ciCHECKSUM=0MyISAMDEFAULTCHARACTERSET=utf8COLLATE=utf8_general_ciCHECKSUM=0MyISAMDEFAULTCHARACTERSET=utf8COLLATE=utf8_general_ciCHECKSUM=0MyISAMDEFAULTCHARACTERSET=utf8COLLATE=utf8_general_ciCHECKSUM=0MyISAMDEFAULTCHARACTERSET=utf8COLLATE=utf8_general_ciCHECKSUM=0MyISAMDEFAULTCHARACTERSET=utf8COLLATE=utf8_general_ciCHECKSUM=0MyISAMDEFAULTCHARACTERSET=utf8COLLATE=utf8_general_ciCHECKSUM=0MyISAMDEFAULTCHARACTERSET=utf8COLLATE=utf8_general_ciCHECKSUM=0MyISAMDEFAULTCHARACTERSET=utf8COLLATE=utf8_general_ciCHECKSUM=0';QueryOK,1rowaffected(0.00sec)

mysql>selectlength(goods_info)fromnewtablewheregoods_id=1;+--------------------+|length(goods_info)|+--------------------+|680|+--------------------+1rowinset(0.00sec)

引用来自“苏生不惑”的答案

我测试了下mysql5.0.45按你的sql执行后没问题

mysql>descnewtable;+-------------+------------------+------+-----+---------+----------------+|Field|Type|Null|Key|Default|Extra|+-------------+------------------+------+-----+---------+----------------+|goods_id|int(11)unsigned|NO|PRI|NULL|auto_increment||cat_id|int(11)|YES||NULL|||type_id|int(11)|YES||NULL|||brand_id|int(11)|YES||NULL|||goods_brand|varchar(200)|YES||NULL|||goods_brief|varchar(1000)|YES||NULL|||goods_info|varchar(2000)|YES||NULL|||goods_price|int(10)|YES||NULL||+-------------+------------------+------+-----+---------+----------------+8rowsinset(0.01sec)

mysql>insertintonewtablesetgoods_info='MyISAMDEFAULTCHARACTERSET=utf8COLLATE=utf8_general_ciCHECKSUM=0MyISAMDEFAULTCHARACTERSET=utf8COLLATE=utf8_general_ciCHECKSUM=0MyISAMDEFAULTCHARACTERSET=utf8COLLATE=utf8_general_ciCHECKSUM=0MyISAMDEFAULTCHARACTERSET=utf8COLLATE=utf8_general_ciCHECKSUM=0MyISAMDEFAULTCHARACTERSET=utf8COLLATE=utf8_general_ciCHECKSUM=0MyISAMDEFAULTCHARACTERSET=utf8COLLATE=utf8_general_ciCHECKSUM=0MyISAMDEFAULTCHARACTERSET=utf8COLLATE=utf8_general_ciCHECKSUM=0MyISAMDEFAULTCHARACTERSET=utf8COLLATE=utf8_general_ciCHECKSUM=0MyISAMDEFAULTCHARACTERSET=utf8COLLATE=utf8_general_ciCHECKSUM=0MyISAMDEFAULTCHARACTERSET=utf8COLLATE=utf8_general_ciCHECKSUM=0';QueryOK,1rowaffected(0.00sec)

mysql>selectlength(goods_info)fromnewtablewheregoods_id=1;+--------------------+|length(goods_info)|+--------------------+|680|+--------------------+1rowinset(0.00sec)

为啥不用text类型?顶我是来看评论的

引用来自“mark35”的答案

为啥不用text类型?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值