mysql数据库修改数据库编码,字段编码与表编码(转) good
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

`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` (

`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的更多相关文章
- 怎样在mysql里面修改数据库名称
怎样在mysql里面修改数据库名称 提供三种方法:1. RENAME DATABASE db_name TO new_db_name这个..这个语法在mysql 5.1.7中被添加进来,到 ...
- Ubuntu 安装 mysql 并修改数据库目录
. . . . . 今天折腾了一下午的时间,恢复了无数次虚拟机快照,终于在 Ubuntu 上把 mysql 安装好了. mysql 是从官网下载的:mysql-server_5.7.16-1ubunt ...
- mysql alter修改数据库表结构用法
1.alter操作表字段 (1)增加字段 alter table 表名 add 字段名 字段类型: alter table student add name varchar(10): (2)修改字段 ...
- sqlserver查询数据库中包含某个字段的所有表和所有存储过程
1.查询包含某字段的所有表 select object_name(id) objName,Name as colName from syscolumns where (name like'%你要查询的 ...
- MySQL批量修改数据库的字符集
#走过,试过的路 UPDATE information_schema.`SCHEMATA` SET DEFAULT_COLLATION_NAME='utf8_general_ci' WHERE DEF ...
- mysql批量修改数据库表引擎
数据库表之前的引擎是MyISAM,影响事务操作,要改成Innodb引擎 查询表引擎 SELECT CONCAT(table_name,' ', engine) FROM information_sch ...
- mysql 忘记/修改数据库密码
window mysql 修改密码 方法1: 用SET PASSWORD命令 mysql -u root mysql> SET PASSWORD FOR 'root'@'localhost' = ...
- mysql : 修改数据库权限
解决步骤 第一步,点击用户 注意!!! 编辑权限,在我们设置权限之前,我们需要先重新加载才能生效, 如果不用编辑的话,直接按重新载入编辑,这个相当于保存. 中文意思(注意看那段话) 第二步 选择要处理 ...
- mysql update 修改多个字段and的语法问题
在MySQL里面update一条记录,语法都正确的,但记录并没有被更新... 问题语句 执行之前的记录是这样的: 执行之后的记录是这样的: 可以看到,实际上是有效果的: why? 看起来,语法是完全没 ...
随机推荐
- 转帖:Html.BeginForm
Html.BeginForm与Ajax.BeginForm都是MVC架构中的表单元素,它们从字面上可以看到区别,即Html.BeginForm是普通的表单提交,而Ajax.BeginForm是支持异步 ...
- POJ 1256.Anagram
2015-06-04 问题简述: 输出一串字符的全排列,顺序不同于一般的字母序,而是 A<a<B<b......<Z<z.所以应该重写一个比较函数. 原题链接:http: ...
- Android Bug 记录
1.Unable to resolve target 'android-5' 无法解析目标 ' 安卓系统-5' Unable to resolve target 'Google Inc.:G ...
- CGI PHP安装
./configure --with-php-config=/usr/local/php/bin/php-config--with-pdo-mysql=/usr/local/mysql PDO——MY ...
- MouseOver/MouseOut vs MouseEnter/MouseLeave
参考 http://www.oschina.net/question/234345_45280 这是jQuery提供的函数 要注意MouseOut 和 MouseLeave的区别 比如对元素A绑定Mo ...
- Chukwa
http://baidutech.blog.51cto.com/4114344/748261/ http://blog.csdn.net/cnbird2008/article/details/1451 ...
- Qt学习 之 多线程程序设计(QT通过三种形式提供了对线程的支持)
QT通过三种形式提供了对线程的支持.它们分别是, 一.平台无关的线程类 二.线程安全的事件投递 三.跨线程的信号-槽连接. 这使得开发轻巧的多线程Qt程序更为容易,并能充分利用多处理器机器的优势.多线 ...
- Unable to connect to your virtual device!解决方法
使用Genymotion安卓模拟器的用户,很多朋友在启动安卓系统的时候就弹出了以下英文,不知道如何处理,今天电脑知识网小编来教您处理Genymotion安卓模拟器启动出错的问题. Error Unab ...
- 2013 成都网络赛 1004 Minimum palindrome
题目大意:用m个字母组成一个长度为N的字符串,使得最长的回文子串 的长度最小. 并且要求字典序最小. 思路:分类模拟. 当M为1 的时候就直接输出N个A 当M大于2的时候就循环ABC 当M等于2的时候 ...
- 自定义UIViewController与xib文件关系深入分析
6月14日 上海 OSC 源创会开始报名啦,有很多机械键盘送哦!!! 用xcode模板向工程加入UIViewController sub class的时候,如果选中了with xib for inte ...