mysql中的编码问题_mysql编码问题总结

网上查了一些mysql编码相关的资料,在这里整理下,不对的地方欢迎各位批评指正。

1. mysql字符集相关的变量:

- character_set_server:默认的内部操作字符集

– character_set_client:客户端来源数据使用的字符集

– character_set_connection:连接层字符集

– character_set_results:查询结果字符集

– character_set_database:当前选中数据库的默认字符集

– character_set_system:系统元数据(字段名等)字符集

– 还有以collation_开头的同上面对应的变量,用来描述字符序。

2. mysql提供了不同粒度的字符集控制:

控制粒度

查看字符集

连接(connection)

character_set_connection

字段(field)

show full fields from TableName

表(table)

show create table TableName

数据库(database)

character_set_database 或 show create database DataBaseName

mysql服务器(server)

character_set_server

在创建数据库、表、字段的时候,各个粒度上的字符集都是可以指定的,也可以不指定,这样的话就使用上一级默认的字符集。

下面分别看看创建数据库、表、字段时对字符集的控制。

3.1 创建数据库

(1)查看当前系统server字符集是latin1

46a03e4577a3b748363ca3bab3e52e65.png

(2)创建数据库(不指定编码)

可以看到新创建的数据库的字符集和server的字符集相同

6d4d57bf4b33a2e81ccb07b6157d1f12.png

(3)指定数据库字符集

新创建的数据库字符集和server字符集并不相同,而是使用了自己的字符集utf8

ef9e46eb9fc707054b9db1ef1b66e09a.png

(4)修改server的字符集为utf8

b9a78771a01b9d558e025568d031eb4c.png

(5)再次使用默认字符集创建数据库

新的数据库使用了和server相同的编码

6e619a385e85bae17534d9a696030f01.png

3.2 创建表

(1)当前字符集设置

数据库编码为latin1

3972d28746729cf57953b7737a19b19b.png

(2) 创建表

name字段指定了字符集为uft8, address字段采用默认设置

8e422f2786b112b2413728e9151ea595.png

6454efdf2c1090ead930c707e8656922.png

(3) 插入中文测试

可以看到,采用name字段正常显示,address字段出现了乱码

0b9333cf9cec06bf8837be59818ae794.png

4. 实践建议

实践当中,建议创建数据库的时候就指定好db的字符集,如下:

create database testdb default charset utf8

之后创建表、字段的时候可以不指定字符集,默认集成db的字符集设定。

当然db创建好之后也可以修改db的编码:

ALTER DATABASE testdb DEFAULT CHARACTER SET utf8 COLLATE utf8_bin

修改表的编码:ALTER TABLE test DEFAULT CHARACTER SET utf8 COLLATE utf8_bin

修改字段的编码:  ALTER TABLE test CHANGE address address VARCHAR( 45 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL

修改了address字段的编码,原先的数据仍然不能正常显示,因为之前插入数据的时候,客户端传入的是utf8格式,存在latin1无法编码的字符,数据在

进程字符集转换的时候出现了损坏,查询的时候已经无法得到完整的插入时的数据了

但是新插入的中文数据可以正常显示

22a46b4245843d5bc385bb8e93335f17.png

参考:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值