比如汉字 䶮 (读作yan 三声),存到数据库后,会变成问号
以sqlserver为例,如何让旧值变成新值的效果呢,先看以下实验
所以结论就是数据类型要改成 nvarchar ,并且插入或者更新值的时候前面还要带N(或者unicode转换)
-- 修改表字段数据类型
ALTER TABLE t_user ALTER COLUMN name NVARCHAR(100); -- sqlserver
ALTER TABLE t_user MODIFY name NVARCHAR(100); -- mysql
-- oracle 数据类型可能是NVARCHAR2(100)
-- 插入 或者 更新
insert into t_user (id, name) VALUES (1, N'林䶮');
update t_user set name = N'林䶮' where id = 1;
-- oracle 语法
update t_user set name = utl_raw.cast_to_nvarchar2(hextoraw('4dae') where id = 1; 䶮 的unicode值是4dae ,百度搜索 汉字转unicode 自行去转即可
varchar和nvarchar的区别:
- varchar2是可变长度的字符类型,最多可以存放4000字节的数据,而nvarchar2是可变长度的国家字符类型,最多可以存放2000个字符。
- varchar2的长度单位可以是字节或字符,取决于type参数,而nvarchar2的长度单位只能是字符。
- varchar2在存储汉字时受到数据库字符集编码的影响,例如GBK编码时一个汉字占两个字节,UTF-8编码时一个汉字占三个字节。而nvarchar2在存储汉字时不受数据库字符集编码的影响,一个汉字始终占两个字节。