数据库的字符集
‘壹’ PHP编码问题:数据库中的字符集编码。。。。。
流行的关系数据库系统都支持数据库字符集编码,也就是说在创建数据库时可以指定它自己的字符集设置,数据库的数据以指定的编码形式存储。当应用程序访问数据时,在入口和出口处都会有字符集编码的转换。对于中文数据,数据库字符编码的设置应当保证数据的完整性。GB2312、GBK、UTF-8 等都是可选的数据库字符集编码;当然我们也可以选择 ISO8859-1 (8-bit),只是我们得在应
用程序写数据之前先将 16Bit 的一个汉字或 Unicode 拆分成两个 8-bit 的字符,读数据之后也需要将两个字节合并起来,同时还要判别其中的 SBCS 字符,因此我们并不推荐采用 ISO8859-1 作为数据库字符集编码。这样不但没有充分利用数据库自身的字符集编码支持,而且同时也增加了编程的复杂度。编程时,可以先用数据库管理系统提供的管理功能检查其中的中文数据是否正确。
PHP 程序在查询数据库之前,首先执行 mysql_query("SET NAMES xxxx"); 其中 xxxx 是你网页的编码(charset=xxxx),如果网页中 charset=utf8,则 xxxx=utf8,如果网页中 charset=gb2312,则xxxx=gb2312,几乎所有 WEB 程序,都有一段连接数据库的公共代码,放在一个文件里,在这文件里,加入 mysql_query("SET NAMES xxxx") 就可以了。
SET NAMES 显示客户端发送的 SQL 语句中使用什么字符集。因此,SET NAMES 'utf-8' 语句告诉服务器“将来从这个客户端传来的信息采用字符集 utf-8”。它还为服务器发送回客户端的结果指定了字符集(例如,如果你使用一个 SELECT 语句,它表示列值使用了什么字符集)。
不知道这资料是不是你说的那些。呵呵~~~
‘贰’ 怎样查看数据库的字符集
Oracle数据库查看和修改服务器端的字符集的方法是本文主要要介绍的内容,接下来救让我们一起来了解一下这部分内容。
A、oracle server 端字符集查询
select userenv('language') from al
其中NLS_CHARACTERSET 为server端字符集
NLS_LANGUAGE 为 server端字符显示形式
B、查询oracle client端的字符集
$echo $NLS_LANG
如果发现你select 出来的数据是乱码,请把client端的字符集配置成与linux操作系统相同的字符集。如果还是有乱码,则有可能是数据库中的数据存在问题,或者是oracle服务端的配置存在问题。
C、server端字符集修改
将数据库启动到RESTRICTED模式下做字符集更改:
SQL> conn /as sysdba Connected.
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount ORACLE instance started.
Total System Global Area 236000356 bytes
Fixed Size 451684 bytes
Variable Size 201326592 bytes
Database Buffers 33554432 bytes
Redo Buffers 667648 bytes
Database mounted.
SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION;
System altered.
SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
System altered.
SQL> ALTER SYSTEM SET AQ_TM_PROCESSES=0;
System altered.
SQL> alter database open;
Database altered.
SQL> ALTER DATABASE CHARACTER SET ZHS16GBK;
ALTER DATABASE CHARACTER SET ZHS16GBK ERROR at line 1:
ORA-12712: new character set must be a superset of old character set
提示我们的字符集:新字符集必须为旧字符集的超集,这时我们可以跳过超集的检查做更改:
SQL> ALTER DATABASE character set INTERNAL_USE ZHS16GBK;
Database altered.
SQL> select * from v$nls_parameters;
略
19 rows selected.
重启检查是否更改完成:
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup ORACLE instance started.
Total System Global Area 236000356 bytes
Fixed Size 451684 bytes
Variable Size 201326592 bytes
Database Buffers 33554432 bytes
Redo Buffers 667648 bytes
Database mounted.
Database opened.
SQL> select * from v$nls_parameters;
略
19 rows selected.
我们看到这个过程和之前ALTER DATABASE CHARACTER SET操作的内部过程是完全相同的,也就是说INTERNAL_USE提供的帮助就是使Oracle数据库绕过了子集与超集的校验。
这一方法在某些方面是有用处的,比如测试;应用于产品环境大家应该格外小心,除了你以外,没有人会为此带来的后果负责。
结语(我们不妨再说一次):
对于DBA来说,有一个很重要的原则就是:不要把你的数据库置于危险的境地!
这就要求我们,在进行任何可能对数据库结构发生改变的操作之前,先做有效的备份,很多DBA没有备份的操作中得到了惨痛的教训。
D、client端字符集修改
在 /home/oracle与 /root用户目录下的。bash_profile中
添加或修改 export NLS_LANG="AMERICAN_AMERICA.UTF8" 语句
‘叁’ 【MySQL笔记】MySQL的字符集
MySQL字符集配置是数据库管理中的重要环节。在未做特定设置时,MySQL 5.7的初始版本默认字符集是latin1,但从MySQL 8.0开始,utf8mb4成为默认选项。要了解默认字符集,可以运行命令show character set;查看。
创建数据库时,字符集的选择会根据配置和环境有所不同。官方文档建议,具体取决于你的需求和系统设置。查看数据库的默认COLLATE(字符排序规则),只需在MySQL客户端输入相同的命令。
查询已创建数据库的字符集有两种方法:一种是直接在数据库管理界面查询,另一种是通过命令行操作。具体步骤取决于你使用的工具和平台。
在需要修改已有对象字符集时,如表或字段,可以通过ALTER TABLE语句来执行,确保选择正确的字符集和排序规则。
最后,如果你希望修改MySQL服务器(实例)的全局字符集设置,你需要编辑my.cnf文件中的[mysqld]部分,更改字符集配置,然后重启服务以使更改生效。
‘肆’ mysql濡备綍鍦ㄥ凡链夋暟鎹搴扑笂缁熶竴瀛楃﹂泦
鍓嶈█
鏁版嵁搴挞噷闱锛岄儴鍒嗘暟鎹琛ㄥ拰鏁版嵁鏄痩atin1镄勶纴閮ㄥ垎鏁版嵁琛ㄥ拰鏁版嵁鏄疷TF8锛岃缮链夐儴鍒呜〃锛岃〃缁撴瀯鏄痷tf8钥屾暟鎹鏄痩atin1銆
杩欑嶅囱恳𨱍呭喌锛屽伐浣滀简鍗佸嚑骞寸殑鎴戯纴杩樻槸绗涓娆$板埌銆备笅闱㈣翠竴涓嬶纴镐庝箞镙峰瓧绗﹂泦缁熶竴鎴耻tf8
1锛屽缓涓涓绌烘暟鎹搴
2锛屾妸琛ㄧ粨鏋勫拰鏁版嵁鏄痷tf8镄勮〃瀵煎嚭锛岀劧钖庣洿鎺ュ煎叆鍒版柊镄勬暟鎹搴扑腑
3锛屾暟鎹琛ㄥ拰鏁版嵁閮芥槸latin1镄勮〃锛屽厛瀵煎嚭琛ㄧ粨鏋勫拰鏁版嵁锛屽姞涓--default-character-set=latin1锛屽皢瀵煎嚭鏂囦欢涓锛宭atin1鏀逛负utf8锛屽湪瀵煎叆鍒版柊镄勬暟鎹搴扑腑銆
4锛岃〃缁撴瀯鏄痷tf8锛岃〃鏁版嵁鏄痩atin1镄勶纴链変簩绉嶆柟娉曪细
4.1锛屽厛瀵煎嚭琛ㄧ粨鏋勶纴瀵煎叆鍒版柊镄勬暟鎹搴扑腑銆傚煎嚭鏁版嵁锛屽姞涓--default-character-set=utf8锛屽洜涓鸿〃缁撴瀯鏄痷tf8锛岃〃鏁版嵁鏄痩atin1锛屽叆搴撴椂宸蹭贡镰併傚湪灏嗘暟鎹瀵煎叆鍒版柊搴扑腑銆傝繖绉嶆柟妗堟湁缂虹偣锛--default-character-set=utf8锛屽煎嚭镄勬暟鎹鍙鑳戒细链変涪澶憋纴瀵煎嚭镄勬暟鎹锛屽湪瀵煎叆镞跺彲鑳戒细鎶ラ敊銆
4.2锛屽彲浠ラ氲繃binary瀛楃﹂泦锅氢腑杞锛屾帹钻愯繖绉嶆柟娉
UPDATE user SET user_name = CONVERT(CONVERT(CONVERT(user_name USING latin1) USING binary) USING UTF8);
杩欑嶆柟娉曪纴鐪佸幓浜嗗煎嚭瀵煎叆镄勯夯鐑︼纴阃熷害姣旇缉蹇锛11w𨱒℃暟鎹锛屽樊涓嶅5-6绉
鏁版嵁搴撹捐¤繖鍧楅潪甯搁吨瑕侊纴鍦ㄨ捐℃暟鎹搴撴椂涓瀹氲佽冭槛娓呮氥傚湴锘轰笉鐗锛屽ぇ铡﹁繜镞╀细鍊掔殑銆
鎭ㄥ彲鑳芥劅鍏磋叮镄勬枃绔:绠鏋恗ysql瀛楃﹂泦瀵艰嚧鎭㈠嶆暟鎹搴撴姤阌欓梾棰榤ysql淇鏀规暟鎹搴撶紪镰(鏁版嵁搴揿瓧绗﹂泦)鍜岃〃镄勫瓧绗︾紪镰佺殑鏂规硶mysql瀛楃﹂泦鍜屾暟鎹搴揿紩镎庝慨鏀规柟娉曞垎浜獶W涓阈炬帴mysql鏁版嵁搴撴椂锛屽缓绔嫔瓧绗﹂泦涓鏂囧嚭鐜颁贡镰佺殑瑙e喅鏂规硶