MySQL中字段类型char、varchar和text的区别

注意要使用PASSWORD函数,然后还要使用FLUSH PRIVILEGES。 方法四 和方法三一样,只是使用了REPLACE语句

在MySQL中,char、varchar和text类型的字段都可以用来存储字符类型的数据,char、varchar都可以指定的字符长度,但text不可以。

mysql手册中文版_mysql80使用手册mysql手册中文版_mysql80使用手册


mysql手册中文版_mysql80使用手册


mysql手册中文版_mysql80使用手册


它们的存储方式和数据的检索方式也都不一样。

数据的检索效率是:char

>varchar

>text

具体说明:

char:存储定长数据很方便,CHAR字段上的索引效率级高,必须在括号里定义长度,可以有默认值,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间(自动用空格填充),且在检索的时候后面的空格会隐藏掉,所以检索出来的数据需要记得用什么trim之类的函数去过滤空格。

varchar:存储变长数据,但存储效率没有CHAR高,必须在括号里定义长度,可以有默认值。保存数据的时候,不进行空格自动填充,而且如果数据存在空格时,当值保存和检索时尾部的空格仍会保留。另外,varchar类型的实际长度是它的值的实际长度+1,这一个字节用于保存实际使用了多大的长度。

text:存储可变长度的非Unicode数据,长度为2^31-1个字符。text列不能有默认值,存储或检索过程中,不存在大小写转换,后面如果指定长度,不会报错误,但是这个长度是不起作用的,意思就是你插入数据的时候,超过你指定的长度还是可以正常插入。

关于存储空间:

在使用UTF8字符集的时候,MySQL手册上是这样描述的:

基本拉丁字母、数字和标点符号使用一个字节;

大多数的欧洲和中东手写字母适合两个字节序列:扩展的拉丁字母(包括发音符号、长音符号、重音符号、低音符号和其它音符)、西里尔字母、希腊语、亚美尼亚语、希伯来语、语、叙利亚语和其它语言;

韩语、中文和日本象形文字使用三个字节序列。

结论:

1、经常变化的字段用varchar;

2、知道固定长度的用char;

3、超过255字节的只能用varchar或者text;

4、能用varchar的地方不用text;

5、能够用数字类型的字段尽量选择数字类型而不用字符串类型,这会降低查询和连接的性能,并会增加存储开销。这是因为引擎在处理查询和连接回逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了;

6、同一张表出现多个大字段,能合并时尽量合并,不能合并时考3.进入命令窗口,然后进入MySQL的安装目录,比如我的安装目录是c:mysql,进入C:mysqlbin虑分表,原因请考

优化InnoDB表BLOB,TEXT列的存储效率

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

您可能感兴趣的文章:MySQL数据库迁移快速导出导入大量数据shell脚本作mysql数据库删除重复的数据MySQL数据库列的增删改实现方法MySQL实现类似Oracle序列的方案mysql实现sequence功能的代码Can''t

connect

to

local

MySQL

through

socket

''/tmp/mysql.sock''解决方法mysql中rpm方式安装的详解Mysql常用函数大全(分类汇总讲解)利用MySQL主从配置实现读写分离减轻数据库压力mysql+spring+mybatis实现数据库读写分离的代码配置

从编译到工具:几种Mysql的优化方法

mysql低版本不支持limit offset

一、在编译时优化mysql

在《mysql 中文参考手册》里有这个例子,所以我也就写出来了。

如果你从源代码分发安装mysql,要注意,编译过程对以后的目标程序性能有重要的影响,不同的编译方式可能得到类似的目标文件,但性能可能相很大,因此,在编译安装mysql适应仔细根据你的应用类型选择可能好的编译选项。这种定制的mysql可以为你的应用提供性能。

技巧:选用较好的编译器和较好的编译器选项,这样应用可提高性能10-30%。(mysql文档如是说)

1.1、使用pgcc(pentiumgcc)编译器

该编译器针对运行在奔腾处理器系统上的程序进行优化,用pgcc编译mysql源代码,总体性能可提高10%。当然如果你的不是用奔腾处理器,就不必用它了,因为它是专为奔腾系统设计的。

1.2、仅使用你想使用的字符集编译mysql

mysql目前提供多达24种不同的字符集,为全球用户以他们自己的语言插入或查看表中的数据。却省情况下,mysql安装所有者这些字符集,热然而,的选择是指选择一种你需要的。如,禁止除latin1字符集以外的所有其它字符集:

------------------------------------------------------------------------------

%./configure-with-extra-charsets=none[--other-configuration-options]

------------------------------------------------------------------------------

1.3、将mysqld编译成静态执行文件

将mysqld编译成静态执行文件而无需共享库也能获得更好的性能。通过在配置时指定下列选项,可静态编译mysqld。

