mysql(一)语言&列类型

  无论是什么语言,最重要的能力就是处理文字值,比如说'abc','123','1e3f'   这些都是字面值,只是加不加''的区别,最终结果都会被转化系统转化为最合适的类型,但对我们来说:就只有文字..

如果mysqld开启了nsi_quotes选项,则只允许用''引用字符串,""被解释为标示符


字符串和数字跟其他语言一样,表示方式都为xxxx /x - .  0x  x'' 所有这些,都可以进行char--->到高层转换,或者是string,不可以进行转换

mysql提供了16 2 串到10进制的转换或标注功能,b'' x''

也就是所有一切字符皆是可转化的,只要你符合转化常规语言转化规则/


在常规基本转化规则的基础上,mysql遵循和扩展sql03标准定义了数据类型.


数值类型:

bit          64位  8字节

tinyint    8位    1字节

smallint  16位  2字节

mediumint 24位 3字节

int          32位   4字节

bigint(long)        64位   8字节


float        32位   4字节

double     64位   8字节

这些数据类型都可以在后面定义 显示 的规则,比如

bit(15): 此数据包含了64位  但是只显示出来前15位

float(12,2)此数据包含32位,内部结构与float(16,13)等没有任何区别,只是显示的精度和标度问题

任何数值类型都有 unsigned类型,这样可存储量大了一倍,zerofill也是unsigned的,并且无数字位全部填充0


serial是 bigint unsigned not null auto_increment的同义词

decima l dec numeric等 都是double的同义词,是为了符合odbc标准而建立的语意上等同double,存在(m,n)能力



日期类型:

date             只存储日期,1000-9999

datetime      存储日期跟时间,范围为:1000-9999

timestamp   存储日期跟时间,范围为:1971-2039

datetime与timestamp在存储与使用上的区别:

timestamp使用4个字节的utc格式存储,使用和保存之前都会进行相应time_zone的转化,这在国际化的应用中将起到相当有效的作用,并且存储效率很高,而且支持自动更新,适合保存当前时间

datetime使用8字节的实际格式(19个数字)存储,优点是存储区间大。

所以,当前时间等重要,精确时间使用timestamp其他可以使用datetime.



字符串类型:

char                <=255

varchar           <=65535

binary

varbinary

tinytext    2**8-1

tinyblob

text

blob

mediumtext

mediumblob

longtext

longblob

char适合那些系统标示符,系统确定下来的长度小的数据

varchar适合由用户输入的数据,而且不进行空格删除,确保数据完整性

在其他数据库中 nchar/代表national国际化,本地字符的意思,mysql已经默认使用了n



其他enum

使用双字节存储




mysql的字符集:

由于列类型:char   varchar     text都是存储的字符串,这样就存在字符串使用的字符集的问题,并且还存在字符串比较规则的问题,所以mysql提供了一整套管理系统 字符集,校队规则的方案:

所有的字符串列都可以设置:character set ___ collation ____

从分级上来说  大到数据库,表,小到列 都有严格的划分。


与字符集有关的系统视图/表有:

character_sets:

mysql> show create table character_sets/G
*************************** 1. row ***************************
       Table: CHARACTER_SETS
Create Table: CREATE TEMPORARY TABLE "CHARACTER_SETS" (
  "CHARACTER_SET_NAME" varchar(32) NOT NULL DEFAULT '',
  "DEFAULT_COLLATE_NAME" varchar(32) NOT NULL DEFAULT '',
  "DESCRIPTION" varchar(60) NOT NULL DEFAULT '',
  "MAXLEN" bigint(3) NOT NULL DEFAULT '0'
)

collations:

mysql> show create table collations/G
*************************** 1. row ***************************
       Table: COLLATIONS
Create Table: CREATE TEMPORARY TABLE "COLLATIONS" (
  "COLLATION_NAME" varchar(32) NOT NULL DEFAULT '',
  "CHARACTER_SET_NAME" varchar(32) NOT NULL DEFAULT '',
  "ID" bigint(11) NOT NULL DEFAULT '0',
  "IS_DEFAULT" varchar(3) NOT NULL DEFAULT '',
  "IS_COMPILED" varchar(3) NOT NULL DEFAULT '',
  "SORTLEN" bigint(3) NOT NULL DEFAULT '0'
)

collation_character_set_applicability:

mysql> show create table collation_character_set_applicability/G
*************************** 1. row ***************************
       Table: COLLATION_CHARACTER_SET_APPLICABILITY
Create Table: CREATE TEMPORARY TABLE "COLLATION_CHARACTER_SET_APPLICABILITY" (
  "COLLATION_NAME" varchar(32) NOT NULL DEFAULT '',
  "CHARACTER_SET_NAME" varchar(32) NOT NULL DEFAULT ''
)


字符集的选用是分解的,最高级为服务器

--default-character-set=utf8

--default-collation=utf8_general_ci

数据库:

create database test(...)character set utf8 collation utf8_general_ci

表:

create temporary table tt() character set utf8 collation utf8_general_ci

列:

create table ..... col1 varchar(500) character .....


在链接服务器的时候,client会提出链接所使用的字符集:

set @charset='utf8';

set character_set_client=@charset;

set character_set_server=@charset;

set character_set_connection=@charset;


select @@character_...

/set names 'utf8';


客户端必须与服务器编码一直,不然会出现乱码/



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值