刚开始工作的时候,在工作中遇到的与数据库相关的问题,多半跟编码有关,总结一下数据库编码的设置。

字符集

查看数据库支持的字符集:

mysql> SHOW CHARACTER SET;

从图中可以看到数据库中可用的字符集以及每个字符集的描述和默认的校对。 校对:在一个字符集中对字符的比对规则。

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

mysql> SHOW COLLATIONS;

从中可以看到,有的字符集不止一种校对,例如latin1对不同的欧洲语言有几种校对,而且许多校对出现两次,一次区分大小写(由_cs表示case sensitive),一次不区分大小写(由_ci表示case insensitive)。

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

mysql> SHOW VARIABLES LIKE 'character%';

mysql> SHOW VARIABLES LIKE 'collation%';

实际上,字符集很少是服务器范围(甚至是数据库范围)的设置,不同的表,甚至不同的列都可能需要不同的字符集,而且两者都可以在创建表时指定。

为了给表指定字符集和校对,可使用带子句的CREATE TABLE:

CREATE TABLE user(

id INT PRIMARY KEY NOT NULL AUTO_INCREMENT,

username VARCHAR(10)

) DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

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

CREATE TABLE user (

id INT PRIMARY KEY NOT NULL AUTO_INCREMENT,

username VARCHA(10),

about VARCHAR(100) CHARACTER SET latin2 COLLATE latin2_general_ci

) DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

校对对用ORDER BY检索出来的数据排序时起非常重要的作用。如果需要用与创建表时不同的顺序排序特定的SELECT语句,可以在SELECT语句自身中进行:

SELECT * FROM customers ORDER BY lastname COLLATE latin1_general_cs;

编码设置

MySQL连接存在四种编码设置:

数据库服务端编码

数据库编码

客户端编码

连接编码

以上四个编码有一个不符合都有可能出现与预期不符合的结果。

查看编码情况:

mysql> status;

从上图中可以看到四个编码中数据库服务端编码和数据库编码都是latin1的编码,只有客户端和连接是使用的utf8,这也是默认的情况,MySQL安装之后若不做设置默认就是latin1编码,若有中文时定会造成很多困扰。下面就分步讲讲如何设置这几部分的编码。

设置数据库服务端编码: 主要涉及到配置文件的修改,即/etc/mysql/my.conf,也可以通过SET命令的方式修改。 在/etc/mysql/my.conf中找到[mysqld](若没有则手动添加,同理,若/etc/mysql/my.conf不存在,手动添加即可)加入以下配置信息:

[mysqld]

character-set-server=utf8

collation-server=utf8_general_ci

此处设置好保存之后记得重启MySQL,若是Debian系的,如Ubuntu:

icebug@localhost:~$ sudo /etc/init.d/mysql restart

若是RedHat系的如CentOS:

icebug@localhost:~$ sudo /etc/init.d/mysqld restart

icebug@localhost:~$ sudo systemctl restart mysqld

重新登陆MySQL使用status查看,若都为utf8即说明设置成功。

当然,这还只是设置了默认编码,即对于新建的库编码是没有问题的,对于已经建立的库怎么办?这就需要单独设置数据库的编码了。 ALTER DATABASE CHARACTER SET ; EX:

mysql> ALTER DATABASE world CHARACTER SET utf8;

mysql> ALTER DATABASE world COLLATE utf8_general_ci;

从设置MySQL字符集这个过程中又加深了对一个道理的理解,不管学习哪个新东西,官方文档都应该作为首要资料翻阅,这才是真正可靠的捷径。: )

此文转载!

