1.创建对象时的默认值MySQL 的设置可以分为两类 , 创建对象时的默认值 , 在服务器和客户端通信时的设置 .

MySQL 服务器有默认的字符集和校对规则 , 每个数据库也有自己的默认值 . 每个表也有自己的默认值 . 这是一个集成的默认设置 . 最终最靠底层的默认值将影响创建的对象 .

至上而下的告诉 MySQL 应该使用什么字符集来存储某个列 .

每一层 , 都可以指定一个特殊的字符集或让服务器使用它的默认值 :

在创建数据库的时候 , 将根据服务器上的 sharacter_set_server 设置来设定该数据库的默认字符集 .

创建表的时候 , 将根据数据库的字符集设置来指定这个表的字符集设置 .

( CREATE DATABASE IF NOT EXISTS my_dbdefault charset utf8 COLLATE utf8_general_ci )

当 use database 时 , character_set_database ( show variables ) 会变为创建表时所设置的默认变量 , 当未选择任何库时 ,  character_set_database 于 sharacter_set_server 相等 .

创建列的时候 , 将根据表的设置指定列的字符集设置 .

真正存放数据的是列 , 所以更高 " 阶梯 " 的设置只是指定默认值 . 一个表的默认字符集设置无法影响存储在这个表中的某个列的值 . 只有当创建列而没有为列指定字符集的时候 , 表的默认字符集才有作用 .

2 . 服务器和客户端通信时的设置

当服务器和客户端通信的时候 , 他们可能使用不同的字符集 . 此时 , 服务器端将进行必要的翻译转换工作 .

服务器总是假设客户端按照 character_set_client 设置的字符来传输数据和 SQL 语句 .

当服务器收到客户端的 SQL 语句时 , 它先将其转换成字符集 character_set_connection . 它还使用这个设置来决定如何将数据转换为字符串 .

当服务器端返回数据或者错误信息给客户端时 , 它会将其转换为 character_set_result .

以上值可以通过 SET NAMES 或者 SET CHARACTER 来改变 ( 注 : 该命令会一次改变所有三个变量的值 , 即 : character_set_client , character_set_connection , character_set_result 会同时改变为所设值 ) .

在 php 中 , 可以使用 mysql_set_charset() 来修改客户端的字符集 .

可使用前缀和 COLLATE 子句来指定字符串的字符集或者校对字符集 , 例如 , 下面的示例使用了前缀 ( 下划线 ) 来指定 UTF8 字符集 , 还使用 COLLATE 子句指定使用二进制校对规则 .SELECT _utf8 'hello world' COLLATE utf8_bin;

3 . 选择字符集和校对规则

MySQL 4.1 和之后的版本支持很多的字符集和校对规则 , 包括支持使用 Unicode 编码的多字节 UTF-8 字符集 ( MySQL 支持 UTF-8 的一个三字节子集 , 这几乎可以包含世界上的所有字符集 ) . 可以使用 SHOW CHARACTERSET 和 SHOW COLLATION 来查看 MySQL 支持的字符集和校对规则 .

对于校对规则通常需要考虑一个问题 , 是否以大小写敏感的方式比较字符串 , 或者是以字符串编码的二进制值来进行比较大小 . 他们对应的校对规则的前缀分别为 _cs , _ci 和 _bin 根据需要很容易选择 . 大小写敏感和二进制校对规则不同之处在于 , 二进制校对规则直接使用字符的字节进行比较 , 二大小写敏感的校对规则在多字节字符集时 , 有更复杂的比较规则 .

创建表时可以如下方式显示的置顶字符集和校对规则 .

CREATE TABLE t ( col1 CHAR(1), col2 CHAR(1) CHARSET utf8, col3 CHAR(1) COLLATE latin1_bin ) DEFAULT CHARSET=cp1251;

字符集和校对规则如何影响查询

只有排序查询要求的字符集和服务器数据的字符集相同的时候 , 才能使用索引进行排序 . 索引根据数据列的校对规则进行排序 . 假设某列使用的校对规则为 utf8_general_ci 如果使用别的校对规则进行排序 , 如 utf8_bin  那么 , 就必须使用文件排序 .

当使用两个字符集不同的列来关联两个表时 , MySQL 会尝试转换其中一个列的字符集 . 这和在数据列外面封装一个函数一样 . 会让 MySQL 无法使用这个列上的索引 . 如果不确定 MySQL 内部是否做了这样的转换 , 可以在 EXPLAIN EXTENDED 后使用 SHOW WARNINGS 来查看 MySQL 是如何处理的 .

