Heim  >  Artikel  >  Datenbank  >  Was ist der Unterschied zwischen MySQL und SQL Server?

Was ist der Unterschied zwischen MySQL und SQL Server?

青灯夜游
青灯夜游Original
2020-12-16 12:10:026745Durchsuche

Unterschiede: 1. MySQL unterstützt Enum- und Set-Typen, der SQL-Server jedoch nicht. 2. Die Inkrementanweisung von MySQL lautet „AUTO_INCREMENT“, während der SQL-Server „identity(1,1)“ ist Unterstützen Sie die Limit-Anweisung.

Was ist der Unterschied zwischen MySQL und SQL Server?

(Empfohlenes Tutorial: MySQL-Video-Tutorial)

Unterschied 1

MySQL unterstützt Enum- und Set-Typen, SQL Server unterstützt nicht.

MySQL unterstützt die Typen Nchar, Nvarchar und Ntext nicht

Inkrement von MySQL Die Anweisung lautet AUTO_INCREMENT, und der SQL-Server ist Identity(1,1)

Der Standardwert der SQL-Server-Tabellenerstellungsanweisung ist ((0)), aber in MySQL sind zwei Klammern nicht zulässig

MySQL benötigt sein Der angegebene Speichertyp der Tabelle

SQL-Server-ID ist [], [Typ] bedeutet, dass er sich von Schlüsselwörtern unterscheidet, aber MySQL ist „, das ist das Symbol links von der Schaltfläche 1

SQL-Server unterstützt das getdate()-Methode zum Abrufen der aktuellen Uhrzeit Datum, aber MySQL kann in Datumstyp und Zeittyp unterteilt werden. Das aktuelle Datum ist cur_date() und die aktuelle vollständige Zeit ist die Funktion now()

MySQL unterstützt das Einfügen in Tabelle1 t1 = '', t2 = '', aber SQL Server-Schreiben wie dieses wird nicht unterstützt

MySQL unterstützt das Einfügen in Tabl1-Werte (1,1), (1,1), (1,1), (1, 1), (1,1), (1,1), (1 ,1)

SQL-Server unterstützt die Limit-Anweisung nicht, was sehr bedauerlich ist. Sie können top nur verwenden, um Limit 0, N und zu ersetzen row_number() over()-Funktion zum Ersetzen des Limits N,M

MySQL muss für jeden eine Tabelle erstellen. Die Tabelle gibt einen Speicher-Engine-Typ an, und SQL Server unterstützt nur eine Speicher-Engine

MySQL unterstützt nicht den Datetime-Typ, dessen Standardwert ist die aktuelle Zeit (mssql ist einfach zu machen).

Überprüfen Sie den SQL-Server. Um diese Tabelle zu löschen, müssen Sie Folgendes tun:

falls vorhanden (wählen Sie * aus dbo.sysobjects aus, wobei die ID angegeben ist). = object_id(N'uc_newpm') und OBJECTPROPERTY(id, N'IsUserTable') = 1)

Aber in MySQL DROP TABLE IF EXISTS cdb_forums;

MySQL unterstützt vorzeichenlose Ganzzahlen, sodass es doppelt so viele maximale Zahlen wie MSSQL speichern kann Das unterstützt keine vorzeichenlosen Ganzzahlen

MySQL unterstützt nicht die Verwendung von Varchar, was im MSSQL-Typ (max) sehr praktisch ist. Dieser Typ kann sowohl für die allgemeine Datenspeicherung als auch für die Blob-Datenspeicherung in MSSQL verwendet werden. Clustered-Index in MySQL, Sie müssen ihn beim Erstellen der Tabelle nur als Schlüssel angeben, zum Beispiel: KEY displayorder (fid, displayorder ) In MSSQL ist Folgendes erforderlich: Erstellen Sie einen eindeutigen nicht gruppierten Index index_uc_protectedmembers_username_appid auf dbo.uc_protectedmembers

(Benutzername asc ,appid asc)

MySQL-Textfeldtyp erlaubt keine Standardwerte

Die Gesamtfeldlänge einer MySQL-Tabelle überschreitet nicht 65XXX.

Ein sehr oberflächlicher Unterschied besteht darin, dass die Installation von MySQL sehr einfach ist und die Dateigröße nur 110 MB beträgt (Nicht-Installationsversion). Im Vergleich zum Giganten Microsoft ist der Installationsfortschritt einfach ...

Es gibt mehrere bessere Verwaltungstools für MySQL, MySQL_Front und die offizielle Suite, aber sie sind nicht so einfach zu verwenden wie SSMS. Dies ist ein großes Manko von MySQL.

Die gespeicherten Prozeduren von MySQL werden nur in der neuesten Version angezeigt und die Stabilität und Leistung sind möglicherweise nicht so gut wie bei MSSQL.

Bei gleichem Lastdruck verbraucht MySQL weniger CPU und Speicher, während MSSQL tatsächlich sehr ressourcenintensiv ist.


PHP verfügt über ähnliche Methoden zum Verbinden von MySQL und MSSQL. Sie müssen lediglich das MySQL der Funktion durch MSSQL ersetzen.

MySQL unterstützt Datums-, Uhrzeit- und Jahrestypen, während MSSQL im Jahr 2008 nur Datum und Uhrzeit unterstützt.

Unterschied zwei

1. Datendefinition

