ความแตกต่างระหว่าง MySQL และ SQL Server [ปิด]


144

ฉันเป็นนักพัฒนาASP.NETที่ใช้Microsoft SQL Serverสำหรับความต้องการฐานข้อมูลทั้งหมดของฉัน (ทั้งที่ทำงานและสำหรับโครงการส่วนตัว)

ฉันกำลังพิจารณาทดลองใช้LAMP stack สำหรับโครงการส่วนตัวของฉัน

อะไรคือความแตกต่างหลักระหว่างMySQLและSQL Server? คือการใช้วิธีการจัดเก็บการปฏิบัติร่วมกันในMySQL?

คำแนะนำหรือแหล่งข้อมูลที่คุณแนะนำให้ช่วยฉันด้วยสวิตช์?

สำหรับผู้ที่มีประสบการณ์ทั้งสองมีคุณสมบัติที่ขาดหายไปจากMySQLอะไร?

คำตอบ:


139

สิ่งหนึ่งที่คุณต้องระวังคือความแตกต่างที่รุนแรงในวิธีที่ SQL Server และ MySQL ใช้ไวยากรณ์ SQL

นี่คือความสุขการเปรียบเทียบการใช้งาน SQL ที่แตกต่างกัน

ตัวอย่างเช่นลองดูที่ส่วนบนสุด ใน MySQL:

SELECT age
FROM person
ORDER BY age ASC
LIMIT 1 OFFSET 2

ใน SQL Server (T-SQL):

SELECT TOP 3 WITH TIES *
FROM person
ORDER BY age ASC

27
และ oracle ก็มีความแตกต่างเช่นกัน: เลือก * จาก (เลือกอายุจากลำดับบุคคลก่อนหน้านี้) โดยที่ rownum <= 3 กลับมา ANSI SQL ทั้งหมดจะได้รับการอภัย :)
gbjbaanb

9
เพิ่งวิ่งข้ามนี้ การอ่านเกี่ยวกับความแตกต่างทั้งหมดทำให้ฉันประจบประแจง พื้นฐานเหมือนกัน (อย่างน้อยก็ในแง่ของความเข้าใจ) แต่ข้อมูลจำเพาะนั้นแตกต่างกันมาก
JasCav

21
อาจเป็นความคิดเห็นที่เป็นใบ้ แต่ทำไมถึงไม่มีภาษา 1 sql ?? ... มี html ที่แตกต่างกันหรือไม่ ... ดังนั้นทำไมไม่ 1 sql
GreaterKing

4
@greaterKing HTML เป็นโครงสร้างและมาตรฐานที่กำหนดโดยคณะกรรมการ / กลุ่ม บริษัท SQL .. ไม่ได้เป็นเพียงภาษาสคริปต์และเจ้าของคนเดียวเท่านั้นที่เป็นผู้พัฒนาล่าม มันเหมือนกับ Javascript แบบหนึ่งเบราว์เซอร์ทุกตัวมีเอ็นจิน JS ของตัวเองและวิธีการตีความสคริปต์ มันเป็นเพียงแรงกดดันจากชุมชนเท่านั้นที่มีความพยายามที่จะนำภาษานั้นไปสู่ความเป็นน้ำหนึ่งใจเดียวกัน แต่มนุษย์ฉันหวังว่าพวกเขาทั้งหมดจะคล้ายกันมากกับความแตกต่างเพียงเล็กน้อย
RedactedProfile

2
T-SQL แปลเป็น Transact-SQL;) Sql Server มีภาษา (T-SQL) แต่เป็นซอฟต์แวร์โดยรวมพร้อม GUI จัดการคำขอในพื้นที่และผ่านเครือข่าย ฯลฯ
Botond Bertalan

48

