0
书上说过,nvarchar可以存储unicode data,但是每个字符需要两个字节。varchar则只需要一个字节。对于英文字符,varchar足够了,但是系统做大了,一般都会i18n(国际化),所以需要用nvarchar。网上很多人都推荐nvarchar,至少这样可以减少各种转换之间的痛苦。
1. 那在存储上,到底有什么特殊的地方么?
创建如上table,结果如下。
可以看到,char和varchar不支持中文,显示为两个问号,即乱码了。下面会说为什么会乱码。
那具体的存储上面的区别呢?
执行如下命令,可以发现,char(50)是固定长度,varchar(50)是根据数据的实际长度,nvarchar(50)则是varchar(50)的两倍。中文依旧乱码,除了nvarchar.
2. 如果进行row data compression呢?数据长度则被很好的压缩了。
3. 为什么会乱码呢?因为在插入的时候,系统会自动把字符转换成为column所对应的类型(以及Collation)。然而,'中国'会被转换成为not defined(因为在对应的code page上面找不到),即0x3f3f。而0x3f就是问号,所以查询出来的就是问号。如果只知道问号,是没有办法查到原来的数据的,即垃圾数据。
4. 那如何确保中文能够正确存进去呢?有两种方法,一是用nvarchar或者nchar,二是用正确的collation。如下图,ItemName3是nvarchar, ItemName4是varchar with collation Chinese_PRC_CI_AS。
5. 那ItemName3和ItemName4在存储上面有什么不同呢?用上面的命令可以发现,ItemName3存储的是2d4e fd56,对应的是unicode table上面的4e2d 56fd。ItemName4存储的是d6d0 b9fa,对应的是gb2312上面的d6d0 b9fa。所以,varchar是支持中文的,只要你的collation是支持中文的(database, table, column level都可以设置collation)。
http://unicode-table.com/en/#4E2D
http://ash.jp/code/cn/gb2312tbl.htm
Posted on
Monday, August 04, 2014
by
醉·醉·鱼
and labeled under
sql
本来想查查varchar和nvarchar在存储上面的区别的,结果走远了。。。书上说过,nvarchar可以存储unicode data,但是每个字符需要两个字节。varchar则只需要一个字节。对于英文字符,varchar足够了,但是系统做大了,一般都会i18n(国际化),所以需要用nvarchar。网上很多人都推荐nvarchar,至少这样可以减少各种转换之间的痛苦。
1. 那在存储上,到底有什么特殊的地方么?
创建如上table,结果如下。
可以看到,char和varchar不支持中文,显示为两个问号,即乱码了。下面会说为什么会乱码。
那具体的存储上面的区别呢?
执行如下命令,可以发现,char(50)是固定长度,varchar(50)是根据数据的实际长度,nvarchar(50)则是varchar(50)的两倍。中文依旧乱码,除了nvarchar.
2. 如果进行row data compression呢?数据长度则被很好的压缩了。
3. 为什么会乱码呢?因为在插入的时候,系统会自动把字符转换成为column所对应的类型(以及Collation)。然而,'中国'会被转换成为not defined(因为在对应的code page上面找不到),即0x3f3f。而0x3f就是问号,所以查询出来的就是问号。如果只知道问号,是没有办法查到原来的数据的,即垃圾数据。
4. 那如何确保中文能够正确存进去呢?有两种方法,一是用nvarchar或者nchar,二是用正确的collation。如下图,ItemName3是nvarchar, ItemName4是varchar with collation Chinese_PRC_CI_AS。
5. 那ItemName3和ItemName4在存储上面有什么不同呢?用上面的命令可以发现,ItemName3存储的是2d4e fd56,对应的是unicode table上面的4e2d 56fd。ItemName4存储的是d6d0 b9fa,对应的是gb2312上面的d6d0 b9fa。所以,varchar是支持中文的,只要你的collation是支持中文的(database, table, column level都可以设置collation)。
http://unicode-table.com/en/#4E2D
http://ash.jp/code/cn/gb2312tbl.htm
0
测试一下,创建一张表
对clustered index加个data compression page.
验证一下
Drop掉primary key,对表进行row data compression,再试一次。
结论是,两者是一样的效果。其实也可以通过SSMS右键查看属性确认。
Posted on
Monday, July 28, 2014
by
醉·醉·鱼
and labeled under
sql
故事源于最近boss在review script的时候提到了Data compression, 我查了一下,别人的介绍几乎都是ALTER TABLE dbo.Table REBUILD WITH (DATA_COMPRESSION = PAGE);但是boss却只是在Clustered Index(一般是primary key)上面做了data compression. 我还以为对表和对clustered index做data compression是两回事,而boss只是估计只在index上面做compression。而事实上,他们其实是一回事。查了一下,别人说是一样的。http://dba.stackexchange.com/questions/49757/clustered-index-compression-vs-table-compression-are-they-the-same-thing
测试一下,创建一张表
对clustered index加个data compression page.
验证一下
Drop掉primary key,对表进行row data compression,再试一次。
结论是,两者是一样的效果。其实也可以通过SSMS右键查看属性确认。
0
那么执行下面的query,你就能够看到第一个query cost是80%,第二个query cost是20%。
Posted on
Tuesday, June 10, 2014
by
醉·醉·鱼
and labeled under
sql
都说index越多,insert的语句越慢。无图无真相。
假如有两张表,数据都是一样的,只是Customers有4个index,MinCustomers有1个clustered index。如下图。
那么执行下面的query,你就能够看到第一个query cost是80%,第二个query cost是20%。
0
附上其他JOIN的关系图
Posted on
Wednesday, May 14, 2014
by
醉·醉·鱼
and labeled under
sql
其实,SQL里面的JOIN等效于INNER JOIN。不知道为什么我的脑子里面一直记的是LEFT JOIN。
在sqlfiddle上面做个简单测试,一目了然。
http://sqlfiddle.com/#!3/d9ed9/5
在sqlfiddle上面做个简单测试,一目了然。
http://sqlfiddle.com/#!3/d9ed9/5
附上其他JOIN的关系图
0
周四要给team做presentation,topic是关于bug report的。上周五匆匆赶着写完了PPT,自己还小得意了一把。至少,这个算是工作一年来的小心得了。回到正题吧!
Posted on
Wednesday, May 14, 2014
by
醉·醉·鱼
and labeled under
Bug Report
注:请原谅我的散装英语,只是习惯了这样表述,能够更快一些。有时候,连bug的中文都不知道该怎么说。
- 什么是bug?
A software bug is the common term used to describe an error, flaw, mistake, failure, or fault in a computer program or system that produces an incorrect or unexpected result, or causes it to behave in unintended ways.--Wikipedia - 什么是bug report?
关于bug的描述。 - bug report很重要么?
肯定的,必须的。一个好的bug report需要把bug描述的很清楚,能够说出问题所在。此外,bug report是reporter本人的一种体现。你是通过你的bug report和别人打交道的,沟通的,请善待你自己的bug。 - 谁会看bug report?
Project manager, Product manager, Dev manager, QA manager, Dev lead, QA lead, Dev and QA, etc. - 为什么bug summary显得尤为重要呢?
很多人不会将bug一一看完的,他们很希望能够从summary里面拿到足够的信息。所以,一个好的summary,就是好bug的一半了。 - Bug summary需要包含哪些信息?
Where? How? What? 什么地方,做了什么操作,出现了什么问题。 - Bug report需要包含哪里?
环境配置:包括OS,browser version,系统配置。
软件版本:软件版本号,URL
问题描述:对于summary的补充,让dev看到这里就基本上了解90%的信息了。
问题重现步骤:小心你的步骤,因为可能一个新来的dev在修你的bug。
attachment:error log, screenshot, vedio
comments: 必要的信息包括,有没有work around,business impact, further investigation update。
在我的特定环境下,没有必要每个bug都这么严谨,尤其是在开发后期和测试前期。但是,到了产品快要结束的时候,就需要小心了,尽量把bug包括足够的信息,一是自己的体现,二则是免得被人chanllege。至少,对于我来说,我是很讨厌被人发现bug的。
























