【MySQL】关于字符集和其排序问题

最近看到一个比较细微容易忽略的问题,做个备忘

字符集

MySQL支持多种字符集,若需支持中文,首选的推荐utf8。服务在默认安装时是latin1,西欧标准。需要手动修改为utf8。

以下为指令
//显示当前数据库支持的所有字符集

mysql> show charset; 

//显示当前数据库配置

mysql> show variables;

排序

排序,其实是字符集后面的collections

ci是 case insensitive, 即 “大小写不敏感”, a 和 A 会在字符判断中会被当做一样的;
bin 是二进制, a 和 A 会别区别对待.
例如运行:
SELECT * FROM table WHERE txt = ‘a’
那么在utf8_bin中你就找不到 txt = ‘A’ 的那一行, 而 utf8_general_ci 则可以.
utf8_general_ci 不区分大小写,这个你在注册用户名和邮箱的时候就要使用。
utf8_general_cs 区分大小写,如果用户名和邮箱用这个 就会照成不良后果
utf8_bin:字符串每个字符串用二进制数据编译存储。 区分大小写,而且可以存二进制的内容

unicode和general

utf8_unicode_ci和utf8_general_ci对中、英文来说没有实质的差别。
utf8_general_ci校对速度快,但准确度稍差。
utf8_unicode_ci准确度高,但校对速度稍慢。

旧字符集升级新字符集

以旧的字符集为latin1为例,升级成为utf8的字符集。
原来的表: old_table (default charset=latin1)
新表:new_table(default charset=utf8)

第一步:导出旧数据
复制代码 代码如下:

mysqldump --default-character-set=latin1 -h localhost -u root -B my_db --tables old_table > old.sql

第二步:转换编码(类似unix/linux环境下)
复制代码 代码如下:

iconv -t utf-8 -f gb2312 -c old.sql > new.sql

或者可以去掉 -f 参数,让iconv自动判断原来的字符集
复制代码 代码如下:

iconv -t utf-8 -c old.sql > new.sql

在这里,假定原来的数据默认是gb2312编码。
第三步:导入
修改old.sql,在插入/更新语句开始之前,增加一条sql语句:

 "SET NAMES utf8;"

保存。
复制代码 代码如下:

mysql -h localhost -u root my_db < new.sql

导入完成

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值