ความคิดเห็นจำนวนมากที่นี่ฟังดูเหมือนการโต้แย้งทางศาสนามากกว่าข้อความในชีวิตจริง ฉันทำงานมาหลายปีทั้ง MySQL และ MSSQL และทั้งคู่เป็นผลิตภัณฑ์ที่ดี ฉันจะเลือก MySQL เป็นหลักตามสภาพแวดล้อมที่คุณกำลังทำงานอยู่ โครงการโอเพ่นซอร์สส่วนใหญ่ใช้ MySQL ดังนั้นหากคุณไปสู่ทิศทางนั้น MySQL เป็นตัวเลือกของคุณ ถ้าคุณพัฒนาบางอย่างด้วย. Net ฉันจะเลือก MSSQL ไม่ใช่เพราะมันดีกว่ามาก แต่ก็แค่ทำให้เป็นสิ่งที่คนส่วนใหญ่ใช้ ตอนนี้ฉันจริงในโครงการที่ใช้ ASP.NET กับ MySQL และ C # มันใช้งานได้ดีอย่างสมบูรณ์แบบ


3
พูดอย่างเคร่งครัดคุณไม่คิดว่าจะมีอะไรเหมือน MS SQL สิ่งที่มีอยู่คือ "MS SQL Server"
แตก

ฉันแน่ใจว่าคุณรู้มากกว่าฉัน ฉันเป็นแค่มือใหม่ช่วยบอกให้ฉันรู้ว่าฉันเข้าใจผิดไหม? มีอะไรตรงตาม MS SQL หรือไม่
Unbreakable

2
ฉันไม่แน่ใจว่าคุณถามอะไร
Remy

3
ถูกต้อง. Microsoft SQL Server 2012 หรือรุ่นที่คุณใช้
Remy

5
การเขียนโปรแกรมเป็นเรื่องเกี่ยวกับตัวย่อในปัจจุบัน Lamp Stackลองมาตัวอย่างของคุณพูดคุยเกี่ยวกับ ผู้คนมากมายอาจจะพูดแค่ว่า LAMP หรือ WAMP ในทำนองเดียวกันแทนที่จะบอกว่า Microsoft SQL Server เราทำให้มันเป็น MS SQL Server เป็น MS SQL ไปเป็น MSSQL
ytpillai

23

ฉันไม่อยากจะเชื่อเลยว่าไม่มีใครพูดถึงว่า MySQL ไม่สนับสนุน Common Table Expressions (CTE) / "with" statement มันเป็นความแตกต่างที่น่ารำคาญ


ฉันใช้ CTE ทั้งสองเช่นเดียวกับ temp / variable tables สิ่งที่เป็นประโยชน์ของการใช้ CTE มากกว่าสองหลัง
Jared

8
@Jared การใช้ CTE ทำให้โค้ดอ่านได้เนื่องจากคุณไม่จำเป็นต้องกำหนดตาราง temp และเป็นประเภทคอลัมน์และโดยการใช้ cte คุณจะได้รับ IntelliSense สำหรับประเภทคอลัมน์และชื่อแม้ว่าคุณจะไม่ได้ระบุก็ตาม
Aleks

9
การเรียกซ้ำเป็นประโยชน์อย่างหนึ่งที่ต้องมีการกล่าวถึง
Faiz

2
Mysql 8 รองรับ CTE
Ivanzinho

ดังนั้นตอนนี้ mysql ก็ยังได้รับขนมวากยสัมพันธ์
TheLegendaryCopyCoder

15

MySQL มีแนวโน้มที่จะมีปัญหาฐานข้อมูลเสียหายมากขึ้นและจะไม่แก้ไขโดยอัตโนมัติเมื่อเกิดขึ้น ฉันทำงานกับ MSSQL มาตั้งแต่รุ่น 6.5 และอย่าลืมว่าปัญหาความเสียหายของฐานข้อมูลทำให้ฐานข้อมูลออฟไลน์ ไม่กี่ครั้งที่ฉันได้ทำงานกับ MySQL ในสภาพแวดล้อมการผลิตปัญหาความเสียหายของฐานข้อมูลทำให้ฐานข้อมูลทั้งหมดออฟไลน์จนกว่าเราจะใช้เวทย์มนตร์ "โปรดแก้ไขดัชนีที่เสียหาย" จาก commandline

