我有一个数据库,其中包含一个nvarchar类型的列。如果我写
INSERT INTO table VALUES ("玄真")
它在表格中显示¿¿
。我该怎么办?
我正在使用SQL Developer。
答案 0 :(得分:4)
使用单引号而不是双引号来创建文本文字,对于NCHAR
/ N
文字文字,您需要在其前面添加CREATE TABLE table_name ( value NVARCHAR2(20) );
INSERT INTO table_name VALUES (N'玄真');
Oracle 11g R2架构设置:
SELECT * FROM table_name
查询1 :
| VALUE |
|-------|
| 玄真 |
<强> Results 强>:
val grouped_ratings = ratings.groupBy("userId").count().withColumnRenamed("count", "No. of ratings") grouped_ratings.show(10)
答案 1 :(得分:0)
首先,甚至可能不需要使用NVARCHAR。
&#39; N&#39;字符数据类型用于存储不适合的数据。在数据库中定义的字符集。有一个辅助字符集定义为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
答案 2 :(得分:-3)
首先,您应该在数据库上建立中文字符编码,例如
UTF-8, Chinese_Hong_Kong_Stroke_90_BIN, Chinese_PRC_90_BIN, Chinese_Simplified_Pinyin_100_BIN ...
我向您展示了一个包含所有这些Collations的SQL Server 2008(Management Studio)的示例,但是,您可以在其他数据库(MySQL,SQLite,MongoDB,MariaDB ...)中找到相同的字符编码。