Unicode 插入中文字母的SQL命令

Unicode 插入中文字母的SQL命令,unicode,oracle-sqldeveloper,nvarchar,Unicode,Oracle Sqldeveloper,Nvarchar,我有一个数据库,其中一列的类型是nvarchar。如果我写 INSERT INTO table VALUES ("玄真") 它在表中显示?。我该怎么办 我使用的是SQL Developer。首先,您应该在数据库中建立汉字编码 UTF-8, Chinese_Hong_Kong_Stroke_90_BIN, Chinese_PRC_90_BIN, Chinese_Simplified_Pinyin_100_BIN ... 我向您展示了一个SQL Server 2008(Management

我有一个数据库,其中一列的类型是nvarchar。如果我写

INSERT INTO table VALUES ("玄真") 
它在表中显示
。我该怎么办


我使用的是SQL Developer。

首先,您应该在数据库中建立汉字编码

UTF-8, Chinese_Hong_Kong_Stroke_90_BIN, Chinese_PRC_90_BIN, Chinese_Simplified_Pinyin_100_BIN ... 
我向您展示了一个SQL Server 2008(Management Studio)的示例,其中包含了所有这些排序规则,但是,您可以在其他数据库(MySQL、SQLite、MongoDB、MariaDB…)中找到相同的字符编码

  • 使用
    中文\u PRC\u 90\u BIN创建数据库,但您可以选择其他关联:

    选择页面(左页眉)选项>排序规则>选择排序规则

  • 创建具有相同排序规则的表

  • 执行Insert语句

  • 插入到可设置为中文的值('玄真');


    使用单引号而不是双引号来创建文本文字,对于
    nvarhar2
    /
    NCHAR
    文本文字,您需要在其前面加上
    N

    Oracle 11g R2架构设置

    CREATE TABLE table_name ( value NVARCHAR2(20) );
    
    INSERT INTO table_name VALUES (N'玄真');
    
    SELECT * FROM table_name
    
    | VALUE |
    |-------|
    |    玄真 |
    
    查询1

    CREATE TABLE table_name ( value NVARCHAR2(20) );
    
    INSERT INTO table_name VALUES (N'玄真');
    
    SELECT * FROM table_name
    
    | VALUE |
    |-------|
    |    玄真 |
    

    CREATE TABLE table_name ( value NVARCHAR2(20) );
    
    INSERT INTO table_name VALUES (N'玄真');
    
    SELECT * FROM table_name
    
    | VALUE |
    |-------|
    |    玄真 |
    

    首先,使用NVARCHAR甚至可能没有必要

    “N”字符数据类型用于存储不“适合”数据库定义的字符集的数据。有一个辅助字符集定义为NCHAR字符集。它有点像创可贴——一旦创建数据库,就很难更改其字符集。这个故事的寓意是——在定义字符时要格外小心在创建数据库时设置,不要只接受默认值

    在这里,我们将在NVARCHAR和VARCHAR2中存储一个中文字符串

    CREATE TABLE SO_CHINESE ( value1 NVARCHAR2(20), value2 varchar2(20 char));
    INSERT INTO SO_CHINESE VALUES (N'玄真', '我很高興谷歌翻譯。' )
    select * from SO_CHINESE;
    

    请注意,这两个字符集都在Unicode系列中。请注意,我还告诉我的VARCHAR2字符串可以容纳20个字符。这是因为某些字符可能需要最多4个字节才能存储。使用(20)的定义只能存储其中5个字符

    让我们看看使用SQLDeveloper和我的本地数据库的相同场景

    以及确认字符集:

    SQL> clear screen
    SQL> set echo on
    SQL> set sqlformat ansiconsole
    SQL> select * 
      2  from database_properties 
      3  where PROPERTY_NAME in 
      4     ('NLS_CHARACTERSET', 
      5      'NLS_NCHAR_CHARACTERSET');
    
    PROPERTY_NAME            PROPERTY_VALUE   DESCRIPTION           
    NLS_NCHAR_CHARACTERSET   AL16UTF16        NCHAR Character set   
    NLS_CHARACTERSET         AL32UTF8         Character set         
    

    Justin使用的是Oracle,不是SQL Server,我知道,但这是同一个过程…@a_horse_和a_no_nameNo,在Oracle中更改编码的过程是完全不同的(事实上,一旦创建了数据库实例,您甚至无法更改编码)。甚至“创建数据库”在Oracle中表示完全不同的内容。您的答案中没有任何内容适用于Oracle当然,您不能在创建数据库时更改数据库的字符编码,但是,我不同意,因为我与SQL Developer(Oracle)合作过是的,在创建字符编码之前,您可以完全更改字符编码,这显然与SQL Server使用不同接口的方式相同。比方说,我必须使用相同的数据库。@SQLDev中的字体首选项控制数据显示的网格和代码编辑器……因此,如果它在中的INSERT语句中看起来正确的话工作表,对网格有好处