------------------------------------------------------------------------------

%./configure-with-mysqld-ldflags=-all-static[--other-configuration-options]

------------------------------------------------------------------------------

1.4、配置样本

下列配置命令常用于提高性能:

------------------------------------------------------------------------------

%cflags="-o6-mpentiumpro-fomit-frame-pointer"cxx=gcccxxflags="-o6-mpentiumpro-fomit-frame-pointer-felide-constructors-fno-exceptions-fno-rtti"./configure--prefix=/usr/local--enable-assembler--with-mysqld-ldflags=-all-static--disable-shared

------------------------------------------------------------------------------

二、调整

确保运用正确的编译固然重要,但这只是成功的步,配置众多的mysql变量同样对的正常运行起关键作用。你可以将这些变量的赋值存在一个配置文件中,以确保它们在每次启动mysql时均起作用,这个配置文件就是文件。

mysql已经提供了几个文件的样本,可在/usr/local/mysqld/share/mysql/目录下找到。这些文件分别命名为、、和,规模说明可在描述配置文件适用的系统类型标题中找到。如果在只有相当少内存的系统上运行mysql,而且只是偶尔的用一下,那么会比较理想,因为它命令mysqld只使用少的资源。类似地,如果你构建电子商务超市,而且系统拥有2g内存,那么你可能要用到文件了。为了利用这些文件中的一个,你需要一个适合需求的文件,改名为。你可以选择使用配置文件三种作用范围的一种:

global:将文件到的/etc目录下,这使得配置文件中的变量作用于全局,即对所有上的mysql数据库有效。

local:将文件到[mysql-install-dir]/var/目录下,使得作用于特定的。[mysql-install-dir]表示mysql安装目录。

user:你可以再限制作用于特定的用户,将到用户的根目录下。

究竟如何设置中的这些变量呢?更进一步说,你可以设置哪一个变量。虽然所用变量对mysql相对通用,每一个变量与mysql的的某些组件有更特定的关系。如变量max_connects归在mysqld类别下。执行下列命令即可知道:

%/usr/local/mysql/libexec/mysqld--

它显示大量的选项及与mysqld相关的变量。你可以很容易地在该行文字之下找出变量:

-------------------------------------------------------------------

siblevariablesforoption--set-variable(-o)are

-------------------------------------------------------------------

然后你可以如下设置中的那些变量:

-------------------------------------------------------------------

set-variable=max_connections=100

-------------------------------------------------------------------

它设置mysql的并发连接数为100。要确保在文件中的[mysqld]标题下插入变量设置。

三、表类型

很多mysql用户可能很惊讶,mysql确实为用户提供5种不同的表类型,称为dbd、heap、isam、merge和myia。dbd归为事务安全类,而其他为非事务安全类。

3.1、事务安全

dbd

3.2、非事务安全

heap

heap表是mysql中存取数据快的表。这是因为他们使用存储在动态内存中的一个哈希索引。另一个要点是如果mysql或崩溃,数据将丢失。

isam

isam表是早期mysql版本的缺省表类型,直到myia开发出来。建议不要再使用它。

merge

merge是一个有趣的新类型,在3.23.25之后出现。一个merge表实际上是一个相同myisam表的,合并成一个表,主要是为了效率原因。这样可以提高速度、搜索效率、修复效率并节省磁盘空间。

myia

这是mysql的缺省表类型。它基于ia代码,但有很多有用的扩展。myia比较好的原因:

myia表小于ia表,所以使用较少资源。

myia表在不同的平台上二进制层可移植。

3.3、指定表类型

你可在创建表时指定表的类型。下例创建一个heap表:

--------------------------------------------------------------------

mysqlcreatetableemail_addressestype=heap(-emailchar(55)notnull,

-namechar(30)notnull,

-primarykey(email));

---------------------------------------------------------------------

bdb表需要一些配置工作。

3.4、更多的表类型

为了使mysql管理工作更有趣,即将发布的mysql4.0将提供两种新的表类型,称为innobase和gemeni。

四、优化工具

mysql本身提供了几条内置命令用于帮助优化。

4.1、show

你可能有兴趣知道mysql究竟更了什么,下列命令给出一个总结:

-----------------------------------

mysqlshowstatus;

-----------------------------------

它给出了一个相当长的状态变量及其值的列表。有些变量包含了异常终止客户的数量、异常终止连接的数量、连接尝试的次数、并发连接数和大量其他有用的信息。这些信息对找出系统问题和低效极具价值。

show还能做更多的事情。它可以显示关于日志文件、特定数据库、表、索引、进程和权限表中有价值的信息。详见mysql手册。

4.2、explain

当你面对select语句时,explain解释select命令如何被处理。这不仅对决定是否应该增加一个索引,而且对决定一个复杂的join如何被mysql处理都是有帮助的。

4.3、optimize

optimize语句允许你恢复空间和合并数据文件碎片,对包含变长行的表进行了大量更新和删除后,这样做特别重要。optimize目前只工作于myia和bdb表。

如何重设MySQL密码

>use mysql;

方法一

year 1 bytes YYYY 1901 ~ 2155

使用phpmyadmin,这是简单的了,修改mysql库的user表,不过别忘了使用PASSWORD函数。

使用mysqladmin,这是前面声明的一个特例。

mysqladmin -oot -p password mypasswd

输入这个命令后,需要输入root的原密码,然后root的密码将改为mypasswd。

把命令里的root改为你的用户名,你就可以改你自己的密码了。

当然如果你的mysqladmin连接不上mysql server,或者你没有办法执行mysqladmin,那么这种方法就是无效的,而且mysqladmin无法把密码清空。

下面的方法都在mysql提示符下使用,且必须有mysql的root权限:

方法三

mysql> Insert INTO mysql.user (Host,User,Password)

VALUES(’%’,’jeffrey’,PASSWORD(’biscuit’));

mysql> FLUSH PRIVILEGES

确切地说这是在增加一个用户,用户名为jeffrey,密码为biscuit。

在《mysql中文参考手册》里有这个例子,所以我也就写出来了。

注意要使用PASSWORD函数,然后还要使用FLUSH PRIVILEGES。

方法四

和方法三一样,只是使用了REPLACE语句

mysql> REPLACE INTO mysql.user (Host,User,Password)

VALUES(’%’,’jeffrey’,PASSWORD(’biscuit’));

mysql> FLUSH PRIVILEGES

方法五

使用SET PASSWORD语句,

mysql> SET PASSWORD FOR jeffrey@"%" = PASSWORD(’biscuit’);

拟也必须使用PASSWORD()函数,但是不需要使用FLUSH PRIVILEGES。

方法六

使用GRANT ... IDENTIFIED BY语句

mysql> GRANT USAGE ON . TO jeffrey@"%" IDENTIFIED BY ’biscuit’;

这里PASSWORD()函数是不必要的,也不需要使用FLUSH PRIVILEGES。

注意: PASSWORD() [不是]以在Unix口令加密的同样方法施行口令加密。

MySQL 忘记口令的解决办法

如果 MySQL 正在运行,首先杀之: killall -TERM mysqld。

启动 MySQL :bin/safe_mysqld --skip-grant-tables &

就可以不需要密码就进入 MySQL 了。

然后就是

>use mysql

>flush privileges;

重新杀 MySQL ,用正常方法启动 MySQL 。

mysql密码清空

Windows:

1.用系统登陆系统。

2.停止MySQL的服务。

4.跳过权限检查启动MySQL,

c:mysqlbin>mysqld-nt --skip-grant-tables

5.重新打开一个窗口,进入c:mysqlbin目录,设置root的新密码

c:mysqlbin>mysqladmin -oot flush-privileges password "newpassword"

c:mysqlbin>mysqladmin -oot -p shutdown

将newpassword替换为你要用的root的密码,第二个命令会提示你输入新密码,重复个命令输入的密码。

6.停止MySQL ,用正常模式启动Mysql

7.你可以用新的密码链接到Mysql了。

Unix&Linux:

1.用root或者运行mysqld的用户登录系统;

2.利用kill命令结束掉mysqld的进程;

3.使用--skip-grant-tables参数启动MySQL

4.为root@localhost设置新密码

shell>mysqladmin -oot flush-privileges password "newpassword"

5.重启MySQL

mysql修改密码

mysql修改,可在mysql命令行执行如下:

mysql -oot mysql

mysql> Update user SET password=PASSWORD("new password") Where user=’name’;

mysql> FLUSH PRIVILEGES;

mysql> QUIT

教你如何将MySQL数据库的密码恢复

因为MySQL密码存储于数据库mysql中的user表中,所以只需要将我windows 2003下的MySQL中的user表拷贝过来覆盖掉就行了。

在c:mysqldatamysql(linux 则一般在/var/lib/mysql/mysql/)目录下有三个user表相关文件user.frm、user.MYD、user.MYI

user.frm //user表样式文件

user.MYD //user表数据文件

user.MYI //user表索引文件

为保险起见,三个都拷贝过来,不过其实如果之前在要恢复的那个MySQL上没有更改过表结构的话,只要拷贝user.MYD就行了

然后

#. /etc/rc.d/init.d/mysql stop

#. /etc/rc.d/init.d/mysql start

#mysql -oot -p XXXXXX

好了,可以用windows 2003下mysql密码登陆了

mysql>use mysql

mysql>update user set Password=PASSWORD(’xxxxxx’) where User=’root’;

这时候会出错,提示user表只有读权限

我分析了一下原因,只这样的,因为user.文件的权限分配是windows 2003下的,在windows 2003下我ls -l一看权限是666

在linux下我一看,拷过来后权限变成了600(其实正常情况下600就行了,只不过这里的文件属主不是mysql,拷过来后的属主变为了root,所

以会出现权限不够,这时候如果你改成权限666则可以了,当然这样不好,没有解决问题的实质),在/var/lib/mysql/mysql/下ls

-l看了一下

再重起一下MYSQL

重新连接

mysql>use mysql

mysql>update user set Password=PASSWORD(’xxxxxx’) where User=’root’;

mysql>FLUSH PRIVILEGES;

有一点值得注意:如果你windows 下mysql如果是默认配置的话,注意要还要执行

mysql>delete from user where User=’’;

mysql>delete from user where Host=’%’;

mysql>FLUSH PRIVILEGES;

好了,到这里恢复密码过程就完成了

这个方法么就是有点局限性,你必须也具备另外的user表文件

其他还有几种方法

其它方法一(这个是网上流传较广的方法,mysql中文参考手册上的)

1. 向mysqld server 发送kill命令关掉mysqld server(不是 kill -9),存放进程ID的文件通常在MYSQL的数据库所在的目录中。

killall -TERM mysqld

你必须是UNIX的root用户或者是你所运行的SERVER上的同等用户,才能执行这个作。

2. 使用`--skip-grant-tables’ 参数来启动 mysqld。 LINUX下:

/usr/bin/safe_mysqld --skip-grant-tables , windows下c:mysqlbinmysqld --skip-grant-tables

3. 然后无密码登录到mysqld server ,

>use mysql

>flush privileges;

。你也可以这样做:

`mysqladmin -h hostname -u user password ’new password’’

4. 载入权限表:

`mysqladmin -h hostname flush-privileges’

或者使用 SQL 命令

`FLUSH PRIVILEGES’

5.

killall -TERM mysqld

6.用新密码登陆

其它方法二

直接用十六进制编辑器编辑user.MYD文件

不过这个里面我要说明一点,我这里编辑的时候发现个问题,加密的密码串有些是连续存储的,有些的两位被切开了,后两位存储在后面其他地方.这一点我还

没想明白.还有注意一点就是编辑的是加密过的密码串,也就是说你还是需要另外有user表文件。这种方法和我上面介绍的方法的区别在于,这种方法直接编

辑linux下的user表文件,就不需要重新改文件属主和权限了

修正一下:我在Windows下的实际作如下

1.关闭正在运行的MySQL。

2.打开DOS窗口,转到mysqlbin目录。

3.输入

mysqld-nt --skip-grant-tables

回车。如果没有出现提示信息,那就对了。

4.再开一个DOS窗口(因为刚才那个DOS窗口已经不能动了),转到mysqlbin目录。

5.输入mysql回车,如果成功,将出现MySQL提示符 >

6. 连接权限数据库

(>是本来就有的提示符,别忘了的分号)

6.改密码:

> update user set password=password("123456") where user="root"; (别忘了的分号)

7.刷新权限(必须的步骤)

>flush privileges;

8.退出

> q

9.注销系统,再进入,开MySQL,使用用户名root和刚才设置的新密码123456登陆。

据说可以用直接修改user表文件的方法:

关闭MySQL,Windows下打开Mysqldatamysql,有三个文件user.frm,user.MYD,user.MYI找个知道密码的MySQL,替换相应的这三个文件,如果user表结构没改过,一般也没人去改,替换user.MYD就可以了。

也可以直接编辑user.MYD,找个十六进制编辑器,UltraEdit就有这个功能。关闭MySQL,打开user.MYD。将用户名root后面的

八个字符改为5654d704013245,新密码就是123456。或者将它们对应的十六进制数字,(左边那里,一个字符对应两个数字),改为

00 02 02 02 02 02 02

02,这就是空密码,在编辑器右边看到的都是星号,看起来很象小数点。重开MySQL,输入root和你的新密码

1,mysql 忘记root密码

mysql忘记root密码该怎么办当忘记MySQL的root密码的时候,可以进行如下的步骤重新设置MySQL的root密码:

1.首先确认出于安全的状态,也就是没有人能够任意地连接MySQL数据库。

因为在重新设置MySQL的root密码的期间,MySQL数据库完全出于没有密码保护的

状态下,其他的用户也可以任意地登录和修改MySQL的信息。可以采用将MySQL对

外的端口封闭,并且停止Apache以及所有的用户进程的方法实现的准安全

状态。安全的状态是到的Console上面作,并且拔掉网线。

2.修改MySQL的登录设置:

# vi 在[mysqld]的段中加上一句:skip-grant-tables

[mysqld]

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

skip-name-resolve

skip-grant-tables

保存并且退出vi。

3.重新启动mysqld

# /etc/init.d/mysqld restart

Stopping MySQL: [ OK ]

Starting MySQL: [ OK ]

4.登录并修改MySQL的root密码

# /usr/bin/mysql

Welcome to the MySQL monitor. Commands end with ; or g.

Your MySQL connection id is 3 to server version: 3.23.56

Type ‘;’ or ‘h’ for . Type ‘c’ to clear the buffer.

mysql> USE mysql ;

Reading table rmation for completion of table and column names

You can turn off this feature to get a quicker startup with -A

Database changed

mysql> UPDATE user SET Password = password ( ‘new-password’ ) WHERE User = ‘root’ ;

Query OK, 0 rows affected (0.00 sec)

Rows matched: 2 Changed: 0 Warnings: 0

mysql> flush privileges ;

Query OK, 0 rows affected (0.01 sec)

mysql> quit

Bye

5.将MySQL的登录设置修改回来

# vi 将刚才在[mysqld]的段中加上的skip-grant-tables删除

保存并且退出vi。

6.重新启动mysqld

# /etc/init.d/mysqld restart

Stopping MySQL: [ OK ]

Starting MySQL: [ OK ]

windows

1.以系统身份登陆系统。

2.打开cmd—–net start 查看mysql是否启动。启动的话就停止net stop mysql.

3.我的mysql安装在d:usrlocalmysql4bin下。

4.跳过权限检查启动mysql.

d:usrlocalmysql4binmysqld-nt –skip-grant-tables

d:usrlocalmysql4binmysqladmin -oot -p shutdown 这句提示你重新输密码。

6.在cmd里net start mysql

2,MySQL4.1以上版本一种密码错误问题的解决方法

1 # SET PASSWORD FOR ’some_user’@’some_host’ = OLD_PASSWORD(‘newpwd’);

2 # FLUSH PRIVILEGES;

3,Mysql数据库修复

myisamchk -r -q d:mysqldatalatin1

r代表修复

q代表快速

d:mysqldatalatin1数据库里面 代表里面的所有的文件

MYSQL里面如何查询两个日期的,也就是相的天数

(2)由于FULLTEXT对中文支持不是很好,在没有插件的情况下,不要使用。其实,一些小的博客应用,只需要在数据采集时,为其建立关键字列表,通过关键字索引,也是一个不错的方法,至少愚安我是经常这么做的。

mysql常用的日期加减函数与实例教程

DBCP连接池

MySQL 日期类型

MySQL 日期类型:日期格式、所占存储空间、日期范围 比较。

日期类型 存储空间 日期格式 日期范围

------------ --------- --------------------- -----------------------------------------

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

在 MySQL 中创建表时,对照上面的表格,很容易就能选择到合适自己的数据类型。不过到底是选择 datetime 还是 timestamp,可能会有点犯难。这两个日期时间类型各有优点:datetime 的日期范围比较大;timestamp 所占存储空间比较小,只是 datetime 的一半。

另外,timestamp 类型的列还有个特性:默认情况下,在 insert, update 数据时,timestamp 列会自动以当前时间(CURRENT_TIMESP)填充/更新。“自动”的意思就是,你不去管它,MySQL 会替你去处理。

一般情况下,我倾向于使用 datetime 日期类型。

时间类型 存储空间 时间格式 时间范围

------------ --------- --------------------- -----------------------------------------

time 3 bytes HH:MM:SS -838:59:59 ~ 838:59:59

time 时间范围居然有这么大的范围,特别是 time 可以取负值,有点奇怪。后来,看了 MySQL 手册才知道这是为了满足两个日期时间相减才这样设计的。

select timediff('2000:01:31 23:59:59', '2000:01:01 00:00:00'); -- 743:59:59

select timediff('2000:01:01 00:00:00', '2000:01:31 23:59:59'); -- -743:59:59

select timediff('23:59:59', '12:00:00'); -- 11:59:59

注意,timediff 的两个参数只能是 datetime/timestamp, time 类型的,并且这两个参数类型要相同。即:datetime/timestamp 和 datetime/timestamp 比较;time 和 time 相比较。

虽然 MySQL 中的日期时间类型比较丰富,但遗憾的是,目前(2008-08-08)这些日期时间类型只能支持到秒级别,不支持毫秒、微秒。也没有产生毫秒的函数。

《MySQL:MySQL日期数据类型、MySQL时间类型使用总结》适用于 MySQL 5.X 及以上版本。

一、MySQL 获得当前日期时间 函数

1.1 获得当前日期+时间(date + time)函数:now()

mysql> select now();

+---------------------+

| now() |

+---------------------+

| 2008-08-08 22:20:46 |

+---------------------+

除了 now() 函数能获得当前的日期时间外,MySQL 中还有下面的函数:

current_timestamp()

,current_timestamp

,localtime()

,localtime

,localtimestamp -- (v4.0.6)

,localtimestamp() -- (v4.0.6)

这些日期时间函数,都等同于 now()。鉴于 now() 函数简短易记,建议总是使用 now() 来替代上面列出的函数。

1.2 获得当前日期+时间(date + time)函数:sysdate()

sysdate() 日期时间函数跟 now() 类似,不同之处在于:now() 在执行开始时值就得到了, sysdate() 在函数执行时动态得到值。看下面的例子就明白了:

mysql> select now(), sleep(3), now();

+---------------------+----------+---------------------+

| now() | sleep(3) | now() |

+---------------------+----------+---------------------+

| 2008-08-08 22:28:21 | 0 | 2008-08-08 22:28:21 |

+---------------------+----------+---------------------+

mysql> select sysdate(), sleep(3), sysdate();

+---------------------+----------+---------------------+

| sysdate() | sleep(3) | sysdate() |

+---------------------+----------+---------------------+

| 2008-08-08 22:28:41 | 0 | 2008-08-08 22:28:44 |

+---------------------+----------+---------------------+

可以看到,虽然中途 sleep 3 秒,但 now() 函数两次的时间值是相同的; sysdate() 函数两次得到的时间值相 3 秒。MySQL Manual 中是这样描述 sysdate() 的:Return the time at which the function executes。

sysdate() 日期时间函数,一般情况下很少用到。

mysql> select curdate();

+------------+

| curdate() |

+------------+

| 2008-08-08 |

+------------+

其中,下面的两个日期函数等同于 curdate():

current_date()

,current_date

3. 获得当前时间(time)函数:curtime()

mysql> select curtime();

+-----------+

| curtime() |

+-----------+

| 22:41:30 |

+-----------+

其中,下面的两个时间函数等同于 curtime():

current_time()

,current_time

4. 获得当前 UTC 日期时间函数:utc_date(), utc_time(), utc_timestamp()

mysql> select utc_timestamp(), utc_date(), utc_time(), now()

+---------------------+------------+------------+---------------------+

| utc_timestamp() | utc_date() | utc_time() | now() |

+---------------------+------------+------------+---------------------+

| 2008-08-08 14:47:11 | 2008-08-08 | 14:47:11 | 2008-08-08 22:47:11 |

+---------------------+------------+------------+---------------------+

因为我国位于东八时区,所以本地时间 = UTC 时间 + 8 小时。UTC 时间在业务涉及多个和地区的时候,非常有用。

二、MySQL 日期时间 Extract(选取) 函数。

1. 选取日期时间的各个部分:日期、时间、年、季度、月、日、小时、分钟、秒、微秒

set @dt = '2008-09-10 07:15:30.123456';

select date(@dt); -- 2008-09-10

select time(@dt); -- 07:15:30.123456

select year(@dt); -- 2008

select month(@dt); -- 9

select week(@dt); -- 36

select day(@dt); -- 10

select hour(@dt); -- 7

select minute(@dt); -- 15

select second(@dt); -- 30

select microsecond(@dt); -- 123456

2. MySQL Extract() 函数,可以上面实现类似的功能:

set @dt = '2008-09-10 07:15:30.123456';

select extract(year from @dt); -- 2008

select extract(quarter from @dt); -- 3

select extract(month from @dt); -- 9

select extract(week from @dt); -- 36

select extract(day from @dt); -- 10

select extract(hour from @dt); -- 7

select extract(minute from @dt); -- 15

select extract(second from @dt); -- 30

select extract(microsecond from @dt); -- 123456

select extract(year_month from @dt); -- 200809

select extract(day_hour from @dt); -- 1007

select extract(day_minute from @dt); -- 100715

select extract(day_second from @dt); -- 10071530

select extract(day_microsecond from @dt); -- 10071530123456

select extract(hour_minute from @dt); -- 715

select extract(hour_second from @dt); -- 71530

select extract(hour_microsecond from @dt); -- 71530123456

select extract(minute_second from @dt); -- 1530

select extract(minute_microsecond from @dt); -- 1530123456

select extract(second_microsecond from @dt); -- 30123456

MySQL Extract() 函数除了没有date(),time() 的功能外,其他功能一应具全。并且还具有选取‘day_microsecond’ 等功能。注意这里不是只选取 day 和 microsecond,而是从日期的 day 部分一直选取到 microsecond 部分。够强悍的吧!

MySQL Extract() 函数不好的地方在于:你需要多敲几次键盘。

