SQL 插入中文字母的命令

SQL Command to insert Chinese Letters

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

INSERT INTO table VALUES ("玄真") 

在table中显示¿¿。我应该怎么办?

我正在使用 SQL 开发人员。

首先,你应该在你的数据库中建立汉字编码,例如

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...).

  1. 使用Chinese_PRC_90_BIN创建数据库,但您可以选择其他联盟:

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

  1. 使用相同的排序规则创建 Table

  2. 执行插入语句

INSERT INTO ChineseTable VALUES ('玄真');

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

SQL Fiddle

Oracle 11g R2 架构设置:

CREATE TABLE table_name ( value NVARCHAR2(20) );

INSERT INTO table_name VALUES (N'玄真');

查询 1:

SELECT * FROM table_name

Results:

| VALUE |
|-------|
|    玄真 |

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

'N' 字符数据类型用于存储不在数据库定义的字符集中 'fit' 的数据。有一个辅助字符集定义为 NCHAR 字符集。它有点像创可贴——一旦你创建了一个数据库,就很难改变它的字符集。这个故事的寓意——在创建数据库时要非常小心地定义字符集,不要只接受默认值。

这是一个 scenario (LiveSQL) 我们在 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 个字符的空间。

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

并确认字符集:

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