CREATE TABLE `b` (
`id` int(1) default NULL,
`name` varchar(10) default NULL
ENGINE=MyISAM DEFAULT CHARSET=utf8
提示一个警告,查询的时候name字段为空
mysql> insert into b values(1010,'这说明我爱你');
Query OK, 1 row affected, 1 warning (0.00 sec)
如果换条语句,插入成功,name字段显示出一个‘十’
mysql> insert into b values(1010,'十年之前我不认识你,你不是认识');
Query OK, 1 row affected, 1 warning (0.00 sec)
有点搞不懂为什么
基本确定是你因为你字符集的问题。
你数据库使用的是utf8,但是你命令行客户端使用默认的,可能是gbk或gb2312之类的。你在连接命令行客户端时候加上字符集设置,应该就没有问题。
mysql -h DB_HOST -u DB_USERNAME -p --default-character-set=utf8
1.首先出现warning是由于你输入的字符长度超出了设定的长度-----10,注意一个中文字符是占用了两个字节的,输入“这说明我爱你”就已经超出了。
2.只能显示出一个‘十’,可能是数据库的乱码问题,我也不是很清楚,因为我的显示是正常的。。只不过超出了的部分被截取了
mysql 的 char
varchar
text
的长度计算都是以字符数的, 比如,utf-8 编码的 varchar(8)
可以存储 8 个中文字符,占用 24 个字节(长度字节不算)。
但是 varchar
类型最多只能放 65535
个字节,所以 utf-8 编码的 varchar
最大只能设置为 21,844
终于找到原因了,感谢大家的耐心解答。原来是cmd命令下的问题。相同的语句如果调用php 的sql插入,就没问题。说明不是varchar类型的错误。