中英文混合字符串按字节截取,经过验证截取的字符串长度基本一致,汉字也不会出现半个的现象。应该没问题吧?哈哈……select case when datalength(strproname)>10 
then convert(varchar,convert(varbinary(10),strproname))+'...'
else strproname
end as strproname
from productinfo

解决方案 »

  1.   

    从Varchar和nvarchar区别分析,varchar是定长所谓定长就是长度固定的,当输入的数据长度没有达到指定的长度时将自动以英文空格在其后面填充,使长度达到相应的长度;nvarchar是变长而变长字符数据则不会以空格填充。从名称上看只是多了个字母"n",它表示存储的是Unicode数据类型的字符。写过程序的朋友对Unicode应该很了解。字符中,英文字符只需要一个字节存储就足够了,但汉字众多,需要两个字节存储,英文与汉字同时存在时容易造成混乱,Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表示。nchar、nvarchar的长度是在1到4000之间。和char、varchar比较:nchar、nvarchar则最多存储4000个字符,不论是英文还是汉字;而char、varchar最多能存储8000个英文,4000个汉字。可以看出使用nchar、nvarchar数据类型时不用担心输入的字符是英文还是汉字,较为方便,但在存储英文时数量上有些损失。
    你所用的varbinary是可变的,varbinary取位准确了,varchar也就准确了。