mysql字符集

  恰当的字符集,畅快的体验!

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

See Table A-12, "US7ASCII Supersets".

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
原文地址:https://www.cnblogs.com/xiaochina/p/7611824.html