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...).
使用Chinese_PRC_90_BIN
创建数据库,但您可以选择其他联盟:
Select 页面(左页眉)选项 > 排序规则 > 选择排序规则
使用相同的排序规则创建 Table:
执行插入语句
INSERT INTO ChineseTable VALUES ('玄真');
使用单引号而不是双引号来创建文本文字,对于 NVARCHAR2
/NCHAR
文本文字,您需要在其前面加上前缀 N
Oracle 11g R2 架构设置:
CREATE TABLE table_name ( value NVARCHAR2(20) );
INSERT INTO table_name VALUES (N'玄真');
查询 1:
SELECT * FROM table_name
| 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
我有一个数据库,其中有一列类型为 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...).
使用
Chinese_PRC_90_BIN
创建数据库,但您可以选择其他联盟:Select 页面(左页眉)选项 > 排序规则 > 选择排序规则
使用相同的排序规则创建 Table:
执行插入语句
INSERT INTO ChineseTable VALUES ('玄真');
使用单引号而不是双引号来创建文本文字,对于 NVARCHAR2
/NCHAR
文本文字,您需要在其前面加上前缀 N
Oracle 11g R2 架构设置:
CREATE TABLE table_name ( value NVARCHAR2(20) );
INSERT INTO table_name VALUES (N'玄真');
查询 1:
SELECT * FROM table_name
| 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