⽣僻字存不到mysql_数据库存储⽣僻字存在的问题最近遇到两个⽐较棘⼿的事情,都是同⼀种状况:数据库储存不了带有⽣僻字的客户名。
mysql下载不了怎么办⼀个是“?”,另外⼀个是“?”,只能是感叹汉语真是博⼤精深啊。SR向原⼚的⼯程师援助,
原⼚都没有办法提供很好的解决⽅案。以下是遇到这种状况的数据库的字符集情况。当输⼊带有
这两个⽣僻字的记录时候,数据能录⼊,但是当查询记录结果的时候,对应字段的信息就变成乱码
“?”。经过⾮⽣僻字的储存测试,以下涉及到的两种字符集完全可以存储汉字的数据记录,但就是不能
存储汉字中⽐较⽣僻的字。后⾯根据朋友做的⼀些测试说,在⽣僻字的前后价格空格可以插⼊到数据库,并
能成功的显⽰出来。我按照朋友介绍的⽅法在我的测试环境中再少补充了⼀些测试,结果还是只能插⼊⽽不显⽰。
原⼚对朋友的这种测试,也还没有作任何有效的回复。
连改博⽂保存发表之后,两个⽣僻字都显⽰为乱码(估计博客后台数据库也识别不了),我只能⽤以下图⽚展⽰以下两个⽣僻字了:----两个⽣僻字(拼⾳分别为“jie”⼆声 和“mian”⼆声):
----背景数据库的字符集:
SQL>select userenv('language') from dual;
USERENV('LANGUAGE')
----------------------------------------------------
AMERICAN_AMERICA.ZHS16GBK
---数据库主机的字符集:
AMERICAN_AMERICA.ZHS16GBK
----⽣僻⽂字输⼊并存储测试:
--⽣僻字1:?
--⽣僻字2:?
---测试表:suxing⽤户下的表yourtest:
suxing@PROD>select * from yourtest;
ID NAME CREATED SEX
---------- ------ --------- -----
125 susu 02-NOV-16 man
123 yyyy 02-NOV-16 man
124 hhhh 10-NOV-16 man
126 wwww 10-NOV-16 man
125 dddd 11-NOV-16 woman
123 yyyy 24-NOV-16 man
127 haha 06-DEC-16 man
-
--测试库的字符集:
scott@PROD>select userenv('language') from dual; USERENV('LANGUAGE')
----------------------------------------------------
AMERICAN_AMERICA.AL32UTF8
---在CRT客户端尝试插⼊⼀条数据(name值为“??”):
suxing@PROD>insert into yourtest values(128,'??','','woman');
1 row created.
suxing@PROD>commit;
Commit complete.
#成功插⼊。
---在CRT客户端查询结果:
suxing@PROD>select * from yourtest where id=128;
ID NAME CREATED SEX
---------- ------ --------- -----
128 ?? Woman
#不显⽰出中⽂,乱码。
---在Windows环境的plsql developer客户端查看:
#结果显⽰也是乱码。
---在Windows cmd查看:
SQL> select * urtest where id=128;
ID NAME CREATED SEX
---------- ------------ -------------- ----------
128 ?? Woman
#结果显⽰同样是乱码。
---尝试在Windows cmd往测试表中插⼊⼀条新记录:
SQL> insert urtest values(129,'??',sysdate,'woman');已创建1⾏。
SQL> commit;
提交完成。
---在Windows cmd查看新增的记录:
SQL> select * urtest where id=129;
ID NAME CREATED SEX
---------- ------------ -------------- ----------
129 ?? 06-3⽉-17 woman
#从结果看,依然是乱码。
---在Windows环境的plsql developer客户端查看新增记录:
select * urtest where id=129;
#也还是乱码。
---CRT客户端连接服务端查看新增记录:
suxing@PROD>select * from yourtest where id=129;
ID NAME CREATED SEX
---------- ------ --------- -----
129 ?? 06-MAR-17 woman
#结果乱码。
---在Windows cmd进⾏⾮⽣僻字尝试插⼊⼀条记录:
insert urtest values(130,'苏醒',sysdate,'man');
SQL> insert urtest values(130,'苏醒',sysdate,'man');已创建1⾏。
SQL> commit;
提交完成。
---查看新增记录:
SQL> select * urtest where id=130;
ID NAME CREATED SEX
---------- ------------ -------------- ----------
130苏醒06-3⽉-17 man
---在plsql developer客户端查看新增记录:
select * urtest where id=130;
---在CRT客户端查看:
suxing@PROD>select * from yourtest where id=130;
ID NAME CREATED SEX
---------- ------ --------- -----
130 ?? 06-MAR-17 man
#当ID为130时,CRT客户端的查询结果是乱码。
---在plsql developer客户端尝试插⼊⼀条新记录:
insert urtest values(131,'??',sysdate,'man'); commit;
---在plsql developer客户端查看输出结果:
select * urtest where id=131;
#结果显⽰是乱码。
---在Windows cmd查看最新增加的两条记录:
SQL> select * urtest where id=131;
ID NAME CREATED SEX
---------- ------------ -------------- ----------
131 ?? 06-3⽉-17 man
131 ?? 06-3⽉-17 man
#最新两条记录的查询结果也是乱码。
---在Windows cmd再插⼊⼀条带⽣僻字记录:
SQL> insert urtest values(131,'??',sysdate,'man');
已创建1⾏。
SQL> commit ;
#成功插⼊⼀条记录。
SQL> select * urtest where id=131;
ID NAME CREATED SEX
---------- ------------ -------------- ----------
131 ?? 06-3⽉-17 man
---在Windows cmd查看带⽣僻字“??”的新增记录:
SQL> select * urtest where id=131;
ID NAME CREATED SEX
---------- ------------ -------------- ----------
131 ?? 06-3⽉-17 man
--------附加测试(在⽣僻字前后加上空格):
---设置主机系统字符集环境:
[oracle@enmo ~]$ export NLS_LANG=AMERICAN_AMERICA.AL32UTF8 --查看表的结构,字段name的数据类型与长度:
PROD>urtest
Name Null? Type
----------------------------------------- -------- ----------------------------
ID NUMBER(3)
NAME VARCHAR2(6)
CREATED DATE
SEX VARCHAR2(5)
---尝试在⽣僻字前后加空格的字符串:
SQL> insert urtest values(131,'??',sysdate,'man');
已创建1⾏。
SQL> commit;
提交完成。
---查看新插⼊的记录:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论