CREATE DATABASE `mybatis-subject` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_bin */ 

其中的 /*!40100 ...*/ 这部分注释会被MySQL执行,表示服务端版本号大于4.1.00时会被执行。

mysql>
mysql> show create database mybatis-subject;
- You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '-subject' at line
mysql>
mysql> show create database 'mybatis-subject'
;
- You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''mybatis-subject'' at line
mysql>
mysql> show create database `mybatis-subject`;
+-----------------+-------------------------------------------------------------------------------------------------+
| Database | Create Database |
+-----------------+-------------------------------------------------------------------------------------------------+
| mybatis-subject | CREATE DATABASE `mybatis-subject` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_bin */ |
+-----------------+-------------------------------------------------------------------------------------------------+
row in set mysql>

关于emoji表情的话mysql的utf8是不支持,需要修改设置为utf8mb4,才能支持, 详细emoji表情与utf8mb4的关系 。
MYSQL 5.5 之前, UTF8 编码只支持1-3个字节,只支持BMP这部分的unicode编码区, BMP是从哪到哪,到 http://en.wikipedia.org/wiki/Mapping_of_Unicode_characters 这里看,基本就是0000~FFFF这一区。
从MYSQL5.5开始,可支持4个字节UTF编码utf8mb4,一个字符最多能有4字节,所以能支持更多的字符集。

utf8mb4 is a superset of utf8
utf8mb4兼容utf8,且比utf8能表示更多的字符。

mysql/Java服务端对emoji的支持 http://www.cnblogs.com/softidea/p/5774380.html

(1267, Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and (utf8mb4_unicode_ci,IMPLICIT) for operation '=')

报错原因:表关联时,关联字段的字符串集不一致。
解决办法:将需要关联的表之间的字符串改成一样

ALTER TABLE todo_list CONVERT TO CHARACTER
SET utf8mb4 COLLATE utf8mb4_unicode_ci;

https://www.cnblogs.com/softidea/p/9494940.html

https://www.cnblogs.com/softidea/p/6135237.html

最近看了一下KIGG框架,发现在用EF + MYSQL数据库时,数据出现了乱码,用工具(Navicat )查看一下表category的结构发现 KIGG 数据库的默认情况是用latin1编码的(DEFAULT CHARSET=latin1), 如下:

create database ssi default character set utf8;

mysql> create database  test  default character set utf8mb4 collate utf8mb4_unicode_ci;