mysql字符集与校对规则设置_MySQL 字符集与校对规则相关推荐

  1. mysql字符集在哪设置_MySQL字符集设置

    最近,在项目组使用的mysql数据库中,插入数据出现乱码,关于这个问题做了下总结,我们从最基本的地方说起,到错误产生的深层次原因和解决办法. 基本概念 • 字符(Character)是指人类语言中最小 ...

  2. mysql字符集与校对规则设置_mysql中的字符集和校对规则(mysql校对集)

    1.简要说明介绍 字符集和校对规则 字符集是一套符号和编码.校对规则是在字符集内用于比较字符的一套规则. MySql在collation提供较强的支持,oracel在这方面没查到相应的资料. 不同字符 ...

  3. mysql utf8和gbk的区别_MySQL字符集 GBK、GB2312、UTF8区别

    MySQL中涉及的几个字符集 character-set-server/default-character-set:服务器字符集,默认情况下所采用的. character-set-database:数 ...

  4. MySQL慢日志超时时间设置_Mysql的慢日志

    一.开启慢查询日志,可以让MySQL记录下查询超过指定时间的语句,通过定位分析性能的瓶颈,才能更好的优化数据库系统的性能. 二.慢日志参数: slow_query_log 慢查询开启状态 slow_q ...

  5. mysql 字符集等设置_MySQL字符集设置

    一.MySQL字符集设置 • 系统变量: –character_set_server:默认的内部操作字符集 –character_set_client:客户端来源数据使用的字符集 –character ...

  6. mysql 连接 字符集设置_Mysql 字符集的设置和修改

    Show variables like 'character%';  //显示目前mysql默认 字符集 显示数据连接字符集 修改字符集 D:\mysql>Net stop mysql   // ...

  7. mysql字符集设置_mysql字符集设置

    配置文件路径: /full/path/mysql/bin/my.cnf (默认为/etc/my.cnf ) [client] default-character-set=utf8 [mysql] de ...

  8. mysql排序规则查看_MySQL 查看编码 排序规则

    mysql show variables Variable_name Value collation_connection utf8_general_ci collation_database utf ...

  9. mysql的check约束怎么设置_MySQL怎么使用check约束

    MySQL使用check约束的方法:1.如果要设置CHECK约束的字段范围小,并且比较容易列举全部的值,可以将该字段的类型设置为enum类型或set类型.2.如果需要设置CHECK约束的字段范围大,且 ...

最新文章

  1. mysql数据库实验报告jdbc_Jdbc连接数据库实验报告(2)
  2. Raft 为什么是更易理解的分布式一致性算法——(1)Leader在时,由Leader向Follower同步日志 (2)Leader挂掉了,选一个新Leader,Leader选举算法。...
  3. 工作中用到的java反射机制_(转)JAVA-反射机制的使用
  4. python后端工程师 数据爬虫
  5. strcpy和strncpy区别 memcpy strcpy strncpy lstrcpy lstrncpy wstrcpy, memmove
  6. 互联网经济与实体经济
  7. 平面设计师必备的十个技能
  8. Spring Boot-@EnableWebMvc注解
  9. linux7安装pgsql数据库,CentOS7下PostgreSQL安装
  10. jquery-数字渐变
  11. 为什么要使用面向对象编程
  12. [列联相关] 列联系数计算及假设检验
  13. 考上985能改变命运吗_南开研究生称读研改变命运被嘲讽,网友:本科垃圾,考上985也没用...
  14. HMC5883L电子罗盘原理及应用,全网最详细~
  15. 分享一张网上的测试工程师能力模型思维导图
  16. STM32串口3 映射和完全重映射 PB10 PB11 PD8 PD9 PC10 PC11
  17. 广义表的存储结构及其基本运算
  18. 鼓捣中兴的TCM SSX44B
  19. 双手指代脑区,读文献参考,大脑分区记不住怎么办
  20. 给IDEA换个酷炫的主题,这个有点哇塞啊!

热门文章

  1. Linux下安装OpenOffice
  2. 微信中怎样查看微信热点?分享技巧!微信中如何查看微信热点?
  3. ue4网格转地形_【魔改UE4】Rtx实时焦散的一次尝试
  4. 2022年茶艺师(高级)考试题及模拟考试
  5. python构建一个计算列表中位数的函数_python学习之数据科学库
  6. 【OpenCV-图像处理】用sift特征点算法和ransac算法进行多幅图像的拼接
  7. Java实时报表统计查询慢_如何解决报表关联计算中的性能问题
  8. ORA-01722:无效数字
  9. 苹果开发者账号续费不显示续费按钮的解决方法!
  10. python3爬虫豆瓣_Python爬虫(3)豆瓣登录