จากประสบการณ์การทำธุรกรรมและระบบการบันทึกของ MSSQL นั้นจัดการได้ทุกอย่างไม่ว่าจะเป็นวงจรไฟฟ้าหรือความล้มเหลวของฮาร์ดแวร์โดยไม่เกิดความเสียหายกับฐานข้อมูลและหากมีสิ่งใดมารบกวนก็แก้ไขได้โดยอัตโนมัติ

นี่เป็นประสบการณ์ของฉันและฉันยินดีที่จะได้ยินว่าสิ่งนี้ได้รับการแก้ไขหรือเรากำลังทำอะไรผิดพลาด

http://dev.mysql.com/doc/refman/6.0/en/corrupted-myisam-tables.html

http://www.google.com/search?q=site%3Abugs.mysql.com+index+corruption


2
myIsam นั้นมีไว้สำหรับการตอบสนองที่รวดเร็วจริง ๆ มันไม่ได้บังคับให้ตรวจสอบกุญแจต่างประเทศในเหตุผลที่จะรวดเร็ว ลองใช้เครื่องมือ InnoDB หากทำอะไรที่ร้ายแรงกว่านี้ ฉันมีปัญหาที่น่ารังเกียจเกี่ยวกับ MS Access และไม่สามารถยกโทษให้พวกเขาสำหรับความรับผิดชอบดังกล่าวได้ดังนั้นฉันจึงไม่สนับสนุนฐานข้อมูลใด ๆ ของ MS ให้พวกเขาทำระบบปฏิบัติการและให้ธุรกิจที่จริงจังกับชุมชนโอเพ่นซอร์ส ... ไม่แน่ใจอะไรเลยตั้งแต่ออราเคิลผ่านการใช้งาน MySQL ไปแล้ว ..
ante.sabo

8
ยุติธรรมเพียงพอ แต่ก็โง่ที่จะเพิกเฉยต่อฐานข้อมูลของ Microsoft ตามการเข้าถึง เข้าถึงเป็นฐานข้อมูลเดสก์ท็อปและไม่เกี่ยวข้องกับ SQL Server คุณรู้หรือไม่ว่า StackOverflow ทำงานบน SQL Server ใช่ไหม
Jon Galloway

@JonGalloway: สวัสดีฉันเป็นผู้เริ่มต้น ฉันแค่อยากรู้ว่าการพูดอย่างเคร่งครัดเรามีอะไรเป็น MS SQL ฉันคิดว่าสิ่งที่มีอยู่คือ MS SQL Server คุณช่วยอธิบายฉันเรื่องนี้ได้ไหม มันอาจเป็นคำทั่วไปดังนั้นคุณอาจใช้มันเป็น MS SQL และมันก็สมเหตุสมผลสำหรับทุกคน แต่ฉันเป็นผู้เริ่มต้นดังนั้นฉันจึงติดอยู่กับคำศัพท์เพื่อรับแนวคิด กรุณาแจ้งให้เราทราบสิ่งที่คุณกำลังพูดถึงคือ MS SQL หรือ MS SQL Server?
แตก

1
เมื่อมีคนพูดว่า MSSQL, TSQL พวกเขามักจะหมายถึงภาษา SQL หรือ Transaction SQL (TSQL) ที่มาพร้อมกับผลิตภัณฑ์ Microsoft SQL Server สิ่งนี้ไม่ควรยากที่จะค้นหา อ่านen.wikipedia.org/wiki/Microsoft_SQL_Server
Faiz

@JonGalloway และนี่คือการอ้างอิง: stackoverflow.blog/2008/09/what-was-stack-overflow-built-with
Moayad Hani Abu Rmilah

7

ตรงไปตรงมาฉันไม่สามารถหาเหตุผลเดียวที่จะใช้ MySQL มากกว่า MSSQL ปัญหาก่อนหน้านี้เป็นค่าใช้จ่าย แต่ SQL Server 2005 Express นั้นฟรีและมี บริษัท โฮสติ้งเว็บจำนวนมากที่ให้บริการโฮสติ้งแบบเต็มรูปแบบกับเซิร์ฟเวอร์ sql ในราคาต่ำกว่า $ 5.00 ต่อเดือน