Grundlegende Befehle für Datenbankoperationen

Mysql:

Datenbanknamen erstellen; Datenbanknamen verwenden; Datenbanknamen löschen. Datenbank direkt ohne Erinnerung löschen –

ERSTELLEN TABLE – Erstellen Sie eine Datenbanktabelle.

2.1 PRIMARY KEY-Einschränkung (Primärschlüssel)-Differenzanalyse:

Mysql:    
2.1.1 创建primary key
			CREATE TABLE Persons
			(
			Id_P  int  NOT NULL,
			LastName varchar(255) NOT NULL,
			FirstName varchar(255),
			Address varchar(255),
			City varchar(255),
			PRIMARY KEY (Id_P)               //声明主健写在最后
			)
			SqlServer:
			CREATE TABLE Persons
			(
			Id_P int NOT NULL PRIMARY KEY,     //声明主健 紧跟列后
			LastName varchar(255) NOT NULL,
			FirstName varchar(255),
			Address varchar(255),
			City varchar(255)
			)
			但是如果表存在,之后给表加主健时:
			Mysql 和SqlServer
			ALTER TABLE Persons ADD PRIMARY KEY (Id_P)
2.1.2撤销 PRIMARY KEY 约束
			MySQL:
			ALTER TABLE Persons DROP PRIMARY KEY
			SQL Server
			ALTER TABLE Persons DROP CONSTRAINT pk_PersonID
2.1.3 创建外健约束
			MySQL:
			CREATE TABLE Orders
			(
			O_Id  int NOT NULL,
			OrderNo int NOT NULL,
			Id_P int,
			PRIMARY KEY (O_Id),
			FOREIGN  KEY (Id_P)  REFERENCES  Persons(Id_P)    //写在最后
			)
SQL Server :
			CREATE TABLE Orders
			(
			O_Id  int  NOT NULL  PRIMARY KEY,
			OrderNo  int NOT NULL,
			Id_P  int  FOREIGN KEY REFERENCES Persons(Id_P)    //顺序不同
			)
			如果在 "Orders" 表已存在的情况下为 "Id_P" 列创建 FOREIGN KEY 约束,请使用下面的 SQL:
			MySQL / SQL Server 
			ALTER  TABLE  Orders ADD  FOREIGN KEY  (Id_P) REFERENCES  Persons(Id_P)
2.1.4 撤销外健约束
			MySQL:
			ALTER TABLE Orders DROP  FOREIGN KEY f k_PerOrders
			SQL Server 
			ALTER TABLE Orders DROP CONSTRAINT  fk_PerOrders

2.2 UNIQUE-Einschränkung (einzigartig, eindeutig)-Differenzanalyse

Die UNIQUE-Einschränkung identifiziert eindeutig jeden Eintrag im Datenbanktabellendatensatz .

Sowohl UNIQUE- als auch PRIMARY KEY-Einschränkungen bieten Eindeutigkeitsgarantien für Spalten oder Spaltensätze. PRIMARY KEY hat automatisch UNIQUE-Einschränkungen definiert.

Bitte beachten Sie, dass jede Tabelle mehrere UNIQUE-Einschränkungen haben kann, es jedoch nur eine PRIMARY KEY-Einschränkung pro Tabelle geben kann.

2.2.1 UNIQUE-Einschränkung erstellen

MySQL:

CREATE TABLE Persons

(

Id_P int NOT NULL,

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255) Vorname varchar(255),
Adresse varchar(255),
Stadt varchar(255)
)

2.2.2 UNIQUE-Einschränkung aufheben

MySQL:

ALTER TABLE Persons DROP INDEX uc_PersonID


SQL Server

ALTER TABLE Person s DROP CONSTRAINT uc_PersonID


2.3 CHECK-Einschränkungen

CHECK-Einschränkungen werden verwendet, um den Wertebereich in einer Spalte einzuschränken.

Wenn Sie eine CHECK-Einschränkung für eine einzelne Spalte definieren, sind für diese Spalte nur bestimmte Werte zulässig.

如果对一个表定义 CHECK 约束,那么此约束会在特定的列中对值进行限制。

2.3.1 创建 CHECK约束

下面的 SQL 在 "Persons" 表创建时为 "Id_P" 列创建 CHECK 约束。CHECK 约束规定 "Id_P" 列必须只包含大于 0 的整数。
My SQL:
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CHECK (Id_P>0)                       //写在最后
)
SQL Server 
CREATE TABLE Persons
(
Id_P int NOT NULL CHECK (Id_P>0),    //紧跟列后
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)

如果需要命名 CHECK 约束,以及为多个列定义 CHECK 约束,请使用下面的 SQL 语法:

MySQL / SQL Server:
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT chk_Person CHECK (Id_P>0 AND City='Sandnes') //多个条件
)

如果在表已存在的情况下为 “Id_P” 列创建 CHECK 约束,请使用下面的 SQL:

MySQL / SQL Server:
ALTER TABLE Persons ADD CHECK (Id_P>0)

2.3.2 撤销 CHECK约束

Sqlserver:
ALTER  TABLE  Persons  DROP CONSTRAINT chk_Person
Mysql我没有找到怎么删除。

2.4 DEFAULT 约束(系统默认值)

DEFAULT 约束用于向列中插入默认值。

如果没有规定其他的值,那么会将默认值添加到所有的新纪录。

