王新阳

wangxinyang

DOS下重启、暂停MYSQL、MSSQL SERVER语句

net stop mysql
net start mysql

mysql也可能是带版本号的服务名,比如mysql5.7版本为:
net stop mysql57
net start mysql57

net start mssqlserver
net stop mssqlserver

Incorrect string value: '\xF0\x9F\x98\xAD",...' for column...的解决方法

最近在微信开发时遇到以下错误:
Incorrect string value: '\xF0\x9F\x90\xB3 \xE4...' for column 'nickname' at row 69302

原因:用户昵称中有emoji表情,而emoji表情为4字节utf-8字符,mysql只支持不超过3字节的utf-8字符,所以写入失败。

4字节utf-8字符包括Emoji表情(Emoji 是一种特殊的 Unicode 编码,常见于 iOS 和 Android 手机上),和一些不常用的汉字,以及任何新增的 Unicode 字符等等。

MySQL 版本>=5.5.3支持utf8mb4编码,使用这个编码可以支持4字节utf-8字符。
MySQL低于5.5.3版本,可以过滤掉4字节字符,或采用base64_encode进行编码后保存,输出时再base64_decode解码。

/**
 * 过滤掉emoji表情(4字节utf8编码字符)
 */
function filter_emoji($str){
  return preg_replace_callback('/./u', 
    function(array $match){return strlen($match[0]) >= 4 ? '' : $match[0];}, 
    $str);
}

参考:
http://blog.csdn.net/yan791124465/article/details/70738939
http://blog.csdn.net/hzw19920329/article/details/55670782
http://blog.csdn.net/secretx/article/details/21253559

MySQL运算符优先级

常常发现很多基础的知识才是最重要的,是我们修复Bug的利器。

#MySQL运算符的优先级

运算符的优先级决定了不同的运算符在表达式中计算的先后顺序。

MySQL中所有运算符的优先级的顺序按照从高到低,从上到下,依次降低。一般情况下,级别高的运算符先进行计算,如果级别相同,MySQL按照表达式的顺序从左到右依次计算。

MySQL运算符的优先级如下:

优先级 运算符
(最高)  !
 3     -(负号),~(按位取反)
 4     ^(按位异或)
 5     *,/(DIV),%(MOD)
 6     +,-
 7     >>,<<
 8     &
 9     |
10     =(比较运算),<=>,<,<=,>,>=,!=,<>,IN,IS NULL,LIKE,REGEXP
11    BETWEEN AND,CASE,WHEN,THEN,ELSE
12    NOT
13    &&,AND
14    XOR
15    ||,OR
(最低)    =(赋值运算),:=

我们可以看出,不同运算符的优先级是不同的。在无法确定优先级的情况下,可以使用圆括号()来改变优先级,并且这样会使计算过程更加清晰。

mysql UNIX时间戳与日期的相互转换

UNIX时间戳转换为日期用函数: FROM_UNIXTIME()
select FROM_UNIXTIME(1156219870);

日期转换为UNIX时间戳用函数: UNIX_TIMESTAMP()
Select UNIX_TIMESTAMP('2006-11-04 12:23:00');

例:mysql查询当天的记录数:
$sql="select * from message Where DATE_FORMAT(FROM_UNIXTIME(chattime),'%Y-%m-%d') = DATE_FORMAT(NOW(),'%Y-%m-%d') order by id desc";

MySQL 1153、2006错误 MySQL server has gone away

MySQL导入数据时出现以下错误:

Error Code: 1153 - Got a packet bigger than 'max_allowed_packet' bytes

Error Code: 2006 - MySQL server has gone away

解决方法:

找到MySQL安装目录下的my.ini

在 [mysqld] 下增加一行max_allowed_packet=16M 数值按需求更改

然后重启MySQL服务

开始 》 运行 net stop mysql net start mysql

MySQL show的基本用法

SHOW DATABASES︰列出 MySQL Server上的数据库。

SHOW TABLES [FROM db_name]︰列出数据库中的表。

SHOW TABLE STATUS [FROM db_name]︰列出数据库的表信息,比较详细。

SHOW COLUMNS FROM tbl_name [FROM db_name]︰列出表的列信息,同 SHOW FIELDS FROM tbl_name [FROM db_name],DESCRIBE tbl_name [col_name]。

SHOW FULL COLUMNS FROM tbl_name [FROM db_name]︰列出表的列信息,比较详细,同 SHOW FULL FIELDS FROM tbl_name [FROM db_name]。

SHOW INDEX FROM tbl_name [FROM db_name]︰列出表的索引信息。

SHOW STATUS︰列出 Server 的状态信息。

SHOW VARIABLES︰列出 MySQL 系統参数值

SHOW PROCESSLIST︰查看当前mysql查询进程

SHOW GRANTS FOR user︰列出用户的授权命令

MySQL比like语句更高效的写法

locate(substr, str) 区分大小写

instr( string1, string2 [, start_position [, nth_appearance ] ] )
instr(源字符串, 目标字符串, 起始位置, 匹配序号)


以下网络转载,尚未验证

LIKE语句

SELECT `column` FROM `table` where `condition` like `%keyword%'

事实上,可以使用 locate(position) 和 instr 这两个函数来代替

一、LOCATE语句
SELECT `column` from `table` where locate('keyword', `condition`)>0

二、或是 locate 的別名 position
POSITION语句
SELECT `column` from `table` where position('keyword' IN `condition`)

三、INSTR语句
SELECT `column` from `table` where instr(`condition`, 'keyword' )>0

locate、position 和 instr 的差別只是参数的位置不同,同时locate 多一个起始位置的参数外,两者是一样的。
mysql> SELECT LOCATE('bar', 'foobarbar',5);

速度上这三个比用 like 稍快了一点。

四、还要给大家介绍一个新成员,那就是find_in_set

find_in_set(str1,str2) 函数:返回str2中str1所在的位置索引,其中str2必须以","分割开。
FIND_IN_SET语句
mysql> select * from test where find_in_set('name1',name); 

五、当然,还有mysql的全文索引

全文索引:http://dev.mysql.com/doc/refman/5.6/en/fulltext-search.html

MySQL运算符优先级

MySQL运算符优先级从高到低:
INTERVAL
BINARY, COLLATE
!
- (unary minus), ~ (unary bit inversion)
^
*, /, DIV, %, MOD
-, +
<<, >>
&
|
=, <=>, >=, >, <=, <, <>, !=, IS, LIKE, REGEXP, IN
BETWEEN, CASE, WHEN, THEN, ELSE
NOT
&&, AND
XOR
||, OR
:=

ACCESS/MySQL/MSSQL 数据类型

Microsoft Access、MySQL 以及 SQL Server 所使用的数据类型和范围。

Microsoft Access 数据类型

数据类型描述存储
Text用于文本或文本与数字的组合。最多 255 个字符。 
Memo

Memo 用于更大数量的文本。最多存储 65,536 个字符。

注释:无法对 memo 字段进行排序。不过它们是可搜索的。

 
Byte允许 0 到 255 的数字。1 字节
Integer允许介于 -32,768 到 32,767 之间的数字。2 字节
Long允许介于 -2,147,483,648 与 2,147,483,647 之间的全部数字4 字节
Single单精度浮点。处理大多数小数。4 字节
Double双精度浮点。处理大多数小数。8 字节
Currency

用于货币。支持 15 位的元,外加 4 位小数。

提示:您可以选择使用哪个国家的货币。

8 字节
AutoNumberAutoNumber 字段自动为每条记录分配数字,通常从 1 开始。4 字节
Date/Time用于日期和时间8 字节
Yes/No

逻辑字段,可以显示为 Yes/No、True/False 或 On/Off。

在代码中,使用常量 True 和 False (等价于 1 和 0)

注释:Yes/No 字段中不允许 Null 值

1 比特
Ole Object可以存储图片、音频、视频或其他 BLOBs (Binary Large OBjects)最多 1GB
Hyperlink包含指向其他文件的链接,包括网页。 
Lookup Wizard允许你创建一个可从下列列表中进行选择的选项列表。4 字节

MySQL 数据类型

在 MySQL 中,有三种主要的类型:文本、数字和日期/时间类型。

Text 类型:

数据类型描述
CHAR(size)保存固定长度的字符串(可包含字母、数字以及特殊字符)。在括号中指定字符串的长度。最多 255 个字符。
VARCHAR(size)

保存可变长度的字符串(可包含字母、数字以及特殊字符)。在括号中指定字符串的最大长度。最多 255 个字符。

注释:如果值的长度大于 255,则被转换为 TEXT 类型。

TINYTEXT存放最大长度为 255 个字符的字符串。
TEXT存放最大长度为 65,535 个字符的字符串。
BLOB用于 BLOBs (Binary Large OBjects)。存放最多 65,535 字节的数据。
MEDIUMTEXT存放最大长度为 16,777,215 个字符的字符串。
MEDIUMBLOB用于 BLOBs (Binary Large OBjects)。存放最多 16,777,215 字节的数据。
LONGTEXT存放最大长度为 4,294,967,295 个字符的字符串。
LONGBLOB用于 BLOBs (Binary Large OBjects)。存放最多 4,294,967,295 字节的数据。
ENUM(x,y,z,etc.)

允许你输入可能值的列表。可以在 ENUM 列表中列出最大 65535 个值。如果列表中不存在插入的值,则插入空值。

注释:这些值是按照你输入的顺序存储的。

可以按照此格式输入可能的值:ENUM('X','Y','Z')

SET与 ENUM 类似,SET 最多只能包含 64 个列表项,不过 SET 可存储一个以上的值。

Number 类型:

数据类型描述
TINYINT(size)-128 到 127 常规。0 到 255 无符号*。在括号中规定最大位数。
SMALLINT(size)-32768 到 32767 常规。0 到 65535 无符号*。在括号中规定最大位数。
MEDIUMINT(size)-8388608 到 8388607 普通。0 to 16777215 无符号*。在括号中规定最大位数。
INT(size)-2147483648 到 2147483647 常规。0 到 4294967295 无符号*。在括号中规定最大位数。
BIGINT(size)-9223372036854775808 到 9223372036854775807 常规。0 到 18446744073709551615 无符号*。在括号中规定最大位数。
FLOAT(size,d)带有浮动小数点的小数字。在括号中规定最大位数。在 d 参数中规定小数点右侧的最大位数。
DOUBLE(size,d)带有浮动小数点的大数字。在括号中规定最大位数。在 d 参数中规定小数点右侧的最大位数。
DECIMAL(size,d)作为字符串存储的 DOUBLE 类型,允许固定的小数点。

* 这些整数类型拥有额外的选项 UNSIGNED。通常,整数可以是负数或正数。如果添加 UNSIGNED 属性,那么范围将从 0 开始,而不是某个负数。

Date 类型:

数据类型描述
DATE()

日期。格式:YYYY-MM-DD

注释:支持的范围是从 '1000-01-01' 到 '9999-12-31'

DATETIME()

*日期和时间的组合。格式:YYYY-MM-DD HH:MM:SS

注释:支持的范围是从 '1000-01-01 00:00:00' 到 '9999-12-31 23:59:59'

TIMESTAMP()

*时间戳。TIMESTAMP 值使用 Unix 纪元('1970-01-01 00:00:00' UTC) 至今的描述来存储。格式:YYYY-MM-DD HH:MM:SS

注释:支持的范围是从 '1970-01-01 00:00:01' UTC 到 '2038-01-09 03:14:07' UTC

TIME()时间。格式:HH:MM:SS 注释:支持的范围是从 '-838:59:59' 到 '838:59:59'
YEAR()

2 位或 4 位格式的年。

注释:4 位格式所允许的值:1901 到 2155。2 位格式所允许的值:70 到 69,表示从 1970 到 2069。

* 即便 DATETIME 和 TIMESTAMP 返回相同的格式,它们的工作方式很不同。在 INSERT 或 UPDATE 查询中,TIMESTAMP 自动把自身设置为当前的日期和时间。TIMESTAMP 也接受不同的格式,比如 YYYYMMDDHHMMSS、YYMMDDHHMMSS、YYYYMMDD 或 YYMMDD。

SQL Server 数据类型

Character 字符串:

数据类型描述存储
char(n)固定长度的字符串。最多 8,000 个字符。n
varchar(n)可变长度的字符串。最多 8,000 个字符。 
varchar(max)可变长度的字符串。最多 1,073,741,824 个字符。 
text可变长度的字符串。最多 2GB 字符数据。 

Unicode 字符串:

数据类型描述存储
nchar(n)固定长度的 Unicode 数据。最多 4,000 个字符。 
nvarchar(n)可变长度的 Unicode 数据。最多 4,000 个字符。 
nvarchar(max)可变长度的 Unicode 数据。最多 536,870,912 个字符。 
ntext可变长度的 Unicode 数据。最多 2GB 字符数据。 

Binary 类型:

数据类型描述存储
bit允许 0、1 或 NULL 
binary(n)固定长度的二进制数据。最多 8,000 字节。 
varbinary(n)可变长度的二进制数据。最多 8,000 字节。 
varbinary(max)可变长度的二进制数据。最多 2GB 字节。 
image可变长度的二进制数据。最多 2GB。 

Number 类型:

数据类型描述存储
tinyint允许从 0 到 255 的所有数字。1 字节
smallint允许从 -32,768 到 32,767 的所有数字。2 字节
int允许从 -2,147,483,648 到 2,147,483,647 的所有数字。4 字节
bigint允许介于 -9,223,372,036,854,775,808 和 9,223,372,036,854,775,807 之间的所有数字。8 字节
decimal(p,s)

固定精度和比例的数字。允许从 -10^38 +1 到 10^38 -1 之间的数字。

p 参数指示可以存储的最大位数(小数点左侧和右侧)。p 必须是 1 到 38 之间的值。默认是 18。

s 参数指示小数点右侧存储的最大位数。s 必须是 0 到 p 之间的值。默认是 0。

5-17 字节
numeric(p,s)

固定精度和比例的数字。允许从 -10^38 +1 到 10^38 -1 之间的数字。

p 参数指示可以存储的最大位数(小数点左侧和右侧)。p 必须是 1 到 38 之间的值。默认是 18。

s 参数指示小数点右侧存储的最大位数。s 必须是 0 到 p 之间的值。默认是 0。

5-17 字节
smallmoney介于 -214,748.3648 和 214,748.3647 之间的货币数据。4 字节
money介于 -922,337,203,685,477.5808 和 922,337,203,685,477.5807 之间的货币数据。8 字节
float(n)从 -1.79E + 308 到 1.79E + 308 的浮动精度数字数据。 参数 n 指示该字段保存 4 字节还是 8 字节。float(24) 保存 4 字节,而 float(53) 保存 8 字节。n 的默认值是 53。4 或 8 字节
real从 -3.40E + 38 到 3.40E + 38 的浮动精度数字数据。4 字节

Date 类型:

数据类型描述存储
datetime从 1753 年 1 月 1 日 到 9999 年 12 月 31 日,精度为 3.33 毫秒。8 bytes
datetime2从 1753 年 1 月 1 日 到 9999 年 12 月 31 日,精度为 100 纳秒。6-8 bytes
smalldatetime从 1900 年 1 月 1 日 到 2079 年 6 月 6 日,精度为 1 分钟。4 bytes
date仅存储日期。从 0001 年 1 月 1 日 到 9999 年 12 月 31 日。3 bytes
time仅存储时间。精度为 100 纳秒。3-5 bytes
datetimeoffset与 datetime2 相同,外加时区偏移。8-10 bytes
timestamp存储唯一的数字,每当创建或修改某行时,该数字会更新。timestamp 基于内部时钟,不对应真实时间。每个表只能有一个 timestamp 变量。 

其他数据类型:

数据类型描述
sql_variant存储最多 8,000 字节不同数据类型的数据,除了 text、ntext 以及 timestamp。
uniqueidentifier存储全局标识符 (GUID)。
xml存储 XML 格式化数据。最多 2GB。
cursor存储对用于数据库操作的指针的引用。
table存储结果集,供稍后处理。

MySQL查看表信息

MYSQL表信息的查看方法是我们经常要实现的功能,下面就为您介绍显示MYSQL表信息的方法,如果您对MYSQL表信息方面感兴趣的话,不妨一看。

在用mysql时(show tables),有时候需要查看表和字段的相关信息(表与某字段是否存在等.)~~而PHP提供了这样的相关函数,如:mysql_list_dbs(),mysql_list_fields(),但mysql_list_fields()

函数等已过时,所以要用show...这个SQL指令来查寻。

SHOW 指令('[..]'里的可选)

#显示mysql中所有数据库的名称

show databases;

#显示mysql中的相关表

show tables [ from db_name]

#查看存储过程状态

show procedure status

#显示表中列名称

show columns from table_name [ from database_name ] ; 或show columns from

database_name.table_name;

#显示一个用户的权限,显示结果类似于grant 命令

show grants for user_name;

#显示表的索引

show index from table_name

#显示一些系统特定资源的信息,例如,正在运行的线程数量

show status [from db_name]

#显示系统变量的名称和值

show [ global] variables

#显示系统中正在运行的所有进程,也就是当前正在执行的查询大多数用户可以查看他们自己的进程,但是如果他们拥有process权限,就可以查看所有人的进程,包括密码

show processlist

#显示当前使用或者指定的database中的每个表的信息信息包括表类型和表的最新更新时间

show table status

#显示服务器所支持的不同权限

show privileges

#显示create database 语句是否能够创建指定的数据库

show create database database_name

#显示create database 语句是否能够创建指定的数据库

show create table table_name

#显示安装以后可用的存储引擎和默认引擎

show engies

#显示innoDB存储引擎的状态

show innodb status

#显示BDB存储引擎的日志

show logs -----这个已经被遗弃了

#显示最后一个执行的语句所产生的错误、警告和通知

show warnings

#只显示最后一个执行语句所产生的错误

show errors

#显示安装后的可用存储引擎和默认引擎

show [storage] engines;

============================================================

mysqlshow,该指令只参显示数据库、表、列的信息

例如:mysqlshow -uroot -pXXXX mysql #显示mysql数据库的信息

例如:mysqlshow -uroot -pXXXX mysql user #显示mysql数据库中user表的信息

例如:mysqlshow -uroot -pXXXX mysql user user

#显示mysql数据库中user表中的user列的信息

2025-04-04 星期五 农历三月初七