带你了解MySQL数据库小技巧( 三 )


CHAR和VARCHAR的区别:

  • CHAR是固定长度字符 , VARCHAR是可变长度字符;CHAR会自动删除插入数据的尾部 空格 , VARCHAR不会删除尾部空格 。
  • CHAR是固定长度 , 所以它的处理速度比VARCHAR的速度要快 , 但是它的缺点就是浪费 存储空间 。 所以对存储不大 , 但在速度上有要求的可以使用CHAR类型 , 反之可以使用 VARCHAR类型来实现 。
存储引擎对于选择CHAR和VARCHAR的影响:
对于MyISAM存储引擎:最好使用固定长度的数据列代替可变长度的数据列 。 这样可以使 整个表静态化 , 从而使数据检索更快 , 用空间换时间 。
对于InnoDB存储引擎:使用可变长度的数据列 , 因为InnoDB数据表的存储格式不分固定 长度和可变长度 , 因此使用CHAR不一定比使用VARCHAR更好 , 但由于VARCHAR是按照 实际的长度存储 , 比较节省空间 , 所以对磁盘I/O和数据存储总量比较好 。
  • ENUM 和 SET
ENUM只能取单值 , 它的数据列表是一个枚举集合 。 它的合法取值列表最多允许有65535 个成员 。 因此 , 在需要从多个值中选取一个时 , 可以使用ENUM 。 比如:性别字段适合定义为ENUM类型 , 每次只能从’男’或’女’中取一个值 。 SET可取多值 。 它的合法取值列表最多允许有64个成员 。 空字符串也是一个合法的SET值 。 在需要取多个值的时候 , 适合使用SET类型 , 比如:要存储一个人兴趣爱好 , 最好使用SET类型 。 ENUM和SET的值是以字符串形式出现的 , 但在内部 , MySQL以数值的形式存储它们 。
  • BLOB 和 TEXT BLOB是二进制字符串 , TEXT是非二进制字符串 , 两者均可存放大容量的信息 。 BLOB主 要存储图片、音频信息等 , 而TEXT只能存储纯文本文件 。 应分清两者的用途 。
11、MySQL中如何使用特殊字符?诸如单引号(’) , 双引号(") , 反斜线('\')等符号 , 这些符号在MySQL中不能直接输入 使用 , 否则会产生意料之外的结果 。 在MySQL中 , 这些特殊字符称为转义字符 , 在输入时需要 以反斜线符号(’\’)开头 , 所以在使用单引号和双引号时应分别输入(\’)或者(") , 输入反斜线时应该输入(\) , 其他特殊字符还有回车符(\r) , 换行符(\n) , 制表符(\tab) , 退格符(\b)等 。 在向数据库中插入这些特殊字符时 , 一定要进行转义处理 。
12、MySQL中可以存储文件吗?MySQL中的BLOB和TEXT字段类型可以存储数据量较大的文件 , 可以使用这些数据类型 存储图像、声音或者是大容量的文本内容 , 例如网页或者文档 。 虽然使用BLOB或者TEXT可 以存储大容量的数据 , 但是对这些字段的处理会降低数据库的性能 。 如果并非必要 , 可以选择只 储存文件的路径 。
13、MySQL中如何执行区分大小写的字符串比较?在Windows平台下 , MySQL是不区分大小的 , 因此字符串比较函数也不区分大小写 。 如果 想执行区分大小写的比较 , 可以在字符串前面添加BINARY关键字 。 例如默认情况下 , ’a’=‘A’ 返回结果为1 , 如果使用BINARY关键字 , BINARY’a’=‘A’结果为0,在区分大小写的情况下 , ’a’ 与’A’并不相同 。
14、如何从日期时间值中获取年、月、日等部分日期或时间值?MySQL中 , 日期时间值以字符串形式存储在数据表中 , 因此可以使用字符串函数分别截取日期时间值的不同部分 , 例如某个名称为dt的字段有值“2010-10-01 12:00:30” , 如果只需要获 得年值 , 可以输入LEFT(dt, 4) , 这样就获得了字符串左边开始长度为4的子字符串 , 即YEAR 部分的值;如果要获取月份值 , 可以输入MID(dt,6,2) , 字符串第6个字符开始 , 长度为2的子 字符串正好为dt中的月份值 。 同理 , 读者可以根据其他日期和时间的位置 , 计算并获取相应的值 。
15、如何改变默认的字符集?CONVERT()函数改变指定字符串的默认字符集 , 在开始的章节中 , 向读者介绍使用GUI图形化安装配置工具进行MySQL的安装和配置 , 其中的一个步骤是可以选择MySQL的默认字符集 。 但是 , 如果只改变字符集 , 没有必要把配置过程重新执行一遍 , 在这里 , 一个简单的方式是 修改配置文件 。 在Windows中 , MySQL配置文件名称为my.ini , 该文件在MySQL的安装目录下面 。 修改配置文件中的default-character-set和character-set-server参数值 , 将其改为想要的字 符集名称 , 如gbk、gb2312、latinl等 , 修改完之后重新启动MySQL服务 , 即可生效 。 读者可以在修改字符集时使用SHOW VARIABLES LIKE ’character_set_°%’;命令查看当前字符集 , 以进行对比 。