insert into DW_Web.dbo.dimRegion(City_ID,City_Name,Province_Name,Sales_Area,Region_Name)select City_ID,City_Name,Province_Name,Sales_Area,Region_Name
from ETL_Web.dbo.Sys_Regionselect * from dimRegion ---汉字乱码
select City_ID,City_Name,Province_Name,Sales_Area,Region_Name
into dbo.aaaa
from ETL_Web.dbo.Sys_Regionselect City_ID,City_Name,Province_Name,Sales_Area,Region_Name 
from aaaa  ----正常显示insert into DW_Web.dbo.dimRegion(City_ID,City_Name,Province_Name,Sales_Area,Region_Name)select City_ID,City_Name,Province_Name,Sales_Area,Region_Name
from aaaa  
select * from dimRegion ---还是汉字乱码问题描述:我从 ETL_Web.dbo.Sys_Region 抽取数据加载到 DW_Web.dbo.dimRegion 就是乱码
如果采用 select * into  from 方式加载,就正常
请问这是为什么?

解决方案 »

  1.   

    dimRegion把表里面有汉字的字段的类型都改为NVARCHAR()
      

  2.   

    还有一种办法就是都cast 为 Nvarchar
    这也太麻烦了
      

  3.   

    有汉字的,最好用Nvarchar 
      

  4.   

    汉字的从来都用Nvarchar 类型的 要不然容易出问题
      

  5.   


    nvarchar 和 varchar 的区别是存储方式不同 varchar是按字节存储的.而带 "n "的nvarchar是按字符存储的比如说 varchar(40),能存储40个字节长度的字符,存储中文字符的时候,因为中文字符1个字符就等于2个字节.所以varchar(40)只能存储20个中文字符. nvarchar(40),就可以存储40个中文字符,也就是说可以存储80个字节长度的字符.nvarchar要相对于存储的字符类型.比如有些字符是占3个字节的. 字符集是在安装 SQL Server 时选择的,不能更改。使用 Unicode 数据类型,列可存储由 Unicode 标准定义的任何字符,包含由不同字符集定义的所有字符。Unicode 数据类型需要相当于非 Unicode 数据类型两倍的存储空间。 Unicode 数据使用 SQL Server 中的 nchar、varchar 和 ntext 数据类型进行存储。对于存储来源于多种字符集的字符的列,可采用这些数据类型。当列中各项所包含的 Unicode 字符数不同时(至多为 4000),使用 nvarchar 类型。当列中各项为同一固定长度时(至多为 4000 个 Unicode 字符),使用 nchar 类型。当列中任意项超过 4000 个 Unicode字符时,使用 ntext 类型。nvarchar   和   varchar   的区别是存储方式不同
    varchar是按字节存储的.而带 "n "的nvarchar是按字符存储的
    比如说   varchar(40),能存储40个字节长度的字符,存储中文字符的时候,因为中文字符1个字符就等于2个字节.所以varchar(40)只能存储20个中文字符.
    nvarchar(40),就可以存储40个中文字符,也就是说可以存储80个字节长度的字符.nvarchar要相对于存储的字符类型.比如有些字符是占3个字节的. 
      

  6.   

    对于支持中文字符的计算机,使用varchar的话,问题不大。但是如果对方的计算机恰好不支持中文字符的话,很容易出现乱码
      

  7.   

    表字段改成NVARCHAR类型前面加个N的类型都可以,例如NCHAR...
    或者建库的时候就指定中文字符
      

  8.   

    汉字还是使用unicode编码,nvarchar类型
    要不改一下数据库,表的字符集.改为chinese_prc