Mysql 字符问题
1.整形:
tinyint 1字节 -128 127 0-255
smallint 2字节 -32768 32767 0-65535
mediumint 3字节 -8388608 8388607 0-16777215
int 4字节 -2147483648 2147483647 4294967295
bigint 8字节 -9223372036854775808 18446744073709551615
9223372036854775807
使用关键字zerofill 用0代替空格补充空位。
int(5) unsigned 这样定义数据类型,则表示无符号类型数值,默认是有符号的。
double (M,D) D :小数位数 D称为标度
decimal(M,D)
类型 字节 范围 无符号 范围
| FLOAT | 4 | -3.402823466E+38~ -1.175494351E-38 |
0和1.175494351E-38~ 3.402823466E+38 |
| DOUBLE | 8 | -1.7976931348623157E+308~ -2.2250738585072014E-308 |
0和2.2250738585072014E-308~ 1.7976931348623157E+308 |
| DECIMAL(M,D)或DEC(M,D) | M+2 | 同DOUBLE型 | 同DOUBLE型 |
注意:
浮点数如果不写M和D,则会按照实际显示。定点数如果不写M和D,则只显示整数
如果有M和D,插入值的精度高于实际定义的精度,则会将数据四舍五入后插入,定点类型会警告
使用unsigned时,对应字段只保留正数
数值不够指定显示宽度时,左边自动补空格
M仅是显示宽度,存储值大小由类型决定
使用关键字zerofill时,用0代替空格补充空位
注意:
建议在定义浮点数时,如果不是实际情况需要,最好不要使用。
浮点数后面跟“(M,D)”的用法是非标准用法,如果要用于数据库迁移,则最好不要用。
在MySQL中,定点数以字符串的形式存储,因此,其精度比浮点数要高。而且浮点数会出现误差,这是浮点数一直存在的缺陷。如果要对数据的精度要求比较高,还是选择定点数(DECIMAL)比较安全。
浮点数相对于定点数的优点是在长度一定的情况下,浮点数能够表示更大的数据范围,它的缺点是会引起精度问题。在MySQL中,定点数以字符串的形式存储,在对精度要求比较高的时候(如货币、科学数据等
*字符类型
类型 大小 用途
CHAR 0-255字节 定长字符串
比指定长度大的值将被截短,而比指定长度小的值将会用空格作填补
速度快,但空间利用率低
VARCHAR 0-255字节 变长字符串
短于指示器长度的 VARCHAR 类型不会被空格填补,但长于指示器的值仍然会被截短
在不确定需要多少字符时使用VARCHAR 可以大大地节约磁盘空间、 提高存储效率
空间利用率高,但速度慢
特别注意:
varchar(N), 这里的N是指字符数,并不是字节数.占用的字节数与编码有关
中文和英文字母都被当作1个字符来对待。
utf-8 :一个汉字3字节 英文字母1字节
gbk :一个汉字占2个字节
TEXT 和 BLOB 类型
对于字段长度要求超过 255 个的情况下,MySQL 提供了 TEXT 和 BLOB 两种类型。根据存储数据的大小,它们都有不同的子类型。这些大型的数据用于存储文本块或图像、声音文件等二进制数据类型。
TEXT 和 BLOB 类型在分类和比较上存在区别。BLOB 类型区分大小写,而 TEXT 不区分大小写。大小修饰符不用于各种 BLOB 和 TEXT 子类型。比指定类型支持的最大范围大的值将被自动截短。
*日期和时间类型
日期类型 存储空间 日期格式 日期范围
------------ --------- --------------------- -----------------------------------------
datetime 8 bytes YYYY-MM-DD HH:MM:SS 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59
timestamp 4 bytes YYYY-MM-DD HH:MM:SS 1970-01-01 00:00:01 ~ 2038
date 3 bytes YYYY-MM-DD 1000-01-01 ~ 9999-12-31
year 1 bytes YYYY 1901 ~ 2155
time 3 byte HH:MM:SS -838:59:59 ~ 838:59:59
注意:
datetime 如果不分配一个值,默认值为0
timestamp 时间戳 如果你不分配一个值,自动设置为最近操作的日期和时间
以上两种格式 插入数据时不需要加分隔符 例如 20150701220506
*枚举类型
ENUM类型
create table enum (
sex enum("nan","nv","qita")
);
如果一个 ENUM被声明为 NULL,NULL 也是该列的一个合法值,并且该列的缺省值也将为 NULL。如果一个 ENUM被声明为 NOT NULL,该列的缺省值将是该列表所允许值的第一个成员。
enum一次只能插入一个值
SET类型
create table table1(
aihao set ("yinyue","meishu","tiyu")
);
inter into table1(aihao) value("yinyue")
inter into table1(aihao) value("tiyu")
inter into table1(aihao) value("yinyue","tiyu")
inter into table1(aihao) value("yinyue","tiyu","meishu")
set一次只能插入多个个值
首先要声明,MySQL中默认字符集的设置有四级:
服务器级,数据库级,表级 。最终是字段级 的字符集设置。
注意前三种均为默认设置,并不代码你的字段最终会使用这个字符集设置。所以我们
建议要用show create table 表名 ; 或show full fields from tableName; 来检查当前表中字段的字符集设置。
查看Mysql默认字符集的相关设置:

? SHOW CHARACTER SET;
? SHOW COLLATION;
? SHOW VARIABLES LIKE 'character%';
? SHOW VARIABLES LIKE 'collation%';
? SQL函数HEX、LENGTH、CHAR_LENGTH
? SQL函数CHARSET、COLLATION
MySQL中关于连接环境的字符集设置有 Client端,connection, results 通过这些参数,MySQL就知道你的客户端工具用的是什么字符集,结果集应该是什么字符集。这样MySQL就会做必要的翻译,一旦这些参数有误,自然会导致字符串在转输过程中的转换错误。基本上99%的乱码由些造成。
乱码后需要检查的信息。(如果需要论坛上的朋友帮助,建议你提供以下信息 )
1. 数据库表中字段的字符集设置 。show create table TableName 或 show full columns from tableName
mysql> show create table t1;
+-------+------------------------------------
| Table | Create Table
+-------+------------------------------------
| t1 | CREATE TABLE `t1` (
`id` int(11) NOT NULL,
`c1` varchar(30) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk |
+-------+------------------------------------
1 row in set (0.00 sec)
mysql> show full columns from t1;
+-------+-------------+----------------+------+-----+-
| Field | Type | Collation | Null | Key |
+-------+-------------+----------------+------+-----+-
| id | int(11) | NULL | NO | PRI |
| c1 | varchar(30) | gbk_chinese_ci | YES | |
+-------+-------------+----------------+------+-----+-
2 rows in set (0.00 sec)
mysql>
2. 当前联接系统参数 show variables like 'char%'
mysql> show variables like 'char%';
+--------------------------+----------------
| Variable_name | Value
+--------------------------+----------------
| character_set_client | gbk
| character_set_connection | gbk
| character_set_database | latin1
| character_set_filesystem | binary
| character_set_results | gbk
| character_set_server | latin1
| character_set_system | utf8
| character_sets_dir | C:/Program File
+--------------------------+----------------
8 rows in set (0.00 sec)
mysql>
1. 中文,请确保 表中该字段的字符集为中文兼容:
big5 | Big5 Traditional Chinese
gb2312 | GB2312 Simplified Chinese
gbk | GBK Simplified Chinese
utf8 | UTF-8 Unicode
2. 确保,联接参数与这个字段字符集一致,你可以用 set name 'charsetname';
比如, set name 'gbk';
这条命令会同时修改 character_set_client,character_set_connection,character_set_results
(如果你的这架MySQL中都为中文,则你可以在my.ini或my.cnf中加上或修改这个参数, 参数文件修改后需重启MySQL服务)
[mysql]
default-character-set=gbk
3. PHP 乱码, 同样 mysql_query("set name 'gbk'"); 其它API也类似。
4. phpmyadmin里乱码
phpMyAdmin的config.inc.php中有没有设置$cfg['DefaultCharset']='utf-8';
5. Windows操作系统中命令行("DOS"窗口)下。
在你的DOS窗中的左上角标题栏片左键,属性,
在字体中,选择“宋体”,确认
mysql中 set names 'gbk';
改表编码:
alter table 表名 default character set 现在的编码 collate 新编码方式
修改列编码
ALTER TABLE `uc_users_bak` CHANGE `nick_name` `nick_name` VARCHAR ( 100 )
CHARACTER
SET
utf8
COLLATE
utf8_general_ci
NULL
DEFAULT
NULL
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;
Mysql 字符问题的更多相关文章
- mysql字符乱码
解决mysql字符乱码思路: mysql服务器字符集 mysql客户端字符集 系统字符集 生产环境改字符集: 1.导出表结构到 scam.sql文件中 2.更改scam.sql文件中的字符集为想要的字 ...
- 修改数据库mysql字符编码为UTF8
Mysql数据库是一个开源的数据库,应用非常广泛.以下是修改mysql数据库的字符编码的操作过程. 步骤1:查看当前的字符编码方法 mysql> show variables like'char ...
- linux mysql字符编码问题
发布:thatboy 来源:脚本学堂 [大 中 小] 本文介绍下,linux环境中mysql字符编码问题的解决办法,有遇到mysql编码问题的朋友,可以参考下本文的介绍,希望对你有一定的帮 ...
- mysql字符类型大小写敏感的讨论
mysql字符类型默认是不区分大小写的,即select * from t where name='AAA'与='aaa'没区别,以下是测试的例子 (root)); (root,,,,'BbB'); ( ...
- mysql字符集和校对规则(Mysql校对集)
字符集的概念大家都清楚,校对规则很多人不了解,一般数据库开发中也用不到这个概念,mysql在这方便貌似很先进,大概介绍一下简要说明 字符集和校对规则 字符集是一套符号和编码.校对规则是在字符集内用于比 ...
- MySQL 字符类型
字符类型 MySQL提供了多种关于字符存储的类型,但是在大多数情况下我们只使用char和varchar即可 类型 大小 用途 CHAR 0-255字节 定长字符串 VARCHAR 0-65535 字节 ...
- Mysql字符转义
在字符串中,某些序列具有特殊含义.这些序列均用反斜线('\')开始,即所谓的转义字符.MySQL识别下面的转义序列: \0 ASCII 0(NUL)字符. \' 单引号('''). \" 双 ...
- MYSQL字符类型数值排序
今天遇到MySQL数字排序问题,我的排序字段是经过计算后的,而计算后的字段直接拿来排序就会按照字符一个个排序,所以这里找到简单的方法, ORDER BY 排序字段* 或者 ORDER BY 排序字段+ ...
- Mysql字符类型比较
一. binary和char比较: binary 字节为单位,char字符为单位,字符占几个字节取决于字符集 binary 比较规则基于字节值,char基于字符,即使是_bin的比较规则 范围都0- ...
- mysql set names 命令和 mysql 字符编码问题
先看下面的执行结果: (root@localhost)[(none)]mysql>show variables like 'character%'; +--------------------- ...
随机推荐
- CF 558 C
Amr loves Chemistry, and specially doing experiments. He is preparing for a new interesting experime ...
- mysql的查询优化
参考网站:http://www.liyblog.top/p/6 这里总结了52条对sql的查询优化,下面详细来看看,希望能帮助到你 1, 对查询进行优化,应尽量避免全表扫描,首先应考虑在 wh ...
- MySQL查询基础
MySQL查询 DQL(Data Query Language ) 1.排序查询 # 语法: select 字段 from 表名 order by 字段1 [降序/升序],字段2 [降序/升序],.. ...
- 三分钟网络基础-IP地址分类
IP 地址的编址方法共经过了三个历史阶段: 分类的 IP 地址 子网的划分 超网 这篇文章首先介绍,最初始的 IP 地址分类方法. 分类的 IP 将 IP 地址划分为若干个固定类,每一类地址都由两个固 ...
- 解决jar包依赖冲突(idea)
在IDEA状态下查看项目依赖的关系 关系如下图 红色数据jar包冲突 在对应的依赖中出去去冲突依赖
- 【Oracle】内连接、外连接、(+)的使用
表各有A, B两列 A B 001 10A 002 20A A B 001 10B 003 30B A B 001 10C 004 40C 连接分为两种:内连接与外连接. A.内连接 内连接,即最常见 ...
- 每天玩转3分钟 MyBatis-Plus - 4. 高级查询(二)(条件构造器)
每天玩转3分钟 MyBatis-Plus - 1. 配置环境 每天玩转3分钟 MyBatis-Plus - 2. 普通查询 每天玩转3分钟 MyBatis-Plus - 3. 高级查询(一) 每天玩转 ...
- leetcode腾讯精选练习之螺旋矩阵(八)
螺旋矩阵 题目 给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素. 示例 1: 输入: [ [ 1, 2, 3 ], ...
- [集训]dance
题意 http://uoj.ac/problem/77 思考 显然能转化为最小割模型.若没有pi的代价,则对于第i个格子,可以让源点连向第i个点,容量为黑色收益,再连向汇点,容量为白色收益.再考虑pi ...
- Day2-Python3基础-文件操作
1. 字符编码与转码 需知: 1.在python3默认编码是unicode 2.unicode 分为 utf-32(占4个字节),utf-16(占两个字节),utf-8(占1-4个字节), so ut ...