2.4.1 创建DEFAULT约束

下面的 SQL 在 "Persons" 表创建时为 "City" 列创建 DEFAULT 约束:
My SQL / SQL Server:
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255) DEFAULT 'Sandnes'     //紧跟列后,默认值字符串Sandnes
)

通过使用类似 GETDATE() 这样的函数,DEFAULT 约束也可以用于插入系统值:

CREATE TABLE Orders
(
Id_O int NOT NULL,
OrderNo int NOT NULL,
Id_P int,
OrderDate date DEFAULT GETDATE()   //紧跟列后,函数
)

如果在表已存在的情况下为 “City” 列创建 DEFAULT 约束,请使用下面的 SQL:

MySQL:
ALTER  TABLE  Persons  ALTER  City  SET  DEFAULT  'SANDNES'

SQL Server:
ALTER  TABLE  Persons  ALTER  COLUMN  City  SET  DEFAULT  'SANDNES'

2.4 .2 撤消DEFAULT约束

MySQL:
ALTER  TABLE  Persons  ALTER  City  DROP  DEFAULT

SQL Server:
ALTER  TABLE  Persons  ALTER  COLUMN  City  DROP  DEFAULT

2.5 索引区别

CREATE INDEX 语句

CREATE INDEX 语句用于在表中创建索引。

在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据。

在表上创建一个简单的索引。允许使用重复的值:

CREATE INDEX index_name ON table_name (column_name) //“column_name” 规定需要索引的列。

在表上创建一个唯一的索引。唯一的索引意味着两个行不能拥有相同的索引值。

CREATE UNIQUE INDEX index_name ON table_name (column_name)

Mysql和SqlServer的创建索引都是一致的,但是在删除索引方面却有区别:

SqlServer: DROP INDEX table_name.index_name

Mysql: ALTER TABLE table_name DROP INDEX index_name

2.6 主键自动增加的区别

mySql的主键自动增加是用auto_increment字段,sqlServer的自动增加则是identity字段.

Auto-increment 会在新纪录插入表中时生成一个唯一的数字。

我们通常希望在每次插入新纪录时,自动地创建主键字段的值。

我们可以在表中创建一个 auto-increment 字段。