CREATE TABLE `t_user` (
`USER_ID` int(11) NOT NULL AUTO_INCREMENT,
`USER_NAME` char(30) NOT NULL,
`USER_PASSWORD` char(10) NOT NULL,
PRIMARY KEY (`USER_ID`),
KEY `IDX_NAME` (`USER_NAME`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8
CREATE TABLE `category` ( `Id` binary(16) NOT NULL,
`UniqueName` varchar(64) NOT NULL,
`Name` varchar(64) NOT NULL,
`CreatedAt` datetime NOT NULL,
PRIMARY KEY (`Id`),
KEY `IX_Category_UniqueName_CreatedAt` (`UniqueName`,`CreatedAt`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

我把表的编码格式改成 utf8. 查看表category 发现表的DDL 变成了,

CREATE TABLE `category` (

`Id` binary(16) NOT NULL,
`UniqueName` varchar(64) character set latin1 NOT NULL,
`Name` varchar(64) character set latin1 NOT NULL,
`CreatedAt` datetime NOT NULL,
PRIMARY KEY (`Id`),
KEY `IX_Category_UniqueName_CreatedAt` (`UniqueName`,`CreatedAt`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

发现在原来的表中之前定义的列(字段)的编码类型不会因为表的编码格式而变化,还是latin1(拉丁文格式), 但新建列的类型为是UTF8格式的。由此可见MYSQL中的数据编码格式已经粒子化到 单位“列”。 在建 数据库的时候可以指定数据库编码格式,在这之后所建的表和列的编码格式都会以此格式为默认格式。若之后想改数据库的编码格式的话,想要把之前的表和列的编码格式都改过来的话就要一一改过来了。所以,我们要使不担心数据库的编码格式,只要在 MYSQL的安装目录下面X:\Program File\MySQL5 下面找到一个my.ini 文件,用记事本打开找到

default-character-set=你要设置的编码格式 。修改其格式即可。在后面建库,建表,建字段就不要做其它的设置,除非你要特别要求。

KIGG例子中 EF + MYSQL 的乱码原因是因为程序提交给数据库是文件是UTF8格式的但数据库中字段接收的格式却是latin1 格式的,所以只要将列改为UTF8格式即可。

总结:对于惯用微软的的SQLSERVER 的用户来说很少观注数据库数据的编码格式,因为微软已经帮用户做完了那些边角的工作,所以使我们忽略很多重要的事。在用MYSQL中要注意 其中的数据库,表,列 对应的编码格式没有包含关系,最终决定内容以什么编码格式保存下来还是 定义列时指定的编码(`Name` varchar(64) character set latin1 NOT NULL,),在建库和表时设置编码格式只是相当与为自己的下一级设置默认编码格式。

http://www.cnblogs.com/seebook/archive/2010/11/06/1870649.html

1.修改数据库的编码
将数据库(test)的编码方式修改为utf8,如:
ALTER DATABASE `test` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;

2.修改表的编码
将表(test)的编码方式修改为utf8,如:
ALTER TABLE `test` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;

3.修改字段的编码
将表(test)中字段(name)的编码方式修改为utf8,如:
ALTER TABLE `test` CHANGE `name` `name` VARCHAR( 10 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL;

http://www.cnblogs.com/linuxer/archive/2012/09/24/2870515.html

mysql数据库修改数据库编码,字段编码与表编码(转) good的更多相关文章

  1. 怎样在mysql里面修改数据库名称

    怎样在mysql里面修改数据库名称       提供三种方法:1. RENAME DATABASE db_name TO new_db_name这个..这个语法在mysql 5.1.7中被添加进来,到 ...

  2. Ubuntu 安装 mysql 并修改数据库目录

    . . . . . 今天折腾了一下午的时间,恢复了无数次虚拟机快照,终于在 Ubuntu 上把 mysql 安装好了. mysql 是从官网下载的:mysql-server_5.7.16-1ubunt ...

  3. mysql alter修改数据库表结构用法

    1.alter操作表字段 (1)增加字段 alter table 表名 add 字段名 字段类型: alter table student add name varchar(10): (2)修改字段 ...

  4. sqlserver查询数据库中包含某个字段的所有表和所有存储过程

    1.查询包含某字段的所有表 select object_name(id) objName,Name as colName from syscolumns where (name like'%你要查询的 ...

  5. MySQL批量修改数据库的字符集

    #走过,试过的路 UPDATE information_schema.`SCHEMATA` SET DEFAULT_COLLATION_NAME='utf8_general_ci' WHERE DEF ...

  6. mysql批量修改数据库表引擎

    数据库表之前的引擎是MyISAM,影响事务操作,要改成Innodb引擎 查询表引擎 SELECT CONCAT(table_name,' ', engine) FROM information_sch ...

  7. mysql 忘记/修改数据库密码

    window mysql 修改密码 方法1: 用SET PASSWORD命令 mysql -u root mysql> SET PASSWORD FOR 'root'@'localhost' = ...

  8. mysql : 修改数据库权限

    解决步骤 第一步,点击用户 注意!!! 编辑权限,在我们设置权限之前,我们需要先重新加载才能生效, 如果不用编辑的话,直接按重新载入编辑,这个相当于保存. 中文意思(注意看那段话) 第二步 选择要处理 ...

  9. mysql update 修改多个字段and的语法问题

    在MySQL里面update一条记录,语法都正确的,但记录并没有被更新... 问题语句 执行之前的记录是这样的: 执行之后的记录是这样的: 可以看到,实际上是有效果的: why? 看起来,语法是完全没 ...

随机推荐

  1. C#编辑基础笔记

    目录 1.     .NET .NET Framework是一种多语言的平台,一种技术. 而c#是基于其上面的一种语言.    1 2.     Winform 桌面应用程序[从.net平台上面开发的 ...

  2. android四大组件详解--摘

    Android四大基本组件介绍与生命周期 Android四大基本组件分别是Activity,Service服务,Content Provider内容提供者,BroadcastReceiver广播接收器 ...

  3. 自定义cell时,在宽的手机上显示太窄解决办法

    1.工程设置要如下:见第二个红框,清除launch screan file 后面的内容 2.自定义的cell要设置auto layout 和size clases

  4. java反射机制入门02

    Field对象的机制与实现 1.Field对象概述 1)Java.lang.reflect.Field类,是用于表示类中.接口中属性对象的类. 2)可以操作类中私有,以及公有等全部属性和属性的信息. ...

  5. BZOJ 3293 分金币

    整体来说,这道题与之前做的1045题目完全一样,出了说法不一样外,思路及做法可以照搬,因此在这里便不再详解.        程序如下:(如有疑问请参看我的博客http://www.cnblogs.co ...

  6. c++ 容器、继承层次、句柄类

    一.容器与继承 在容器中保存有继承关系的对象,如果定义成保存基类对象,则派生类将被切割,如果定义成保存派生类对象,则保存基类对象又成问题(基类对象将被强制转换成派生类对象,而派生类中定义的成员未被初始 ...

  7. jQuery.form 中的 ajaxForm() 和 ajaxSubmit()

    官方例子  http://malsup.com/jquery/form/#ajaxForm官方API   http://malsup.com/jquery/form/#api中文API   http: ...

  8. [转] HTC:html组件

    ~~~不时会看到 用htc实现 hover, border-raius等效果,可以用来弥补IE6-8的不足.那么htc到底是什么呢? 1.摘要 本文在实例的基础上讨论了HTC(HTML Compone ...

  9. GCC -Wall

    官网:http://gcc.gnu.org/onlinedocs/gcc-4.7.2/gcc/Warning-Options.html#Warning-Options3.8 Options to Re ...

  10. Poj 1002 487-3279(二叉搜索树)

    题目链接:http://poj.org/problem?id=1002 思路分析:先对输入字符进行处理,转换为标准形式:插入标准形式的电话号码到查找树中,若有相同号码计数器增加1,再中序遍历查找树. ...