mysql collation utf8_mysql的collation-字符集

utf8_general_ci               :排序规则

utf8 -- UTF-8 Unicode     :字符集

一、通过my.cnf文件增加(一劳永逸)

两个参数:

1.在[mysqld]下添加

default-character-set=utf8 (mysql 5.5 版本添加character-set-server=utf8)

2.在[client]下添加

default-character-set=utf8

这样我们建数据库建表的时候就不用特别指定utf8的字符集了。配置文件里的这种写法解决了数据存储和比较的问题

,但是对客户端的连接是没有作用的,客户端这时候一般需要指定utf8方式连接才能避免乱码。也就是传说总的set

names命令。事实上,set names utf8命令对应的是服务器端以下几个命令:

SET character_set_client = utf8;

SET character_set_results = utf8;

SET character_set_connection = utf8;

但这三个参数是不能写在配置文件my.cnf里的。只能通过set命令来动态修改

修改数据库的字符集:

mysql>use mydb

mysql>alter database mydb character set utf-8;

创建数据库指定数据库的字符集:

mysql>create database mydb character set utf-8;

二、避免创建数据库及表出现中文乱码和查看编码方法

1、创建数据库的时候:CREATE DATABASE `test`

CHARACTER SET 'utf8'

COLLATE 'utf8_general_ci';

2、建表的时候 CREATE TABLE `database_user` (

`ID` varchar(40) NOT NULL default '',

`UserID` varchar(40) NOT NULL default '',

) ENGINE=InnoDBDEFAULT CHARSET=utf8;

三、另外还可以通过配置每个数据库目录下的db.opt,这样每个数据库可以分别为不同的字符集:

修改/var/lib/mysql/mydb/db.opt

default-character-set=latin1

default-collation=latin1_swedish_ci

default-character-set=utf8

default-collation=utf8_general_ci

----------------------------------------------------------------------------------------------------------------

mysql的collation大致的意思就是字符序。首先字符本来是不分大小的,那么对字符的>, = , < 操作就需要有个字符序的规则。

collation做的就是这个事情,你可以对表进行字符序的设置,也可以单独对某个字段进行字符序的设置。一个字符类型,它的字符序有多个,比如:

下面是UTF8对应的字符序。

utf8_general_ci utf8 33 Yes Yes 1

utf8_bin utf8 83 Yes 1

utf8_unicode_ci utf8 192 Yes 8

utf8_icelandic_ci utf8 193 Yes 8

utf8_latvian_ci utf8 194 Yes 8

utf8_romanian_ci utf8 195 Yes 8

utf8_slovenian_ci utf8 196 Yes 8

utf8_polish_ci utf8 197 Yes 8

utf8_estonian_ci utf8 198 Yes 8

utf8_spanish_ci utf8 199 Yes 8

utf8_swedish_ci utf8 200 Yes 8

utf8_turkish_ci utf8 201 Yes 8

utf8_czech_ci utf8 202 Yes 8

utf8_danish_ci utf8 203 Yes 8

utf8_lithuanian_ci utf8 204 Yes 8

utf8_slovak_ci utf8 205 Yes 8

utf8_spanish2_ci utf8 206 Yes 8

utf8_roman_ci utf8 207 Yes 8

utf8_persian_ci utf8 208 Yes 8

utf8_esperanto_ci utf8 209 Yes 8

utf8_hungarian_ci utf8 210 Yes 8

utf8_sinhala_ci utf8 211 Yes 8

utf8_german2_ci utf8 212 Yes 8

utf8_croatian_ci utf8 213 Yes 8

utf8_unicode_520_ci utf8 214 Yes 8

utf8_vietnamese_ci utf8 215 Yes 8

utf8_general_mysql500_ci utf8 223 Yes 1

mysql的字符序遵从命名惯例。以_ci(表示大小写不敏感),以_cs(表示大小写敏感),以_bin(表示用编码值进行比较)。比如:

CREATE TABLE `issue_message` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`content` varchar(255) NOT NULL,

PRIMARY KEY (`id`),

) ENGINE=MyISAM DEFAULT CHARSET=utf8;

这个表下面的两个sql会出现同样的结果

select * from issue_message where content = 'Yes'

select * from issue_message where content = 'yes'

如果改成下面的定义:

CREATE TABLE `issue_message` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`content` varchar(255) NOT NULL COLLATE utf8_bin,

PRIMARY KEY (`id`),

) ENGINE=MyISAM DEFAULT CHARSET=utf8;

那么两个sql结果就会不一样了

所以,如果对字符大小敏感的话,最好将数据库中默认的utf8_general_ci设置为utf8_bin。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值