关于 MySQL 的语法
下列 SQL 语句把 "Persons" 表中的 "P_Id" 列定义为 auto-increment 主键:
CREATE TABLE Persons
(
P_Id int NOT NULL AUTO_INCREMENT,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (P_Id)
)
MySQL 使用 AUTO_INCREMENT 关键字来执行 auto-increment 任务。
默认地,AUTO_INCREMENT 的开始值是 1,每条新纪录递增 1。
要让 AUTO_INCREMENT 序列以其他的值起始,请使用下列 SQL 语法:
ALTER TABLE Persons AUTO_INCREMENT=100
关于 SQL Server 的语法
下列 SQL 语句把 "Persons" 表中的 "P_Id" 列定义为 auto-increment 主键:
CREATE TABLE Persons
(
P_Id int PRIMARY KEY IDENTITY,或则是写成P_id int primary key identity (1,1),
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
MS SQL 使用 IDENTITY 关键字来执行 auto-increment 任务。
默认地,IDENTITY 的开始值是 1,每条新纪录递增 1。
要规定 "P_Id" 列以 20 起始且递增 10,请把 identity 改为 IDENTITY(20,10)

2.7 MySQL支持enum,和set类型,SQL Server不支持
2.8 MySQL不支持nchar,nvarchar,ntext类型

二、数据操作

2.1 limit和top

SQL SERVER : select   top   8   *   from   table1 
MYSQL: select   *   from   table1   limit   5或则是 limit 0,5; 
注意,在MySQL中的limit不能放在子查询内,limit不同与top,它可以规定范围 limit a,b——范围a-b

2.2 ISNULL()函数

SqlServer:
select * from test where isnull(no,0)=0;
MySQL
MySQL 可以使用 ISNULL() 函数。不过它的工作方式与微软的 ISNULL() 函数有点不同。
在 MySQL 中,我们可以使用 IFNULL() 函数,就像这样:
mysql> select * from test where ifnull(no,0)=0;
row in set (0.03 sec)

2.3 select查询

SELECT * FROM tablename

2.4 insert 插入

INSERT INTO table(col1,col2) values(value1,value2);

MySQL支持insert into table1 set t1 = ‘’, t2=‘’,但是MSSQL不支持这样写

2.5 update 修改

Update tablename set col=”value”;

2.6 delete 删除

Delete from tablename;

三、语法定义

3.1 注释符区别

SqlServer的注释符为 --和/**/

MySql的注释符为 --和/**/和#

3.2 识别符的区别

MS SQL识别符是[],[type]表示他区别于关键字,但是MySQL却是 `,也就是按键1左边的那个符号

3.3存储过程的区别(未经验证,从网上找的)

(1) mysql的存储过程中变量的定义去掉@;

(2) SQLServer存储过程的AS在MySql中需要用begin …end替换

(3) Mysql的Execute对应SqlServer的exec;

(注意:必须想下面这样调用)

Set @cnt=’select * from 表名’;

Prepare str from @cnt;

Execute str;

(4) MySql存储过程调用其他存储过程用call

Call 函数名(即SQLServer的存储过程名)(’参数1’,’参数2’,……)

(5) select @a=count() from VW_Action 在mySql中修改为:select count() from VW_Action into @a;

(6) MySQL视图的FROM子句不允许存在子查询,因此对于SQL Server中FROM子句带有子查询的视图,需要手工进行迁移。可通过消除FROM子句中的子查询,或将FROM子句中的子查询重构为一个新的视图来进行迁移。

(7) )MySql存储过程中没有return函数,在MySql中可以用循环和out参数代替

  If EXISTS(SELECT * FROM T_Chance WHERE FCustID=CostomerID)  return 0
改写为:
(在参数中定义一个out变量:out temp varchar(100);)
    BEGIN
        Loop1:loop
    SELECT count(*) FROM T_Chance WHERE FCustID=CostomerID int @cnt
    If @cnt>0 then
    begin
        set temp=0;
        leave loop1;
    end;
    end if
    end loop loop1;

(8) mysql的uuid()对应sql的GUID();

(9) MySql的out对应SQLServer的output,且mysql 的out要放在变量的前面,SQLServer的output放在变量后面:
MySql out,in,inout的区别——
MySQL 存储过程 “in” 参数:跟 C 语言的函数参数的值传递类似, MySQL 存储过程内部可能会修改此参数,但对 in 类型参数的修改,对调用者(caller)来说是不可见的(not visible)。
MySQL 存储过程 “out” 参数:从存储过程内部传值给调用者。在存储过程内部,该参数初始值为 null,无论调用者是否给存储过程参数设置值。
MySQL 存储过程 inout 参数跟 out 类似,都可以从存储过程内部传值给调用者。不同的是:调用者还可以通过 inout 参数传递值给存储过程。

3.4字符串连接

SQLServer: Temp=’select * from ’+’tablename’+…+…
MySql:Temp=concat(’select * from’, ’tablecname’,…,…)

四、函数和数据类型的区别

4.1 Date 函数

MySQL Date 函数

  • NOW() 返回当前的日期和时间
  • CURDATE() 返回当前的日期
  • CURTIME() 返回当前的时间 、
  • DATE() 提取日期或日期/时间表达式的日期部分
  • EXTRACT() 返回日期/时间按的单独部分
  • DATE_ADD() 给日期添加指定的时间间隔
  • DATE_SUB() 从日期减去指定的时间间隔
  • DATEDIFF() 返回两个日期之间的天数
  • DATE_FORMAT() 用不同的格式显示日期/时间

SQL Server Date 函数

  • GETDATE() 返回当前日期和时间
  • DATEPART() 返回日期/时间的单独部分
  • DATEADD() 在日期中添加或减去指定的时间间隔
  • DATEDIFF() 返回两个日期之间的时间
  • CONVERT() 用不同的格式显示日期/时间

4.2 Date 数据类型

MySQL 使用下列数据类型在数据库中存储日期或日期/时间值:
DATE - 格式 YYYY-MM-DD 
DATETIME - 格式: YYYY-MM-DD HH:MM:SS 
TIMESTAMP - 格式: YYYY-MM-DD HH:MM:SS 
YEAR - 格式 YYYY 或 YY

SQL Server 使用下列数据类型在数据库中存储日期或日期/时间值:
DATE - 格式 YYYY-MM-DD 
DATETIME - 格式: YYYY-MM-DD HH:MM:SS 
SMALLDATETIME - 格式: YYYY-MM-DD HH:MM:SS 
TIMESTAMP - 格式: 唯一的数字

五、性能比较
(1)一个很表面的区别就是MySQL的安装特别简单,而且文件大小才110M(非安装版),相比微软这个庞然大物,安装进度来说简直就是…
(2)MySQL的管理工具有几个比较好的,MySQL_front,和官方那个套件,不过都没有SSMS的使用方便,这是MySQL很大的一个缺点。
(3)MySQL的存储过程只是出现在最新的版本中,稳定性和性能可能不如MS SQL。
(4)同样的负载压力,MySQL要消耗更少的CPU和内存,MS SQL的确是很耗资源。

1、把主键定义为自动增长标识符类型
MySql
在mysql中,如果把表的主键设为auto_increment类型,数据库就会自动为主键赋值。例如:
create table customers(id int auto_increment primary key not null, name varchar(15));

Ich habe kürzlich an der Konvertierung von MSSQL nach MySQL gearbeitet. Ich habe einige Erfahrungen zusammengefasst und teile sie mit Ihnen.
Gleichzeitig werden diese laufend aktualisiert. Ich hoffe auch, dass Sie noch mehr hinzufügen können.
MySQL unterstützt Enum- und Set-Typen, SQL Server unterstützt nicht.
MySQL unterstützt keine Nchar-, Nvarchar- und Ntext-Typen.
Die Inkrementanweisung von MySQL ist AUTO_INCREMENT und MSSQL ist Identity (1, 1). Tabellenerstellungsanweisung Es bedeutet ((0)), aber in MySQL sind zwei Klammern nicht zulässig, um den Speichertyp für die Tabelle anzugeben. Der MSSQL-Bezeichner ist [], [Typ] bedeutet, dass er sich von Schlüsselwörtern unterscheidet. aber MySQL ist`, das heißt, das Symbol auf der linken Seite von Schaltfläche 1
MSSQL unterstützt die Methode getdate (), um die aktuelle Uhrzeit und das aktuelle Datum zu erhalten, aber MySQL kann in Datumstyp und Zeittyp unterteilt werden, um das aktuelle Datum zu erhalten ist cur_date(), und die aktuelle vollständige Zeit ist die Funktion now()
mssql Die „replace into“-Anweisung wird nicht unterstützt, aber in der neuesten Version von sql20008 wird auch die Zusammenführungssyntax unterstützt.
MySQL unterstützt das Einfügen in Tabelle1, Set t1 = '', t2 = '', aber MSSQL unterstützt das Schreiben auf diese Weise nicht
MySQL unterstützt das Einfügen in Tabl1-Werte (1, 1), (1,1), (1,1), (1,1), (1,1) , (1,1), (1,1)
mssql unterstützt die Limit-Anweisung nicht, was sehr bedauerlich ist. Sie können nur top verwenden, um limit 0,N zu ersetzen, und die Funktion row_number() over(), um limit N zu ersetzen ,M
MySQL muss beim Erstellen einer Tabelle einen Speicher-Engine-Typ für jede Tabelle angeben, während MSSQL nur eine Speicher-Engine unterstützt.
MySQL unterstützt keinen Datetime-Typ, dessen Standardwert die aktuelle Zeit ist (MSSQL ist in MySQL einfach). , der Zeitstempeltyp wird verwendet. Überprüfen Sie vor dem Löschen, ob eine solche Tabelle vorhanden ist:
Wenn vorhanden (wählen Sie * aus dbo.sysobjects aus, wobei id = object_id(N'uc_newpm') und OBJECTPROPERTY( id, N'IsUserTable') = 1)
Aber in MySQL brauchen Sie nur DROP TABLE IF EXISTS cdb_forums;
MySQL unterstützt vorzeichenlose Ganzzahlen, daher ist es besser, als dass MSSQL den maximalen Anzahlspeicher verdoppeln kann
MySQL Unterstützt nicht den sehr praktischen Typ varchar (max) in MSSQL. Dieser Typ kann sowohl für die allgemeine Datenspeicherung als auch für die Blob-Datenspeicherung in MSSQL verwendet werden.
MySQL-Erstellung Ein nicht gruppierter Index muss beispielsweise nur beim Erstellen der Tabelle als Schlüssel angegeben werden : KEY displayorder (fid, displayorder) muss in MSSQL erforderlich sein: Erstellen Sie einen eindeutigen nicht gruppierten Index index_uc_protectedmembers_username_appid auf dbo.uc_protectedmembers
(Benutzername ASC, AppID ASC)
MySQL-Text Feldtypen erlauben keine Standardwerte
19Die Gesamtfeldlänge von a Die Tabelle in MySQL überschreitet nicht 65XXX.
20 Ein sehr oberflächlicher Unterschied besteht darin, dass die Installation von MySQL sehr einfach ist und die Dateigröße nur 110 MB beträgt (Nicht-Installationsversion). Im Vergleich zum Giganten Microsoft ist der Installationsfortschritt einfach ...
21 Es gibt mehrere bessere Die Verwaltungstools für MySQL, Mysql_front und die offizielle Suite sind nicht so einfach zu verwenden wie SSMS, was ein großes Manko von MySQL darstellt.
22Die gespeicherten Prozeduren von MySQL werden nur in der neuesten Version angezeigt und die Stabilität und Leistung sind möglicherweise nicht so gut wie bei MSSQL.
Bei gleichem Lastdruck verbraucht MySQL weniger CPU und Speicher, während MSSQL tatsächlich sehr ressourcenintensiv ist.
24php verfügt über ähnliche Methoden zum Verbinden von MySQL und MSSQL. Sie müssen lediglich das MySQL der Funktion durch MSSQL ersetzen.
25MySQL unterstützt Datums-, Uhrzeit- und Jahrestypen, MSSQL unterstützt Datum und Uhrzeit nur im Jahr 2008.

Die numerischen Datentypen von MySQL können grob in zwei Kategorien unterteilt werden: eine Ganzzahl und die andere Gleitkommazahl oder Dezimalzahl.
Für jede dieser Kategorien stehen viele verschiedene Untertypen zur Verfügung, jeder Untertyp unterstützt unterschiedliche Datengrößen und MySQL ermöglicht uns die Angabe, ob Werte in numerischen Feldern positiv oder negativ sind oder mit Nullen aufgefüllt werden.
In der folgenden Tabelle sind verschiedene numerische Typen, ihre zulässigen Bereiche und der von ihnen belegte Speicherplatz aufgeführt.


Integer:

Typ Größe TINYINT 1 Byte 2 Bytes3 Bytes 4 Bytes8 BytesBereich (mit Vorzeichen)
Bereich (mit Vorzeichen) Bereich (ohne Vorzeichen) Zweck
(-128, 127) (0,255) Kleiner ganzzahliger Wert SMALLINT
(-32 768, 32 767) (0, 65 535) Großer ganzzahliger Wert MEDIUMINT
(-8 388 608, 8 388 607) (0, 16 777 215) Großer ganzzahliger Wert INT/INTEGER
( -2 147 483 648, 2 147 483 647 ) (0, 4 294 967 295) Großer ganzzahliger Wert BIGINT
(-9 233 372 036 854 775 808,9 223 372 036. 854 775 807) (0, 18 446 744 073 709 551 615) , (1.175 494 351 E- 38, 3.402 823 466 351 E+38) Einfache Genauigkeit
Gleitkommawert Typ Größe
Bereich (ohne Vorzeichen)
  • Verwendung

Gleitkommawert
DECIMAL Für DECIMAL(M,D), wenn M>D, ist es M+2, andernfalls ist es D+2. Hängt vom Wert von M und D ab. Hängt vom Wert von M und D ab. Dezimalwert

INT-Typ
Die fünf wichtigsten in MySQL unterstützten Ganzzahltypen sind TINYINT, SMALLINT, MEDIUMINT, INT und BIGINT. Diese Typen sind weitgehend identisch, lediglich die Größe der gespeicherten Werte unterscheidet sich.
 MySQL erweitert den SQL-Standard in Form eines optionalen Anzeigebreitenindikators, sodass beim Abrufen eines Werts aus der Datenbank der Wert auf eine bestimmte Länge verlängert werden kann. Wenn Sie beispielsweise angeben, dass ein Feld den Typ INT(6) hat, wird sichergestellt, dass Werte mit weniger als sechs Ziffern beim Abrufen aus der Datenbank automatisch mit Leerzeichen aufgefüllt werden. Beachten Sie, dass die Verwendung eines Breitenindikators keinen Einfluss auf die Größe des Felds oder den Wertebereich hat, den es speichern kann.
Falls wir eine Zahl in einem Feld speichern müssen, das den zulässigen Bereich überschreitet, kürzt MySQL sie vor dem Speichern entsprechend dem Ende des zulässigen Bereichs, das ihr am nächsten liegt. Eine weitere Besonderheit ist, dass MySQL den unzulässigen Wert automatisch auf 0 ändert, bevor er in die Tabelle eingefügt wird.
 Der Modifikator UNSIGNED gibt an, dass das Feld nur positive Werte speichert. Da die positiven und negativen Vorzeichen der Zahlen nicht gespeichert werden müssen, kann bei der Speicherung ein „Bit“ Platz gespart werden. Dadurch vergrößert sich der Wertebereich, den dieses Feld speichern kann.
Der Modifikator ZEROFILL gibt an, dass 0 (kein Leerzeichen) zur Ergänzung des Ausgabewerts verwendet werden kann. Verwenden Sie diesen Modifikator, um zu verhindern, dass die MySQL-Datenbank negative Werte speichert.
  
 Die drei von MySQL unterstützten Gleitkommatypen sind FLOAT, DOUBLE und DECIMAL. Der numerische Typ FLOAT wird zur Darstellung von Gleitkommawerten mit einfacher Genauigkeit verwendet, und der numerische Typ DOUBLE wird zur Darstellung von Gleitkommawerten mit doppelter Genauigkeit verwendet.
Wie Ganzzahlen benötigen diese Typen auch zusätzliche Parameter: einen Anzeigebreitenindikator und einen Dezimalpunktindikator. Beispielsweise gibt die Anweisung FLOAT(7,3) an, dass der angezeigte Wert 7 Ziffern mit 3 Ziffern nach dem Dezimalpunkt nicht überschreitet.
 Bei einem Wert mit mehr Nachkommastellen als zulässig ist, rundet MySQL ihn automatisch auf den nächsten Wert und fügt ihn dann ein.
  Der Datentyp DECIMAL wird bei Berechnungen mit sehr hohen Genauigkeitsanforderungen verwendet. Mit diesem Typ können Sie die Genauigkeit und die Zählmethode des Werts als Auswahlparameter festlegen. Die Genauigkeit bezieht sich hier auf die Gesamtzahl der für den Wert gespeicherten signifikanten Stellen, während die Zählmethode die Anzahl der Nachkommastellen angibt. Beispielsweise gibt die Anweisung DECIMAL(7,3) an, dass der gespeicherte Wert 7 Stellen und 3 Nachkommastellen nicht überschreiten darf.
Das Ignorieren der Präzisions- und Zählmethodenmodifizierer des Datentyps DECIMAL führt dazu, dass die MySQL-Datenbank die Genauigkeit aller als dieser Datentyp identifizierten Felder auf 10 und die Zählmethode auf 0 setzt.
 Die Modifikatoren UNSIGNED und ZEROFILL können auch von den Datentypen FLOAT, DOUBLE und DECIMAL verwendet werden. Und der Effekt ist der gleiche wie beim INT-Datentyp.
String-Typen
MySQL bietet 8 grundlegende String-Typen, die alles von einem einfachen Zeichen bis hin zu einem großen Textblock oder binären String-Daten speichern können.

DOUBLE 8 Bytes (1.797 693 134 862 315 7 E+308, 2.225 073 858 507 201 4 E -308), 0 ( 2.225 073. 8 58 507 201 4 E-308, 1.797 693 134 862 315 7 E+308), 0 doppelt
MEDIUMTEXTLOGNGBLOBLONGTEXT

CHAR- und VARCHAR-Typen

  • CHAR-Typ wird für Zeichenfolgen fester Länge verwendet und muss mit einem Größenmodifikator in Klammern definiert werden. Dieser Größenmodifikator reicht von
    0-255. Werte, die größer als die angegebene Länge sind, werden abgeschnitten, während Werte, die kleiner als die angegebene Länge sind, mit Leerzeichen aufgefüllt werden. Der Typ
  • CHAR kann den Modifikator BINARY verwenden. Bei Verwendung in Vergleichsoperationen führt dieser Modifikator dazu, dass CHAR
    in binärer Form an der Operation teilnimmt und nicht in der herkömmlichen Weise, bei der die Groß-/Kleinschreibung beachtet wird.
  • Eine Variante des CHAR-Typs ist der VARCHAR-Typ. Es handelt sich um einen Zeichenfolgentyp mit variabler Länge und muss außerdem einen Indikator im Bereich von 0 bis 255 haben. Der Unterschied zwischen CHAR und VARCHGAR besteht in der Art und Weise, wie die MuSQL-Datenbank diesen Indikator verarbeitet: CHAR behandelt die Größe als die Größe des Werts und füllt sie mit Leerzeichen auf, wenn die Länge nicht ausreicht.
  • Der Typ VARCHAR hingegen behandelt ihn als Maximalwert und verwendet nur die Länge, die tatsächlich zum Speichern der Zeichenfolge benötigt wird (wobei ein zusätzliches Byte hinzugefügt wird, um die Länge der Zeichenfolge selbst zu speichern), um den Wert zu speichern. Also kürzer als die Indikatorlänge.
  • VARCHAR-Typen werden nicht mit Leerzeichen aufgefüllt, aber Werte, die länger als der Indikator sind, werden trotzdem abgeschnitten.
  • Der Typ VARCHAR kann die Länge des gespeicherten Werts basierend auf dem tatsächlichen Inhalt dynamisch ändern. Wenn Sie also nicht sicher sind, wie viele Zeichen ein Feld benötigt, können Sie durch die Verwendung des Typs VARCHAR erheblich Speicherplatz sparen und die Speichereffizienz verbessern.
  • Der VARCHAR-Typ ist identisch mit dem CHAR-Typ bei Verwendung des BINARY-Modifikators.

TEXT- und BLOB-Typen
Für Fälle, in denen die erforderliche Feldlänge 255 überschreitet, stellt MySQL zwei Typen bereit: TEXT und BLOB. Sie alle haben je nach Größe der gespeicherten Daten unterschiedliche Untertypen. Diese großen Datenmengen werden zum Speichern von Textblöcken oder binären Datentypen wie Bildern und Tondateien verwendet.
 Es gibt Unterschiede in der Klassifizierung und im Vergleich zwischen TEXT- und BLOB-Typen. Beim BLOB-Typ wird die Groß-/Kleinschreibung beachtet, während bei TEXT die Groß-/Kleinschreibung nicht beachtet wird. Größenmodifikatoren werden für verschiedene BLOB- und TEXT-Untertypen nicht verwendet. Werte, die größer sind als der vom angegebenen Typ unterstützte maximale Bereich, werden automatisch abgeschnitten.
Datums- und Zeittypen
Beim Umgang mit Datums- und Zeittypwerten bietet MySQL fünf verschiedene Datentypen zur Auswahl. Sie können in einfache Datums- und Uhrzeittypen und gemischte Datums- und Uhrzeittypen unterteilt werden. Abhängig von der erforderlichen Genauigkeit können Subtypen innerhalb jedes Subtyps verwendet werden, und MySQL verfügt über integrierte Funktionen zum Konvertieren verschiedener Eingabeformate in ein Standardformat.
Typgröße
(Bytes) Verwendung des Bereichsformats
DATUM 3 1000-01-01/9999-12-31 JJJJ-MM-TT Datumswert
ZEIT 3 '-838:59:59'/'838:59:59 ' HH:MM:SS Zeitwert oder Dauer
JAHR 1 1901/2155 JJJJ Jahreswert
DATETIME 8 1000-01-01 00:00:00/9999-12-31 23:59:59 JJJJ-MM-TT HH :MM :SS Gemischter Datums- und Zeitwert
TIMESTAMP 8 1970-01-01 00:00:00/Irgendwann im Jahr 2037 JJJJMMTT HHMMSS Gemischter Datums- und Zeitwert, Zeitstempel

DATE-, TIME- und TEAR-Typen
  MySQL verwendet die DATE- und TEAR-Typen zum Speichern einfacher Datumswerte und den TIME-Typ zum Speichern von Zeitwerten. Diese Typen können als Zeichenfolgen oder Folgen von Ganzzahlen ohne Trennzeichen beschrieben werden. Wenn Werte vom Typ DATE als Zeichenfolgen beschrieben werden, sollten sie durch Bindestriche als Trennzeichen und Werte vom Typ TIME durch Doppelpunkte als Trennzeichen getrennt werden.
Es ist zu beachten, dass ein Wert vom Typ TIME ohne Doppelpunkttrennzeichen von MySQL als Dauer und nicht als Zeitstempel interpretiert wird.
 MySQL interpretiert auch den Wert der beiden Zahlen im Jahr des Datums oder der beiden Zahlen, die für den TEAR-Typ in der SQL-Anweisung eingegeben wurden, soweit möglich. Denn alle Werte vom Typ TEAR müssen mit 4 Zahlen gespeichert werden. MySQL versucht, eine zweistellige Jahreszahl in einen vierstelligen Wert umzuwandeln. Konvertiert Werte im Bereich 00-69 in den Bereich 2000-2069. Konvertiert Werte im Bereich 70-99 bis 1970-1979. Wenn der von MySQL automatisch konvertierte Wert nicht unseren Anforderungen entspricht, geben Sie eine 4-stellige Jahreszahl ein.
DATEYIME- und TIMESTAMP-Typen
Zusätzlich zu den Datums- und Uhrzeitdatentypen unterstützt MySQL auch zwei gemischte Typen, DATEYIME und TIMESTAMP. Sie können Datum und Uhrzeit als einen einzelnen Wert speichern. Beide Typen werden häufig zum automatischen Speichern von Zeitstempeln mit dem aktuellen Datum und der aktuellen Uhrzeit verwendet und können gut in Anwendungen funktionieren, die eine große Anzahl von Datenbanktransaktionen durchführen und einen Prüfpfad für Debugging- und Überprüfungszwecke erstellen müssen.
 Wenn wir einem Feld vom Typ TIMESTAMP nicht explizit einen Wert zuweisen oder ihm ein Nullwert zugewiesen wird. MySQL füllt es automatisch mit dem aktuellen Datum und der aktuellen Uhrzeit des Systems.
Zusammengesetzte Typen
 MySQL unterstützt auch zwei zusammengesetzte Datentypen, ENUM und SET, die die SQL-Spezifikation erweitern. Obwohl es sich bei diesen Typen technisch gesehen um Zeichenfolgentypen handelt, können sie als unterschiedliche Datentypen behandelt werden. Mit einem ENUM-Typ kann nur ein Wert aus einer Sammlung abgerufen werden. Mit einem SET-Typ können beliebig viele Werte aus einer Sammlung abgerufen werden.
ENUM-Typ
  Mit dem ENUM-Typ kann nur ein Wert im Satz abgerufen werden, was einer einzelnen Option ähnelt. Leichter zu verstehen, wenn es um sich gegenseitig ausschließende Daten wie das menschliche Geschlecht geht. Felder vom Typ ENUM können einen Wert aus einer Sammlung annehmen oder einen Nullwert verwenden. Andernfalls führt die Eingabe dazu, dass MySQL eine leere Zeichenfolge in das Feld einfügt. Wenn außerdem die Groß-/Kleinschreibung des eingefügten Werts nicht mit der Groß-/Kleinschreibung der Werte in der Sammlung übereinstimmt, verwendet MySQL automatisch die Groß-/Kleinschreibung des eingefügten Werts, um ihn in einen Wert umzuwandeln, der mit der Groß-/Kleinschreibung der Sammlung übereinstimmt.
 Der ENUM-Typ kann intern im System als Zahl gespeichert werden und wird mit Zahlen beginnend bei 1 indiziert. Ein ENUM-Typ kann bis zu 65536 Elemente enthalten, von denen eines von MySQL zum Speichern von Fehlerinformationen reserviert ist. Dieser Fehlerwert wird durch den Index 0 oder einen leeren String dargestellt.
 MySQL betrachtet die in der ENUM-Typsammlung angezeigten Werte als zulässige Eingaben, und alle anderen Eingaben schlagen fehl. Dies zeigt, dass der Speicherort des fehlerhaften Datensatzes leicht gefunden werden kann, indem nach Zeilen gesucht wird, die eine leere Zeichenfolge oder einen entsprechenden numerischen Index von 0 enthalten.
SET-Typ
  Der SET-Typ ist dem ENUM-Typ ähnlich, aber nicht identisch. Der SET-Typ kann beliebig viele Werte aus einer vordefinierten Sammlung annehmen. Und wie beim ENUM-Typ führt jeder Versuch, einen nicht vordefinierten Wert in ein Feld vom Typ SET einzufügen, dazu, dass MySQL eine leere Zeichenfolge einfügt. Wenn Sie einen Datensatz einfügen, der sowohl legale als auch illegale Elemente enthält, behält MySQL die legalen Elemente bei und entfernt die illegalen Elemente.
 Ein SET-Typ kann bis zu 64 Elemente enthalten. In einem SET-Element wird der Wert als diskrete Folge von „Bits“ gespeichert, die das entsprechende Element darstellen. Bits sind eine einfache und effiziente Möglichkeit, geordnete Sammlungen von Elementen zu erstellen. Außerdem werden doppelte Elemente entfernt, sodass es unmöglich ist, zwei identische Elemente in einem SET-Typ zu enthalten.
 Wenn Sie illegale Datensätze aus Feldern vom Typ SET finden möchten, suchen Sie einfach nach Zeilen, die leere Zeichenfolgen oder Binärwerte von 0 enthalten.

Weitere Kenntnisse zum Thema Programmierung finden Sie unter: Programmieren lernen! !

Typ Größe Verwendung
CHAR 0-255 Bytes String mit fester Länge
VARCHAR 0-25 5 Bytes String variabler Länge
TINYBLOB 0-255 Bytes Binäre Zeichenfolge mit nicht mehr als 255 Zeichen
TINYTEXT 0-255 Bytes Kurze Textzeichenfolge
BLOB 0-65 535 Byte lange Textdaten in binäre Form mittlere Form LENGTH TEXT DATA
0-16 777 215 Bytes MEDIUM LENGTH TEXT DATA
0-4 294 967 295 Bytes Sehr große Textdaten in Binärform
0-4 294 967 295 Bytes Sehr große Textdaten

Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen MySQL und SQL Server?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn