无论是什么语言,最重要的能力就是处理文字值,比如说'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';
客户端必须与服务器编码一直,不然会出现乱码/
mysql(一)语言&列类型
最新推荐文章于 2021-01-28 07:29:24 发布