mysql 必知必会整理—全球化与本地化[十六]

Posted 程序员其实就是一个写文档的工作,代码只是文档的一部分,一切皆

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql 必知必会整理—全球化与本地化[十六]相关的知识,希望对你有一定的参考价值。

前言

简单介绍一下字符集。

数据库表被用来存储和检索数据。不同的语言和字符集需要以不同的方式存储和检索。

因此,mysql需要适应不同的字符集(不同的字母和字符),适应不同的排序和检索数据的方法。

  1. 字符集为字母和符号的集合;

  2. 编码为某个字符集成员的内部表示;

  3. 校对为规定字符如何比较的指令。

校对为什么重要 排序英文正文很容易,对吗?或许不。考
虑词APE、apex和Apple。它们处于正确的排序顺序吗?这有
赖于你是否想区分大小写。使用区分大小写的校对顺序,这
些词有一种排序方式,使用不区分大小写的校对顺序有另外
一种排序方式。这不仅影响排序(如用ORDER BY排序数据),
还影响搜索(例如,寻找apple的WHERE子句是否能找到
APPLE)。在使用诸如法文à或德文ö这样的字符时,情况更复
杂,在使用不基于拉丁文的字符集(日文、希伯来文、俄文
等)时,情况更为复杂。

在MySQL的正常数据库活动(SELECT、INSERT等)中,不需要操心太多的东西。使用何种字符集和校对的决定在服务器、数据库和表级进行。

正文

MySQL支持众多的字符集。为查看所支持的字符集完整列表,使用以下语句:

SHOW CHARACTER SET;

这条语句显示所有可用的字符集以及每个字符集的描述和默认校对。

为了查看所支持校对的完整列表,使用以下语句:

SHOW  COLLATION;

此语句显示所有可用的校对,以及它们适用的字符集。可以看
到有的字符集具有不止一种校对。例如,latin1对不同的欧洲
语言有几种校对,而且许多校对出现两次,一次区分大小写(由_cs表示),
一次不区分大小写(由_ci表示)。

通常系统管理在安装时定义一个默认的字符集和校对。此外,也可
以在创建数据库时,指定默认的字符集和校对。为了确定所用的字符集
和校对,可以使用以下语句:

SHOW VARIABLES LIKE \'character%\';
SHOW VARIABLES LIKE \'collation%\';

实际上,字符集很少是服务器范围(甚至数据库范围)的设置。

不同的表,甚至不同的列都可能需要不同的字符集,而且两者都可以在创建表时指定。

此语句创建一个包含两列的表,并且指定一个字符集和一个校对顺序。

这个例子中指定了CHARACTER SET和COLLATE两者。一般,MySQL如下确定使用什么样的字符集和校对。

如果指定CHARACTER SET和COLLATE两者,则使用这些值。

如果只指定CHARACTER SET,则使用此字符集及其默认的校对(如SHOW CHARACTER SET的结果中所示)。

如果既不指定CHARACTER SET,也不指定COLLATE,则使用数据库默认。

除了能指定字符集和校对的表范围外,MySQL还允许对每个列设置它们,如下所示:

这里对整个表以及一个特定的列指定了CHARACTER SET和COLLATE。

如前所述,校对在对用ORDER BY子句检索出来的数据排序时起重要的作用。

如果你需要用与创建表时不同的校对顺序排序特定的SELECT语句,可以在SELECT语句自身中进行:

此SELECT使用COLLATE指定一个备用的校对顺序(在这个例子中,为区分大小写的校对)。这显然将会影响到结果排序的次序。

临时区分大小写 上面的SELECT语句演示了在通常不区分大小写的表上进行区分大小写搜索的一种技术。当然,反过来也是可以的。

SELECT的其他COLLATE子句 除了这里看到的在ORDER BY子 句中使用以外,COLLATE还可以用于GROUP BY、HAVING、聚集函数、别名等。

最后,值得注意的是,如果绝对需要,串可以在字符集之间进行转换。为此,使用Cast()或Convert()函数。

下一节账户安全。

MySQL必知必会 | 安全维护性能

全球化和本地化

关于MySQL处理不同字符集和语言

字符集和校对顺序

数据库被用来存储和检索数据,不同的语言和字符集需要以不同的方式存储和检索,因此,MySQL需要适应不同的字符集,适应不同的排序方式

一些术语:
字符集:字母和富豪的集合
编码:某某个字符成员的内部表示
校对:规定字符如何比较的指令

使用字符集和校对顺序

查看MySQL所支持的字符集完整列表

SHOW CHARACTER SET;

查看所支持校对的完整列表

SHOW COLLATION;

确认系统使用的字符集和校对

SHOW VARIABLES LIKE 'character%';
SHOW VARIABLES LIKE 'collation%';

一般情况下,不同的表甚至不同的列都可能需要不同的字符集,可以在创建表的时候指定

CREATE TABLE table_name
(
	col_name_1	type,
	col_name_2	type CHARACTER SET character_name COLLATE collate_name
)DEFAULT CHARACTER SET character_name
 COLLATE collate_name;