3. MySQL dayof... 函数:dayofweek(), dayofmonth(), dayofyear()

分别返回日期参数,在一周、一月、一年中的位置。

set @dt = '2008-08-08';

select dayofweek(@dt); -- 6

select dayofmonth(@dt); -- 8

select dayofyear(@dt); -- 221

日期 '2008-08-08' 是一周中的第 6 天(1 = Sunday, 2 = Monday, ..., 7 = Saturday);一月中的第 8 天;一年中的第 221 天。

4. MySQL week... 函数:week(), weekofyear(), dayofweek(), weekday(), yearweek()

set @dt = '2008-08-08';

select week(@dt); -- 31

select week(@dt,3); -- 32

select weekofyear(@dt); -- 32

select dayofweek(@dt); -- 6

select weekday(@dt); -- 4

select yearweek(@dt); -- 200831

MySQL week() 函数,可以有两个参数,具体可看手册。 weekofyear() 和 week() 一样,都是计算“某天”是位于一年中的第几周。 weekofyear(@dt) 等价于 week(@dt,3)。

MySQL weekday() 函数和 dayofweek() 类似,都是返回“某天”在一周中的位置。不同点在于参考的标准, weekday:(0 = Monday, 1 = Tuesday, ..., 6 = Sunday); dayofweek:(1 = Sunday, 2 = Monday, ..., 7 = Saturday)

MySQL yearweek() 函数,返回 year(2008) + week 位置(31)。

5. MySQL 返回星期和月份名称函数:dayname(), monthname()

set @dt = '2008-08-08';

select dayname(@dt); -- Friday

select monthname(@dt); -- August

思考,如何返回中文的名称呢?

6. MySQL last_day() 函数:返回月份中的一天。

select last_day('2008-02-01'); -- 2008-02-29

select last_day('2008-08-08'); -- 2008-08-31

MySQL last_day() 函数非常有用,比如我想得到当前月份中有多少天,可以这样来计算:

mysql> select now(), day(last_day(now())) as days;

| now() | days |

| 2008-08-09 11:45:45 | 31 |

怎么学习MYSQL

5.重新打开cmd。进到d:usrlocalmysql4bin下:

自己先装个Mysql,然后再看书,入门可以先看《Mysql必知必会》。

7.搞定了。

其他的好书有:

高性能MySQL

MySQL核心技术手册

深入理解MySQL核心技术

MySQL核心内幕

MySQL开发者SQL权威指南

MySQL技术内幕 InnoDB存储引擎

深入理解MySQL

MySQL权威指南

如何修改mysql数据库中的用户名和密码

不过别忘了使用PASSWORD函数。 方法二 使用mysqladmin,这是前面声明的一个特例。

mysqladmin -oot -p password mypasswd

输入这个命令后,需要输入root的原密码,然后root的密码将改为mypasswd。

把命令里的root改为你的用户名,你就可以改你自己的密码了。

当然如果你的mysqladmin连接不上mysql server,或者你没有办法执行mysqladmin,

那么这种方法就是无效的。

而且mysqladmin无法把密码清空。

下面的方法都在mysql提示符下使用,且必须有mysql的root权限:

方法三 mysql> INSERT INTO mysql.user (Host,User,Password)

VALUES('%','jeffrey',PASSWORD('biscuit'));

mysql> FLUSH PRIVILEGES

确切地说这是在增加一个用户,用户名为jeffrey,密码为biscuit。

在《mysql中文参考手册》里有这个例子,所以我也就写出来了。

mysql>d:usrlocalmysql4binmysqladmin -uroot flush-privileges password “newpassword” REPLACE INTO mysql.user (Host,User,Password)

VALUES('%','jeffrey',PASSWORD('biscuit'));

mysql> FLUSH PRIVILEGES 方法五 使用SET PASSWORD语句,

mysql> SET PASSWORD FOR jeffrey@"%" = PASSWORD('biscuit');

你也必须使用PASSWORD()函数,

但是不需要使用FLUSH PRIVILEGES。 方法六 使用GRANT ... IDENTIFIED BY语句

mysql> GRANT USAGE ON . TO jeffrey@"%" IDENTIFIEDPOI-apache BY 'biscuit';

这里PASSWORD()函数是不必要的,也不需要使用FLUSH PRIVILEGES。

ja 中文API谁有,百度云分享一下

Android中文版

Ant版

ASM字节码作

Axis2版

Bash脚本

Bootstrap 3

Bootstrap 4

C/C++

C3P0连接池

CentOS使用文档

Commons-Beanutils

Commons-Fileupload

Commons-IOMySQL性能调优与架构设计版

Commons-Lang版

Commons-Net版

CSS 3

Dom4j

dubbo中文文档

