none
vs2015 SQL 数据表 中文数据显示为??? 求解决 RRS feed

  • 问题

  • 通过vs2015建库,建表出现中文乱码

    建表代码:

    CREATE TABLE [dbo].[StudentInf] (
        [SId]    VARCHAR (12) NOT NULL,
        [SName]  VARCHAR (8)  NOT NULL,
        [Ssex]   VARCHAR (2)  DEFAULT ('男') NULL,
        [SDate]  DATE         NULL,
        [SGrade] VARCHAR (30) NULL,
        PRIMARY KEY CLUSTERED ([SId] ASC),
        CONSTRAINT [CHECK_SEX] CHECK ([Ssex]='男' OR [Ssex]='女'),
        CONSTRAINT [CHECK_DATE] CHECK ([SDate]>'1950-1-1' AND [SDate]<'2200-1-1')
    );

    建表后代码:

        CREATE TABLE [dbo].[StudentInf] (
        [SId]    VARCHAR (12) NOT NULL,
        [SName]  VARCHAR (8)  NOT NULL,
        [Ssex]   VARCHAR (2)  DEFAULT ('?') NULL,
        [SDate]  DATE         NULL,
        [SGrade] VARCHAR (30) NULL,
        PRIMARY KEY CLUSTERED ([SId] ASC),
        CONSTRAINT [CHECK_SEX] CHECK ([Ssex] = '?'
                                          OR [Ssex] = '?'),
        CONSTRAINT [CHECK_DATE] CHECK ([SDate] > '1950-1-1'
                                           AND [SDate] < '2200-1-1')
    );

    添加一行数据

        Insert into dbo.StudentInf
             Values('201567667', '张三', '男', '1996-02-08', '2015级网工1班')

    表里数据为:

          Sid               Sname      Ssex     SDate         SGrade

          201567667   ??               ?         1996/2/8    2015???1?

          NULL            NULL          NULL     NULL         NULL

    由于没认证  所以只能打出来

    问题:所有中文全部变成??   求解

    2016年3月30日 1:24

全部回复

  • You may use unicode data type instead.
    • 已建议为答案 i6first 2016年3月30日 3:45
    2016年3月30日 1:33
  • 使用 NVARCHAR 不要用varchar

    Love SQL

    • 已建议为答案 i6first 2016年3月30日 3:45
    2016年3月30日 1:54
  • 恩,调整建表语句。注意,使用 NVARCHAR时,一个汉字要用4个字节,相比VARCHAR多了一倍,所以我调整了你的字段最大长度,新的交表语句如下:

    CREATE TABLE [dbo].[StudentInf] (
        [SId]    VARCHAR (12) NOT NULL,
        [SName]  NVARCHAR (16)  NOT NULL,
        [Ssex]   NVARCHAR (4)  DEFAULT ('男') NULL,
        [SDate]  DATE         NULL,
        [SGrade] NVARCHAR (30) NULL,
        PRIMARY KEY CLUSTERED ([SId] ASC),
        CONSTRAINT [CHECK_SEX] CHECK ([Ssex]='男' OR [Ssex]='女'),
        CONSTRAINT [CHECK_DATE] CHECK ([SDate]>'1950-1-1' AND [SDate]<'2200-1-1')
    );


    chenl

    2016年3月30日 3:48
  • 用unicode最好加上N

    CREATE TABLE [dbo].[StudentInf] (
        [SId]    VARCHAR (12) NOT NULL,
        [SName]  NVARCHAR (16)  NOT NULL,
        [Ssex]   NVARCHAR (4)  DEFAULT (N'男') NULL,
        [SDate]  DATE         NULL,
        [SGrade] NVARCHAR (30) NULL,
        PRIMARY KEY CLUSTERED ([SId] ASC),
        CONSTRAINT [CHECK_SEX] CHECK ([Ssex]=N'男' OR [Ssex]=N'女'),
        CONSTRAINT [CHECK_DATE] CHECK ([SDate]>'1950-1-1' AND [SDate]<'2200-1-1')
    );


    想不想时已是想,不如不想都不想。

    2016年3月30日 4:44
    版主
  • 确实是,学习了。

    chenl

    2016年3月31日 8:10