MSSQL นั้นใช้งานง่ายกว่าและมีคุณสมบัติมากมายที่ไม่มีอยู่ใน MySQL


2
ฉันคิดว่าราคาเป็นเหตุผลเดียวที่ทำให้เลือก MySQL มากกว่า MSSQL แน่นอนว่ามีโฮสติ้ง MSSQL ราคาถูก แต่หาได้ยากและมักถูก จำกัด การจัดเก็บอย่างรุนแรง
Craig

21
ฉันจะบอกว่าใบอนุญาตเป็นเหตุผลที่ดีที่จะไปกับ MySQL
ดร. ไมค์

3
group_concat และ REGEXP มากกว่าเหตุผลเพียงพอที่จะใช้ MySQL กว่า SQL Server (แม้ว่าทั้งสองใบอนุญาตถูกปิด)
Michele

1
อีกเหตุผลหนึ่งที่ฉันจะไปกับ MySQL ก็คือถ้าคุณต้องการฐานข้อมูลท้องถิ่นและคุณไปที่ MS SQL Server คุณจะต้องมีเครื่องวินโดว์ที่ใช้งานซึ่งรวมถึงต้นทุนการออกใบอนุญาตมากกว่า ... โดยเฉพาะถ้าคุณต้องการเก็บไว้ทั้งหมด ล่าสุด
Pedro Braz

2
ลงเพราะฉันคิดว่ามันลำเอียงและเห็นได้ชัดว่าไม่ถูกต้องที่จะบอกว่าไม่มีเหตุผลเดียวที่จะไปกับ MySQL มากกว่า MSSQL SQL Server Express มีข้อ จำกัด ที่รุนแรงที่ MySQL ทำไม่ได้และไม่มีโครงการที่ร้ายแรงที่จะใช้ Express ซึ่งหมายความว่าปัญหาด้านต้นทุนยังคงใช้ได้จริง บริษัท ที่ใหญ่ที่สุดส่วนใหญ่เลือก MySQL / MariaDB มากกว่า MSSQL โดยส่วนตัวแล้วฉันก็ต้องการเช่นกันไม่เพียง แต่เรื่องลิขสิทธิ์และค่าใช้จ่าย แต่เพราะในประสบการณ์ของฉัน MySQL นั้นง่ายมากที่จะทำงานกับ MySQL มีแนวโน้มที่จะทำงานได้ในขณะที่ฉันพบว่าตัวเองกำลังต่อสู้กับ MSSQL เป็นครั้งคราวเพื่อให้ได้สิ่งที่ฉันต้องการ
dallin

7

ดูเหมือนว่าทุกอย่างใน MySQL จะใกล้เคียงกับโลหะมากกว่าใน MSSQL และเอกสารก็ถือว่าเป็นแบบนั้น คุณจะต้องเข้าใจว่าดัชนีการกำหนดค่าระบบและเครื่องมือเพิ่มประสิทธิภาพทำงานอย่างไรภายใต้สถานการณ์ต่างๆ

"เครื่องมือเพิ่มประสิทธิภาพ" เป็นเครื่องมือแยกวิเคราะห์ ใน MSSQL แผนแบบสอบถามของคุณมักจะแปลกใจ (มักจะดีบางครั้งไม่ได้) ใน MySQL มันทำในสิ่งที่คุณขอให้ทำอย่างที่คุณคาดไว้ ซึ่งหมายความว่าคุณต้องมีความเข้าใจอย่างลึกซึ้งถึงวิธีการต่าง ๆ ที่อาจเกิดขึ้น

ไม่ได้สร้างโมเดลการทำธุรกรรมที่ดี (เอ็นจิ้น MyISAM เริ่มต้น)

การตั้งค่าระบบไฟล์เป็นปัญหาของคุณ

