恰当的字符集,畅快的体验!
00、Oracle字符集
Subsets and Supersets #子集与超集
Table A-11 Subset-Superset Pairs
Subset(子集) |
Superset(超集) |
AR8ADOS710 |
AR8ADOS710T |
AR8ADOS720 |
AR8ADOS720T |
AR8ADOS720T |
AR8ADOS720 |
AR8APTEC715 |
AR8APTEC715T |
AR8ARABICMACT |
AR8ARABICMAC |
AR8ISO8859P6 |
AR8ASMO708PLUS |
AR8ISO8859P6 |
AR8ASMO8X |
AR8MUSSAD768 |
AR8MUSSAD768T |
AR8MUSSAD768T |
AR8MUSSAD768 |
AR8NAFITHA711 |
AR8NAFITHA711T |
AR8NAFITHA721 |
AR8NAFITHA721T |
AR8SAKHR707 |
AR8SAKHR707T |
AR8SAKHR707T |
AR8SAKHR707 |
BLT8CP921 |
BLT8ISO8859P13 |
BLT8CP921 |
LT8MSWIN921 |
D7DEC |
D7SIEMENS9780X |
D7SIEMENS9780X |
D7DEC |
DK7SIEMENS9780X |
N7SIEMENS9780X |
I7DEC |
I7SIEMENS9780X |
I7SIEMENS9780X |
IW8EBCDIC424 |
IW8EBCDIC424 |
IW8EBCDIC1086 |
KO16KSC5601 |
KO16MSWIN949 |
LT8MSWIN921 |
BLT8ISO8859P13 |
LT8MSWIN921 |
BLT8CP921 |
N7SIEMENS9780X |
DK7SIEMENS9780X |
US7ASCII |
|
UTF8 |
AL32UTF8 |
WE8DEC |
TR8DEC |
WE8DEC |
WE8NCR4970 |
WE8ISO8859P1 |
WE8MSWIN1252 |
WE8ISO8859P9 |
TR8MSWIN1254 |
WE8NCR4970 |
TR8DEC |
WE8NCR4970 |
WE8DEC |
WE8PC850 |
WE8PC858 |
注意:
直接修改oracle字符集,子集向超集转变。是没问题的。汉字在gbk下占2个字节、utf8下是3个字节
01、mysql字符集关系
11、查看mysq支持的字符集
show character set;
22、查看当前数据库使用的字符集
show variables like '%character%';
参数解释:
mysql和字符集有关的变量
character_set_client: 客户端请求数据的字符集
character_set_connection:从客户端接收到数据,然后传输的字符集
character_set_database: 默认数据库的字符集,无论默认数据库如何改变,都是这个字符集;如果没有默认数据库,那就使用 character_set_server指定的字符集,这个变量建议由系统自己管理,不要人为定义。
character_set_filesystem: 把os上文件名转化成此字符集,即把 character_set_client转换character_set_filesystem, 默认binary是不做任何转换的
character_set_results: 结果集的字符集
character_set_server: 数据库服务器的默认字符集
character_set_system: 这个值总是utf8,不需要设置,是为存储系统元数据的字符集
修改mysql字符集的方法:
mysql> SET collation_connection = utf8_general_ci ;
mysql> SET collation_database = utf8_general_ci;
mysql> SET collation_server = utf8_general_ci ;
02、mysql客户端请求字符集流转过程
一个完整的用户请求的字符集转换流程是
1) mysql Server收到请求时将请求数据从character_set_client转换为character_set_connection
2) 进行内部操作前将请求数据从character_set_connection转换为内部操作字符集,步骤如下
A. 使用每个数据字段的CHARACTER SET设定值;
B. 若上述值不存在,则使用对应数据表的字符集设定值
C. 若上述值不存在,则使用对应数据库的字符集设定值;
D. 若上述值不存在,则使用character_set_server设定值。
3) 最后将操作结果从内部操作字符集转换为character_set_results
附上mysql5.6.x的my.cnf配置
[client] default-character-set=utf8 [mysql] auto-rehash default-character-set=utf8 [mysqld] user=mysql innodb_buffer_pool_size = 256M join_buffer_size = 128M sort_buffer_size = 20M read_rnd_buffer_size = 64M lower_case_table_names=1 max_allowed_packet=500M wait_timeout=200000 interactive_timeout=200000 datadir=/servyou_domain/mysql/data socket=/var/lib/mysql/mysql.sock init_connect='SET collation_connection = utf8_unicode_ci' init_connect='SET NAMES utf8' character-set-server=utf8 collation-server=utf8_unicode_ci skip-character-set-client-handshake symbolic-links=0 sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES log_bin_trust_function_creators=1 [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/servyou_domain/mysql/data/mysqld.pid