EhCache

Freemarker

Go语言

Hadoop

Hibernate中文版

IK2. 获得当前日期(date)函数:curdate()Analyzer中文版

Ja 10

Ja 6

Ja 7

Ja 8中文版

jqGrid中文版

Jquery中文版

Json-lib

Junit4版

Kryo

Log4j版

Lucene

Men

Windows MFC中文版

Mybatis

MySql中文版

Netty 3.6

Nginx中文版

OpenJPA版

PHP中文版

Quick

redis中文参考文档

Ruby

Ruby-library

Ruby on Rails

Shiro

Spring版

Spring for Android

Spring Boot

Spring Cloud中文文档

Spring Security

Spring中文版

Struts 2版

Taperstry

Tomcat

Ubuntu

Velocity 1.7

VelocityTools2.0

Vue Router中文参考

vue.js中文文档

XMLBeans

Yahoo UI中文版

Zend Framework中文版

Zookeeper

phpmyadmin有什么用

MySQL 时间类型:时间格式、所占存储空间、时间范围。

phpMyAdmin 是一个以PHP为基础,以Web-Base方式架构在网站主机上的MySQL的资料库管理工具 。

berkeleydb(dbd)表是支持事务处理的表,由sleepycat软件公司开发。它提供mysql用户期待已久的功能-事务控制。事务控制在任何数据库系统中都是一个极有价值的功能,因为它们确保一组命令能成功地执行。

可以管理整个MySQL(需要超级用户),也可以管理单个数据库。为了实现后一种,你将需要合理设置MySQL用户,他只能对允许的数据库进行读/写。那要等到你看过MySQL手册中相关的部分。

phpmyadmin有什么用?

phpmyadmin作用特点

PHP是一个基于服务端来创建站的脚本语言,您可以用PHP和HTML生成网站主页。当一个访问者打开主页时,服务端便执行PHP的命令并将执行结果发送至访问者的浏览器中,这类似于ASP和CoildFusion,然而PHP和他们不同之处在于PHP开放源码和跨越平台,PHP可以运行在WINDOWS和多种版本的LINUX上。

它不需要任何预先处理而快速反馈结果,它也不需要mod_perl的调整来使您的的内存映象减小。PHP消耗的资源较少,当PHP作为ApacheWeb一部分时,运行代码不需要调用外部二进制程序,不需要承担任何额外的负担。

除了能够作您的页面外,PHP还能发送HIIP的标题。您可以设置cookie,管理数字签名和重定向用户,而且它提供了极好的连通性到其它数据库(还有ODBC),集成各种外部库来做用PDF文档解析XML的任何事情。

phpMyAdmin 是一个用PHP编写的软件工具,可以通过web方式控制和作MySQL数据库。通过phpMyAdmin 可以完全对数据库进行作,例如建立、和删除数据等等。如果使用合适的工具,MySQL数据库的管理就会变得相当简单。应用 MySQL 命令行方式需要对 MySQL 知识非常熟悉,对SQL语言也是同样的道理。不仅如此,如果数据库的访问量很大,列表中数据的读取就会相当困难。

当前出现很多GUI MySQL客户程序,其中为出色的是基于 Web 的phpMyAdmin 工具。这是一种 MySQL数据库前台的基于PHP的工具。

PhpMyAdmin 的缺点是必须安装在 Web 中,所以如果没有合适的访问权限,其它用户有可能损害到 SQL 数据。

mysql中的设置varchar长度问题...

shell>mysqld_safe --skip-grant-tables &

mysql varchar(50) 不管中文 还是英文 都是存50个的

MySQL5的文档,其中对varchar字段类型这样描述:varchar(m) 变长字符串。M 表示列长度。M的范围是0到65,535。(VARCHAR的实际长度由长的行的大小和使用的字符集确定,有效长度是65,532字节)。

为何会这般变换?真是感觉MySQL的手册做的太不友好了,因为你要仔细的继续往下读才会发现这段描述:MySQL 5.1遵从标准SQL规范,并且不删除VARCHAR值的尾部空格。VARCHAR保存时用一个字节或两个字节长的前缀+数据。如果VARCHAR列声明的长度大于255,长度前缀是两个字节。

好了,貌似懂了一点。但具体他说的长度大于255时使用2个字节长度前缀,小学减法题:65535 - 2 = 65533啊。不知道这些大牛如何计算的,暂且保留疑问吧?

注:我测试了一下使用UTF8编码,varchar的长度为21854字节。select quarter(@dt); -- 3

在mysql 5.0.45版本,数据库编码utf8下进行测试:varchar长定义为21785。也就是说不论字母、数字、汉字,只能放21785个。

推想:varchar字节65535,utf8编码一个字符3个字节65535/3=21785。