การกำหนดค่าฐานข้อมูลทั้งหมดเป็นปัญหาของคุณ - โดยเฉพาะขนาดแคชที่หลากหลาย

บางครั้งมันก็ดูดีที่สุดที่จะคิดว่ามันเป็น ad-hoc เฉพาะกิจสรรเสริญสดุดี Codd และ Date ไม่ได้มีน้ำหนักมากที่นี่ พวกเขาจะพูดด้วยความละอาย


3
Modern MySQL เป็นค่าเริ่มต้นของ Innodb แต่เป็นเพียงคำชี้แจง ฉันคิดว่าหลังจาก 5.1 หรือมากกว่านั้น Innodb รองรับการทำธุรกรรมกุญแจต่างประเทศและการล็อคระดับแถวเมื่อเทียบกับการล็อคระดับตารางด้วย MyISAM
โจเซฟแฮมิลตัน

5

ฉันคิดว่าหนึ่งในสิ่งสำคัญที่ต้องระวังคือรุ่นก่อน MySQL 5.0 ไม่ได้มีมุมมองเรียกและขั้นตอนการจัดเก็บ

เพิ่มเติมจากนี้จะมีการอธิบายในMySQL 5.0 หน้าดาวน์โหลด


4

@abdu

สิ่งสำคัญที่ฉันพบว่า MySQL มีมากกว่า MSSQL คือการสนับสนุนเขตเวลา - ความสามารถในการเปลี่ยนแปลงระหว่างเขตเวลาได้อย่างดีเนื่องจากการประหยัดเวลากลางวันนั้นยอดเยี่ยมมาก

เปรียบเทียบสิ่งนี้:

mysql> SELECT CONVERT_TZ('2008-04-01 12:00:00', 'UTC', 'America/Los_Angeles');
+-----------------------------------------------------------------+
| CONVERT_TZ('2008-04-01 12:00:00', 'UTC', 'America/Los_Angeles') |
+-----------------------------------------------------------------+
| 2008-04-01 05:00:00                                             |
+-----------------------------------------------------------------+

ที่เกี่ยวข้องกับคำตอบนี้

สำหรับความคิดเห็นที่ 'ง่ายต่อการใช้งาน' ฉันจะบอกว่าประเด็นก็คือพวกเขานั้นแตกต่างกันและถ้าคุณรู้จักใครจะมีค่าใช้จ่ายในการเรียนรู้อีกคน


นอกจากนี้ยังสนับสนุน ANSI ที่ถูกต้องสำหรับกลุ่มตามคอลัมน์ประทับเวลาอัตโนมัติ, เพจง่ายมาก ...
โจเอล Coehoorn

1
การสนับสนุนเขตเวลาของ MySQL หักลงอย่างมากฉันไม่คิดว่าเป็นคุณสมบัติที่มีประโยชน์ ทำในแอปพลิเคชันแทน
MarkR

ฉันไม่ได้มีปัญหากับการสนับสนุนเขตเวลาคุณช่วยไปดูรายละเอียดเพิ่มเติมหรือให้ลิงค์ได้ไหม?
Cebjyre

2
เหตุใดคุณจึงต้องการการสนับสนุนเขตเวลาในฐานข้อมูล ใช้ UTC ทุกที่และแสดงผลในส่วนหน้า / gui โดยใช้เขตเวลาท้องถิ่นของระบบปฏิบัติการ
Tiberiu-Ionuț Stan

4

ทั้งสองเป็นเซิร์ฟเวอร์ Product Sql ของ DBMS เป็นแอพพลิเคชั่นเชิงพาณิชย์ในขณะที่ MySql เป็นแอพพลิเคชั่น openouces ทั้งผลิตภัณฑ์มีคุณสมบัติที่คล้ายกันอย่างไรก็ตามเซิร์ฟเวอร์ sql ควรใช้สำหรับโซลูชันระดับองค์กรในขณะที่ mysql อาจเหมาะกับการใช้งานขนาดเล็ก การจำลองแบบความปลอดภัย granalar และที่สำคัญคุณต้องเซิร์ฟเวอร์ sql

