Open xinrong2019 opened 5 years ago
N#{langText,jdbcType=VARCHAR},
失败。
$'{langText}',
可以存,不报错,但是存进去乱码,全是问号。
以关键字N brefore搜索官方文档,搜到一些东西:
Unicode字符串字面
引用一下原文介绍:
Unicode String Literals You can input Unicode string literals in SQL and PL/SQL as follows:
Put a prefix N before a string literal that is enclosed with single quote marks. This explicitly indicates that the following string literal is an NCHAR string literal. For example, N'résumé' is an NCHAR string literal. For information about limitations of this method, see NCHAR String Literal Replacement.
大概意思,你可以使用N'résumé'在SQL和PL/SQL输入字符串字面值。N作为前缀,可以让后面的字面值作为NCHAR类型
Example 7-1 Populating the Customers Table Using the TO_NCHAR Function
The TO_NCHAR function converts the data at run time, while the N function converts the data at compilation time.
INSERT INTO customers VALUES (1000, TO_NCHAR('John Smith'),N'500 Oracle Parkway',sysdate);
TO_NCHAR 是在运行时转换数据,N是在编译时转换数据。估计编译的时候有一个Unicode编解码的过程。
既然是编译时的字面量转换,那么mabytis中肯定只能使用${}了。
Google搜了一下how to use oracle N prefix in mybatis
第一条答案,这个老哥遇到的情况就和我的一模一样。
还需要在应用启动时加两个参数,支持NChar字面量:
-Doracle.jdbc.defaultNChar=true
-Doracle.jdbc.convertNcharLiterals=true
1、Mybatis中参数设置使用$
$'{langText}',
2、需要设置两个JVM参数,来支持N的使用,使N生效。
-Doracle.jdbc.defaultNChar=true
-Doracle.jdbc.convertNcharLiterals=true
在值前面,引号前面加大写的N即可,存的时候表示用unicode编码存,查的时候表示用unicode解码查。