- 论坛徽章:
- 0
|
回复 5# eclipse_2
这个肯定能满足。你的需求是5K=5000
你就把字段定义为varchar(5000),就可以了,这里5000就是你所说的characters(字符数)
所有最多可以存5000*3(字节) -2这么多个bytes(字节数,也就是前面你所说二者区别
测试看看:
mysql> show create table t_varchar\G
*************************** 1. row ***************************
Table: t_varchar
Create Table: CREATE TABLE `t_varchar` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`connent` varchar(5000) NOT NULL DEFAULT '',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=gbk
1 row in set (0.00 sec)
插入5000个a, 没有warning,说明插入成功,没有截取。
mysql> insert into t_varchar values (null, repeat('a',5000));
Query OK, 1 row affected (0.04 sec)
插入5100个a, 可以看到有warning, 因为此时只有5000个characters(字符数),虽然此时的字节长度限制为5000*3(字节) -2,受到了字符长度限
mysql> insert into t_varchar values (null, repeat('a',5100));
Query OK, 1 row affected, 1 warning (0.05 sec)
mysql> show warnings;
+---------+------+----------------------------------------------+
| Level | Code | Message |
+---------+------+----------------------------------------------+
| Warning | 1265 | Data truncated for column 'connent' at row 1 |
+---------+------+----------------------------------------------+
1 row in set (0.00 sec)
那我们再再看看,用汉字呢,因为字符集为gbk,每个汉字占两个字节,也就说下面"卓”,字符长度为1, 字节长度为2.
mysql> insert into t_varchar values (null, repeat('卓',5000));
Query OK, 1 row affected (0.04 sec)
查看一下,三个插入记录的字节长度(bytes)
mysql> select id, length(connent) from t_varchar;
+----+-----------------+
| id | length(connent) |
+----+-----------------+
| 6 | 5000 |
| 7 | 5000 |
| 8 | 10000 |
+----+-----------------+
3 rows in set (0.00 sec)
再看看字符长度,都是5000
mysql> select id, char_length(connent) from t_varchar;
+----+----------------------+
| id | char_length(connent) |
+----+----------------------+
| 6 | 5000 |
| 7 | 5000 |
| 8 | 5000 |
+----+----------------------+
3 rows in set (0.00 sec)
mysql>
|
|