MySql ใช้พื้นที่บนดิสก์น้อยลงและใช้หน่วยความจำและ cpu น้อยกว่าเซิร์ฟเวอร์ sql


3

ใครมีประสบการณ์ที่ดีกับ "พอร์ต" ของฐานข้อมูลจาก SQL Server ไปยัง MySQL?

มันควรจะเจ็บปวดพอสมควร! ฉันเปลี่ยนเวอร์ชันของ MySQL จาก 4.x เป็น 5.x และคำสั่งต่าง ๆ จะไม่ทำงานอีกต่อไปเหมือนที่เคยเป็น ตัววิเคราะห์คิวรีคือ "ปรับปรุง" ดังนั้นคำสั่งที่ปรับจูนก่อนหน้านี้สำหรับประสิทธิภาพจะไม่ทำงานอีกต่อไปตามที่คาดไว้

บทเรียนที่เรียนรู้จากการทำงานกับฐานข้อมูล MySQL 500GB: มันเป็นหัวข้อที่ละเอียดอ่อนและสิ่งอื่นนอกจากเรื่องเล็กน้อย!


2

@Cebjyre IDE ไม่ว่าจะเป็น Enterprise Manager หรือ Management Studio นั้นดีกว่าสิ่งที่ฉันเคยเห็นสำหรับ MySQL ฉันพูดว่า 'ใช้งานง่ายกว่า' เพราะฉันสามารถทำสิ่งต่าง ๆ ใน MSSQL โดยที่ MySQL ไม่มีลูกน้อง ใน MySQL ฉันไม่รู้ว่าจะปรับแต่งข้อความค้นหาได้อย่างไรเพียงแค่ดูแผนแบบสอบถามหรือดูสถิติ วิซาร์ดการปรับแต่งดัชนีใน MSSQL ใช้เวลาส่วนใหญ่ในการคาดเดาว่าดัชนีใดหายไปหรือหายไป

หนึ่งในข้อบกพร่องของ MySQL คือไม่มีขนาดสูงสุดสำหรับฐานข้อมูล ฐานข้อมูลจะเพิ่มขนาดจนเต็มดิสก์ ลองจินตนาการว่าดิสก์นี้กำลังแบ่งปันฐานข้อมูลกับผู้ใช้รายอื่นหรือไม่และแบบสอบถามทั้งหมดของพวกเขาล้มเหลวเนื่องจากฐานข้อมูลไม่สามารถเติบโตได้ ฉันได้รายงานปัญหานี้ไปยัง MySQL เมื่อนานมาแล้ว ฉันไม่คิดว่ามันคงที่


2
ในทางกลับกันฉันรู้สึกรำคาญกับคอนโซลการจัดการสตูดิโอที่ไม่เคารพการเลิกทำอย่างถูกต้อง (เป็นไปได้ที่จะมีคิวรีที่ถูกต้องที่มันฉายาเพราะไม่ทราบว่าข้อความได้รับการอัปเดตแล้ว) และการขาดแท็บ - การขยายตัว (เทียบกับ mysql shell) มี minuses ทั้งสองด้าน
Cebjyre

1

ใช้เวลาทำงานกับ MySQL ตั้งแต่ MSSQL ถึง MySQL syntax POV ฉันค้นหาตัวเองอย่าง จำกัด ในสิ่งที่ฉันสามารถทำได้

มีข้อ จำกัด ของ bizzare ในการอัพเดตตารางในขณะที่อ้างอิงตารางเดียวกันในระหว่างการอัพเดท

นอกจากนี้การอัปเดตจากไม่ทำงานและครั้งสุดท้ายที่ฉันตรวจสอบพวกเขาไม่สนับสนุนไวยากรณ์ Oracle MERGE INTO เช่นกัน นี่เป็นตัวหยุดการแสดงสำหรับฉันและฉันหยุดคิดว่าฉันจะไปที่ใดก็ได้กับ MySQL หลังจากนั้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.