Home >Database >Mysql Tutorial >mssql 中文字符处理(字符集编码和排序规则)

mssql 中文字符处理(字符集编码和排序规则)

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOriginal
2016-06-07 17:47:291563browse

 mssql 中文字符处理(字符集编码和排序规则)
sqlserver中文处理涉及到字符集编码和排序规则,是个非常纠结的问题。

sql code

--ascii字符
select n,x=cast(n as binary(2)),u=nchar(n) from nums where n between 32 and 126
--unicode中文字符
select n,x=cast(n as binary(2)),u=nchar(n) from nums where n between 19968 and 40869
19968    0x4e00    一
40869    0x9fa5   
--以下两个条件用来判断字符串是否包含汉字
like n'%[-]%' collate chinese_prc_ci_as
like n'%[一-]%' collate chinese_prc_bin
--这是因为在以上两种不同的排序规则下,汉字的排列顺序是不同的。
--中文全角标点符号
select n,x=cast(n as binary(2)),uq=nchar(n),ub=nchar(n-65248) from nums where n between 65281 and 65374
select nchar(12288),nchar(32)
65281    0xff01    !    !
65374    0xff5e    ~    ~
--以下条件用来判断字符串是否包含全角标点
like n'%[!-~]%' collate chinese_prc_bin

全角半角标点的转换:

sql code
--full2half
create function [dbo].[full2half](
@string nvarchar(max)
)
returns nvarchar(max)
as
/*
全角(fullwidth)转换为半角(halfwidth)
*/
begin
    declare @chr nchar(1)
    declare @i int
    set @string = replace(@string,n' ',n' ')
    set @i = patindex(n'%[!-~]%' collate latin1_general_bin,@string)
    while @i > 0
    begin
        set @chr = substring(@string,@i,1)
        set @string = replace(@string,@chr,nchar(unicode(@chr)-65248))
        set @i = patindex(n'%[!-~]%' collate latin1_general_bin,@string)
    end
    return @string
end
go
create function [dbo].[half2full](
@string nvarchar(max)
)
returns nvarchar(max)
as
/*
半角(halfwidth)转换为全角(fullwidth)
*/
begin
    declare @chr nchar(1)
    declare @i int
    set @string = replace(@string,n' ',n' ')
    set @i = patindex(n'%[!-~]%' collate latin1_general_bin,@string)
    while @i > 0
    begin
        set @chr = substring(@string,@i,1)
        set @string = replace(@string,@chr,nchar(unicode(@chr)+65248))
        set @i = patindex(n'%[!-~]%' collate latin1_general_bin,@string)
    end
    return @string
end
go
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn