十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
mysql varchar(50) 不管中文 还是英文 都是存50个的
成都创新互联公司专注于企业网络营销推广、网站重做改版、龙潭网站定制设计、自适应品牌网站建设、HTML5建站、成都商城网站开发、集团公司官网建设、外贸网站制作、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为龙潭等各大城市提供网站开发制作服务。
MySQL5的文档,其中对varchar字段类型这样描述:varchar(m) 变长字符串。M 表示最大列长度。M的范围是0到65,535。(VARCHAR的最大实际长度由最长的行的大小和使用的字符集确定,最大有效长度是65,532字节)。
为何会这般变换?真是感觉MySQL的手册做的太不友好了,因为你要仔细的继续往下读才会发现这段描述:MySQL
5.1遵从标准SQL规范,并且不删除VARCHAR值的尾部空格。VARCHAR保存时用一个字节或两个字节长的前缀+数据。如果VARCHAR列声明的长度大于255,长度前缀是两个字节。
好了,貌似懂了一点。但具体他说的长度大于255时使用2个字节长度前缀,小学减法题:65535 - 2 = 65533啊。不知道这些大牛如何计算的,暂且保留疑问吧?
注:我测试了一下使用UTF8编码,varchar的最大长度为21854字节。
在mysql 5.0.45版本,数据库编码utf8下进行测试:varchar最长定义为21785。也就是说不论字母、数字、汉字,只能放21785个。
1、首先replace函数可以做到替换【'123 456'】为【'1234'】,测试log如下:
mysql select replace('123 456','123 456','1234');
+-------------------------------------+
| replace('123 456','123 456','1234') |
+-------------------------------------+
| 1234 |
+-------------------------------------+
1 row in set (0.05 sec)
2、如果你想去掉【message】中的所有空格的话
【replace(message,' ','')】就可以的。测试log如下:
mysql select replace('1 2 3 4 5 6',' ','');
+-------------------------------+
| replace('1 2 3 4 5 6',' ','') |
+-------------------------------+
| 123456 |
+-------------------------------+
1 row in set (0.00 sec)
3、所以你的sql改成下面这样就可以了应该:
UPDATE cdb_posts SET message=REPLACE(message,' ','') where tid=123456;
4、改完了记住commit,使改正永久话。
---
以上,希望对你有所帮助。
字段大小是否固定取决你使用的数据类型。
如果用char类型存储,其长度就是固定的。所占的空间即为创建表时指定的长度,如果数据过长,多余的数据将被丢弃。如果数据不够,剩余的将以空格补全。
如果用vchar类型存储,其长度就是动态变化的,并且其占用的空间为实际长度加1。因为该类型要用1个字节存放数据的长度, 最大长度为255.
另外,建议阅读MySQL的官方文档,因为不同的版本有的地方处理方式不同。