【问题标题】:How to store Japanese kanji character in Oracle database如何在Oracle数据库中存储日文汉字字符
【发布时间】:2017-11-13 13:16:03
【问题描述】:

这个有四个字节的日文字符????在Oracle数据库中保存为????,而其他日文字符正确保存。

我的rails应用boot.rb中的配置包含:

ENV['NLS_LANG'] = 'AMERICAN_AMERICA.UTF8'

sqldeveloper的oracle db有

NLS_LANGUAGE    AMERICAN
NLS_TERRITORY   AMERICA
NLS_CHARACTERSET    JA16SJISTILDE

该列的数据类型是NVARCHAR2

【问题讨论】:

  • 当您的列类型为NVARCHAR2 时,NLS_NCHAR_CHARACTERSET 适用,而不是NLS_CHARACTERSET
  • 谢谢! NLS_NCHAR_CHARACTERSET 是 AL16UTF16
  • 你从select UNISTR('\D842\DFB7') from dual;得到什么?选择DUMP(<column_name>, 1016) from ...会得到什么?
  • 没有 Ruby/Rails 你能做到这一点吗?
  • select DUMP(, 1016) 返回 Typ=1 Len=10 CharacterSet=AL16UTF16: 0,4e,0,61,0,6d,0,65,0,20 并从双重返回中选择 UNISTR('\D842\DFB7') ????

标签: ruby-on-rails ruby oracle activerecord cjk


【解决方案1】:

试试NLS_LANG=AMERICAN_AMERICA.AL32UTF8

Oracle 字符集UTF8 实际上是CESU-8AL32UTF8 是众所周知的UTF-8

如果你留在Basic Multilingual Plane (BMP),那么UTF8AL32UTF8 是相等的,但是当你有U+FFFF 以上的字符时,它们就不同了。

?是U+20BB7,是补充表意平面

【讨论】:

  • 试过但没用。任何其他高于此的编码将覆盖补充表意平面中的其他字符?
猜你喜欢
  • 2018-03-07
  • 1970-01-01
  • 2021-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多