mysql中varchar(100)可以存100个汉字和100个英文

mysql> show variables like 'character%'; 

+--------------------------+----------------------------+

| Variable_name            | Value                      |

+--------------------------+----------------------------+

| character_set_client     | utf8                       |

| character_set_connection | utf8                       |

| character_set_database   | utf8                       |

| character_set_filesystem | binary                     |

| character_set_results    | utf8                       |

| character_set_server     | utf8                       |

| character_set_system     | utf8                       |

| character_sets_dir       | /usr/share/mysql/charsets/ |

+--------------------------+----------------------------+

 

8 rows in set

mysql字符集如上,经测验`company` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '公司',company可以存储100个汉字或100个英文。

 

以下是查找的资料,仅供参考:

 

Varchar 对每个英文(ASCII)字符都占用2个字节,对一个汉字也只占用两个字节
char 对英文(ASCII)字符占用1个字节,对一个汉字占用2个字节
Varchar 的类型不以空格填满,比如varchar(100),但它的值只是"qian",则它的值就是"qian"
而char 不一样,比如char(100),它的值是"qian",而实际上它在数据库中是"qian "(qian后共有96个空格,
就是把它填满为100个字节)。

由于char是以固定长度的,所以它的速度会比varchar快得多!但程序处理起来要麻烦一点,要用trim之类的函数把两边的空格
去掉! 

资料引用:http://www.knowsky.com/1997.html

 

 

看你数据库的字符集是什么,如果是UTF8,则varchar2 100 可存100个汉字。

 

与这个参数有关系吧:nls_length_semantics

SQL> select value from nls_database_parameters where parameter = 'NLS_CHARACTERSET';

VALUE
--------------------------------------------------------------------------------
AL32UTF8

SQL> create table ss(ss varchar2(10));

表已创建。

SQL> insert into ss values('代数式地方大师傅');

已创建 1 行。

SQL> select value from nls_database_parameters where parameter = 'NLS_CHARACTERSET';

VALUE
--------------------------------------------------------------------------------
ZHS16GBK

SQL> create table ss (ss varchar2(10));

表已创建。

SQL> insert into ss values('大撒法似的似的');
insert into ss values('大撒法似的似的')
            *
ERROR 位于第 1 行:
ORA-01401: 插入的值对于列过大

 

SQL> create table ss (ss varchar2(10));

表已创建。

SQL> insert into ss values('大撒法似的似的');
insert into ss values('大撒法似的似的')
            *
ERROR 位于第 1 行:
ORA-01401: 插入的值对于列过大

=========================================================
这个与nls_length_semantics的设置有关,因为其当前设置为byte

需要改变一下建表时的定义,这么写:
create table ss (ss varchar2(10 char));


如果nls_length_semantics的值为char,则没有上述问题

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值