MySQL决定字符集和校对的方式

  • 如果指定CHARACTER SETCOLLATE两者,则使用这些值
  • 如果只指定CHARACTER SET,则使用词字符集以及其对应的默认校对
  • 如果两者都不指定,则使用数据库默认的字符集和校对

校对在对用ORDER BY子句检索出来的数据排序时,起到重要的作用(如是否考虑大小写),如果需要用与常见表示不同的校对顺序排序特定的SELECT语句,可以在语句自身中设置

SELECT * FROM table_nmae
ORDER BY COL_1,COL_2 COLLATE collate_name

COLLATE还可以使用于GROUP BY/HAVING/聚集函数/别名

安全管理

关于访问控制用户管理

访问控制

  • MySQL服务器的安全基础是,用户应该对他们需要的数据具有合适的访问权
  • 管理访问控制需要创建和管理用户账号
  • root账号对整个MySQL数据库具有完全控制,在日常的MySQL操作中不应该使用它

管理用户

  • MySQL用户账号和信息存储在名为mysqlMySQL数据库中,当需要获取所有用户账号列表时,可以使用以下代码

    USE mysql;
    SELECT user FROM user;
    
  • 创建用户账号

    CREATE USER user_name IDENTIFIED BY 'password';
    
    • INENTIFIED BY指定的口令为纯文本
  • 重命名一个用户账号

    RENAME USEER user_name TO new_name;
    
  • 删除用户帐号

    DROP USER user_name;
    

    删除用户账号及其相关权限

  • 查看用户访问权限

    SHOW GRANTS FOR user_name;
    
  • 授予用户权限

    GRANT option ON table_name.col_name TO user_name
    
  • 撤销权限

    REVOKE option ON table_nmae.col_name FROM user_name
    
  • 可以被操作的权限

    权限说明
    ALL除了GRANT OPTION以外所有权限
    ALTER
    CREATE
    DELETE
    DROP
    EXECUTE使用CALL和存储过程
    FILE使用SELECT INTO OUTFILELOAD DATA INFILE
    GRANT OPTION
    INDEX
    INSERT
    LOCK TABLES
    PROCESS
    RELOAD
    REPLICATION
    SELECT
    SHOW
    SHUTDOWN
    SUPER
    UPDATE
    USAGE无访问权限

    授权时,用户必须先存在,但是被授权的对象可以不存在,这样的副作用是,当某个数据库或表被删除时,相关的权限仍然存在,如果未来再次创建这些数据库和表,这些权限仍然起作用

  • 更改口令

SET PASSWORD FOR user_name = Password('PASSWORD')

-- 更新当前登录用户的口令
SET PASSWORD = Password('password')

数据库的维护

备份数据

MySQL数据库时基于磁盘的文件,普通的备份系统和例程就能备份MySQL的数据,但是由于这些文件总是处于打开和使用的状态,普通的文件副本备份不一定总是有效

几种解决方案:

  1. 使用命令函实用程序mysqldump转储所有数据库内容到某个外部文件
  2. 可用命令行实用程序mysqlhotcopy从一个数据库复制所有数据
  3. 使用BACKUP TABLE 或· SELECT INTO OUTFILE转储所有数据到某个外部文件

为了保证所有数据都被写到磁盘(包括索引数据),可能需要在进行备份前使用 FLUSH TABLES 语句

进行数据库维护

ANALYZE TABLE用来检查表健是否正确
CHECK TABLE用来针对许多问题对表进行检查

诊断启动问题

服务器启动问题通常在对MySQL配置或服务器本身进行更改时出现
MySQL在这个问题发生时报告错误,但由于多数MySQL服务器是作为系统进程或服务自启动的,这个消息可能看不到
在排除系统启动问题时,首先应该尽量手动启动服务器
MySQL服务器自身通过在命令杭商执行mysqld启动
几个重要的mysqld命令行选项

  1. --help显示帮助
  2. --safe-mode装在减去某些最佳配置的服务器
  3. --verbose显示全文本消息
  4. --version显示版本信息然后退出

查看日志文件

MySQL维护管理员依赖的一系列日志文件
主要日志文件有以下几种:

  1. 错误日志
  2. 查询日志
  3. 二进制日志
  4. 缓慢查询日志

改善性能

在诊断应用的滞缓现象和性能问题时,性能不良的数据库通常是最常见的祸因
性能优化讨论和分析的出发点:

  1. 硬件建议
  2. 专用服务器
  3. 调整内存分配、缓冲区大小
  4. 多线程
  5. 编写SELECT语句的方式
  6. 使用存储过程
  7. 正确的数据类型
  8. 检索用于数据
  9. DELAYED关键字
  10. 开启和关闭自动提交
  11. 索引
  12. or 和 union
  13. like 和 fulltext
  14. 每条规则都会在某些情况下被打破

以上是关于mysql 必知必会整理—全球化与本地化[十六]的主要内容,如果未能解决你的问题,请参考以下文章

mysql 必知必会整理—组合查询与全文搜索[九]

mysql 必知必会整理—子查询与连接表[八]

MySQL基础之MySQL必知必会(十六)创建高级联结

MySQL必知必会第十六章 创建高级联结

mysql必知必会的学习

《MySQL 必知必会》读书总结