mysql连接编码设置_MySQL基础 - 编码设置相关推荐

  1. mysql isam参数优化_MySQL MyISAM优化设置点滴

    query_cache - 如果你的应用程序有大量读,而且没有应用程序级别的缓存,那么这很有用.不要把它设置太大了,因为想要维护它也需要不少开销,这会导致MySQL变慢.通 常设置为 32-512Mb ...

  2. mysql 慢查询时间设置_Mysql 慢查询设置

    Mysql慢查询设置 分析MySQL语句查询性能的方法除了使用 EXPLAIN 输出执行计划,还可以让MySQL记录下查询超过指定时间的语句,我们将超过指定时间的SQL语句查询称为"慢查询& ...

  3. mysql 查询缓存设置_MySQL查询缓存设置 提高MySQL查询性能

    从 MySQL4开始,出现了QueryCache查询缓存,如果使用了QueryCache,当查询接收到一个和之前同样的查询,服务器将会从查询缓存种检索结果,而不是再次分析和执行上次的查询.这样就大大提 ...

  4. [技术]mysql 慢查询时间设置_Mysql 慢查询设置

    -- 查询是否设置慢查询 show variables like 'slow_query%'; -- 慢查询时间  -- show variables like 'long_query_time'; ...

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

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

  6. mysql select查询字段_MySQL基础:SELECT查询语句

    Blog:博客园 个人 概述 SELECT语句用于从表中选取/查询数据,结果被存储在一个结果表中(称为结果集). 语法格式 SELECT [ALL | DISTINCT | DISTINCTROW ] ...

  7. PHP与MySQL连接菜鸟教程_MySQL 连接

    MySQL 连接 使用mysql二进制方式连接 您可以使用MySQL二进制方式进入到mysql命令提示符下来连接MySQL数据库. 实例 以下是从命令行中连接mysql服务器的简单实例: [root@ ...

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

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

  9. mysql查看当前字符集_Mysql 查看字符集设置

    MySQL 乱码的根源是的 MySQL 字符集设置不当的问题,本文汇总了有关查看 MySQL 字符集的命令.包括查看 MySQL 数据库服务器字符集.查看 MySQL 数据库字符集,以及数据表和字段的 ...

最新文章

  1. NeHe教程Qt实现——lesson16
  2. 主成分分析法_探索主成分分析法
  3. webdriver高级应用- 右键另存为下载文件
  4. Codeforces Round #192 (Div. 1) A. Purification 贪心
  5. css简单的数学运算
  6. 打开excel后,提示更新链接的原因(含批量处理VBA代码)
  7. 【BZOJ-1502】月下柠檬树 计算几何 + 自适应Simpson积分
  8. 莫陷入点击和评论陷阱
  9. 各路技术牛人都推荐的书
  10. 聚类及聚类算法的分类
  11. SFTP服务器文件下载
  12. 【第126期】游戏策划:给@毛毛团的简历分析
  13. 注意力测试软件系统,注意力综合评估训练系统
  14. python 卡方检验 特征选择_特征选择:卡方检验
  15. 项目经理的“势能”培养 (转)
  16. js vue 获取 (昨天、今天、明天) 时间
  17. 6 个常用的 API 接口在线管理平台
  18. java实现Stripe信用卡支付
  19. python中的values函数_Pandas之排序函数sort_values()的实现
  20. 苹果手机微信声音小怎么调大声_苹果6plus听筒没声音,学会这招自己就能解决...

热门文章

  1. 智能手环功能模块设计_可能是目前最好用的智能手环,国产芯加持,颜值与实力并存...
  2. python英文词频统计去除定冠词_使用Python进行英文词频统计
  3. 放大镜_医用手术放大镜
  4. 的garch预测_精品细读|基于隐含波动率、已实现波动率和GARCH模型波动率的预测...
  5. Python wxpy通过ModBus控制电脑鼠标和键盘
  6. 喵喵遇到java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter怎么办
  7. springboot服务调用超时_Spring Boot 异步请求和异步调用,一文搞定
  8. 解决JupyterLab/JupyterNotebook安装pycherts后依旧报错报错 ModuleNotFoundError: No module named ‘pyecharts‘
  9. c语言找出递增子数组的长度,编程之美2.16 数组中最长递增子序列的长度
  10. appium的三种等待方式 (还没实践过,记录在此)