A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 夏华成 中级黑马   /  2012-5-19 13:09  /  2544 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

昨天看了杨老师的视频.以及今天问了一下同事的理解 ,还有百度了一下

都说.varchar不能放中文.
全英文用 varchar
含中文用 nvarchar

大致就这把

我一开始还真不知道两者之间的区别.而且我实际工作中用到的都是用的varchar 没有用过 nvarchar
而且事实上varchar 是支持中文的.这使我心中就有了疑惑.

最终研究结果如下:
varchar(n)
长度为 n 个字节的可变长度且非 Unicode 的字符数据。n 必须是一个介于 1 和 8,000 之间的数值。存储大小为输入数据的字节的实际长度,而不是 n 个字节。

nvarchar(n)
包含 n 个字符的可变长度 Unicode 字符数据。n 的值必须介于 1 与 4,000 之间。字节的存储大小是所输入字符个数的两倍。

两字段分别有字段值:我和coffee
那么varchar字段占2×2+6=10个字节的存储空间,而nvarchar字段占8×2=16个字节的存储空间。

如字段值只是英文可选择varchar,而字段值存在较多的双字节(中文、韩文等)字符时用nvarchar



关于varchar 能否存储中文:原来是这样的
正常情况下,我们使用varchar也可以存储中文字符,但是如果遇到操作系统是英文操作系统并且对中文字体的支持不全面时, 在SQL Server存储中文字符为varchar就会出现乱码(显示为??).

介于以上理解
虽然很多人.说有中文用nvarchar 全英文用varchar.但我不同意这种看法
如果数据库不考虑在英文或其它系统下运行.我觉得没有必要用nvarchar.直接用varchar
因为,varchar相比nvarchar存储数据要大,而且占用空间小

你们觉得呢

评分

参与人数 1技术分 +2 收起 理由
宋天琪 + 2

查看全部评分

2 个回复

倒序浏览
额,牛B啊 ----
回复 使用道具 举报
应该考虑到的是有关存储空间问题,估计设计者也是这样想,毕竟十几年前的计算机存储设备不像现在这么的容易,容量和现在不是几个数量级的比较,端口这么的灵活

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马