<div id="docs-body">
 <div class="section">
  <div class="titlepage">
   <div>
    <div>
     <h3 class="title">
      <a name="features">
      </a>
      1.2.2 The Main Features of MySQL
     </h3>
    </div>
   </div>
  </div>
  <a class="indexterm" name="idm46045335204128">
  </a>
  <a class="indexterm" name="idm46045335203120">
  </a>
  <p>
   This section describes some of the important characteristics of
      the MySQL Database Software. In most respects, the roadmap applies
      to all versions of MySQL. For information about features as they
      are introduced into MySQL on a series-specific basis, see the
   <span class="quote">
    “
    <span class="quote">
     In a Nutshell
    </span>
    ”
   </span>
   section of the appropriate Manual:
  </p>
  <div class="itemizedlist">
   <ul class="itemizedlist" style="list-style-type: disc; ">
    <li class="listitem">
     <p>
      MySQL 8.4:
      <a class="xref" href="mysql-nutshell.html" title="1.4 What Is New in MySQL 8.4 since MySQL 8.0">
       Section 1.4, “What Is New in MySQL 8.4 since MySQL 8.0”
      </a>
     </p>
    </li>
    <li class="listitem">
     <p>
      MySQL 8.0:
      <a class="ulink" href="/doc/refman/8.0/en/mysql-nutshell.html" target="_top">
       What Is New in MySQL 8.0
      </a>
     </p>
    </li>
    <li class="listitem">
     <p>
      MySQL 5.7:
      <a class="ulink" href="/doc/refman/5.7/en/mysql-nutshell.html" target="_top">
       What Is New in MySQL 5.7
      </a>
     </p>
    </li>
   </ul>
  </div>
  <h4>
   <a name="idm46045335195824">
   </a>
   Internals and Portability
  </h4>
  <div class="itemizedlist">
   <ul class="itemizedlist" style="list-style-type: disc; ">
    <li class="listitem">
     <p>
      Written in C and C++.
     </p>
    </li>
    <li class="listitem">
     <p>
      Tested with a broad range of different compilers.
     </p>
    </li>
    <li class="listitem">
     <p>
      Works on many different platforms. See
      <a class="ulink" href="https://www.mysql.com/support/supportedplatforms/database.html" target="_blank">
       https://www.mysql.com/support/supportedplatforms/database.html
      </a>
      .
     </p>
    </li>
    <li class="listitem">
     <p>
      For portability, configured using
      <span class="command">
       <strong>
        CMake
       </strong>
      </span>
      .
     </p>
    </li>
    <li class="listitem">
     <p>
      Tested with Purify (a commercial memory leakage detector) as
          well as with Valgrind, a GPL tool
          (
      <a class="ulink" href="https://valgrind.org/" target="_blank">
       https://valgrind.org/
      </a>
      ).
     </p>
    </li>
    <li class="listitem">
     <p>
      Uses multi-layered server design with independent modules.
     </p>
    </li>
    <li class="listitem">
     <p>
      Designed to be fully multithreaded using kernel threads, to
          easily use multiple CPUs if they are available.
     </p>
    </li>
    <li class="listitem">
     <p>
      Provides transactional and nontransactional storage engines.
     </p>
    </li>
    <li class="listitem">
     <p>
      Uses very fast B-tree disk tables (
      <code class="literal">
       MyISAM
      </code>
      )
          with index compression.
     </p>
    </li>
    <li class="listitem">
     <p>
      Designed to make it relatively easy to add other storage
          engines. This is useful if you want to provide an SQL
          interface for an in-house database.
     </p>
    </li>
    <li class="listitem">
     <p>
      Uses a very fast thread-based memory allocation system.
     </p>
    </li>
    <li class="listitem">
     <p>
      Executes very fast joins using an optimized nested-loop join.
     </p>
    </li>
    <li class="listitem">
     <p>
      Implements in-memory hash tables, which are used as temporary
          tables.
     </p>
    </li>
    <li class="listitem">
     <p>
      Implements SQL functions using a highly optimized class
          library that should be as fast as possible. Usually there is
          no memory allocation at all after query initialization.
     </p>
    </li>
    <li class="listitem">
     <p>
      Provides the server as a separate program for use in a
          client/server networked environment.
     </p>
    </li>
   </ul>
  </div>
  <h4>
   <a name="idm46045335178736">
   </a>
   Data Types
  </h4>
  <div class="itemizedlist">
   <ul class="itemizedlist" style="list-style-type: disc; ">
    <li class="listitem">
     <p>
      Many data types: signed/unsigned integers 1, 2, 3, 4, and 8
          bytes long,
      <a class="link" href="floating-point-types.html" title="13.1.4 Floating-Point Types (Approximate Value) - FLOAT, DOUBLE">
       <code class="literal">
        FLOAT
       </code>
      </a>
      ,
      <a class="link" href="floating-point-types.html" title="13.1.4 Floating-Point Types (Approximate Value) - FLOAT, DOUBLE">
       <code class="literal">
        DOUBLE
       </code>
      </a>
      ,
      <a class="link" href="char.html" title="13.3.2 The CHAR and VARCHAR Types">
       <code class="literal">
        CHAR
       </code>
      </a>
      ,
      <a class="link" href="char.html" title="13.3.2 The CHAR and VARCHAR Types">
       <code class="literal">
        VARCHAR
       </code>
      </a>
      ,
      <a class="link" href="binary-varbinary.html" title="13.3.3 The BINARY and VARBINARY Types">
       <code class="literal">
        BINARY
       </code>
      </a>
      ,
      <a class="link" href="binary-varbinary.html" title="13.3.3 The BINARY and VARBINARY Types">
       <code class="literal">
        VARBINARY
       </code>
      </a>
      ,
      <a class="link" href="blob.html" title="13.3.4 The BLOB and TEXT Types">
       <code class="literal">
        TEXT
       </code>
      </a>
      ,
      <a class="link" href="blob.html" title="13.3.4 The BLOB and TEXT Types">
       <code class="literal">
        BLOB
       </code>
      </a>
      ,
      <a class="link" href="datetime.html" title="13.2.2 The DATE, DATETIME, and TIMESTAMP Types">
       <code class="literal">
        DATE
       </code>
      </a>
      ,
      <a class="link" href="time.html" title="13.2.3 The TIME Type">
       <code class="literal">
        TIME
       </code>
      </a>
      ,
      <a class="link" href="datetime.html" title="13.2.2 The DATE, DATETIME, and TIMESTAMP Types">
       <code class="literal">
        DATETIME
       </code>
      </a>
      ,
      <a class="link" href="datetime.html" title="13.2.2 The DATE, DATETIME, and TIMESTAMP Types">
       <code class="literal">
        TIMESTAMP
       </code>
      </a>
      ,
      <a class="link" href="year.html" title="13.2.4 The YEAR Type">
       <code class="literal">
        YEAR
       </code>
      </a>
      ,
      <a class="link" href="set.html" title="13.3.6 The SET Type">
       <code class="literal">
        SET
       </code>
      </a>
      ,
      <a class="link" href="enum.html" title="13.3.5 The ENUM Type">
       <code class="literal">
        ENUM
       </code>
      </a>
      , and OpenGIS spatial
          types. See
      <a class="xref" href="data-types.html" title="Chapter 13 Data Types">
       Chapter 13,
       <i>
        Data Types
       </i>
      </a>
      .
     </p>
    </li>
    <li class="listitem">
     <p>
      Fixed-length and variable-length string types.
     </p>
    </li>
   </ul>
  </div>
  <h4>
   <a name="idm46045335160624">
   </a>
   Statements and Functions
  </h4>
  <div class="itemizedlist">
   <ul class="itemizedlist" style="list-style-type: disc; ">
    <li class="listitem">
     <p>
      Full operator and function support in the
      <a class="link" href="select.html" title="15.2.13 SELECT Statement">
       <code class="literal">
        SELECT
       </code>
      </a>
      list and
      <code class="literal">
       WHERE
      </code>
      clause of queries. For example:
     </p>
     <div class="copytoclipboard-wrapper">
      <pre class="programlisting language-sql"><div class="docs-select-all right" id="sa3321667"><div class="copy-help left">Press ⌘+C to copy</div> <div class="right"><button class="clipboard-btn" title="Copy to Clipboard"><span class="icon-clipboard"></span></button></div></div><code class="language-sql"><span class="token prompt">mysql&gt;</span> <span class="token keyword">SELECT</span> <span class="token function">CONCAT</span><span class="token punctuation">(</span>first_name<span class="token punctuation">,</span> <span class="token string">' '</span><span class="token punctuation">,</span> last_name<span class="token punctuation">)</span>
<span class="token prompt">    -&gt;</span> <span class="token keyword">FROM</span> citizen
<span class="token prompt">    -&gt;</span> <span class="token keyword">WHERE</span> income<span class="token operator">/</span>dependents <span class="token operator">&gt;</span> <span class="token number">10000</span> <span class="token operator">AND</span> age <span class="token operator">&gt;</span> <span class="token number">30</span><span class="token punctuation">;</span></code></pre>
     </div>
    </li>
    <li class="listitem">
     <p>
      Full support for SQL
      <code class="literal">
       GROUP BY
      </code>
      and
      <code class="literal">
       ORDER BY
      </code>
      clauses. Support for group
          functions (
      <a class="link" href="aggregate-functions.html#function_count">
       <code class="literal">
        COUNT()
       </code>
      </a>
      ,
      <a class="link" href="aggregate-functions.html#function_avg">
       <code class="literal">
        AVG()
       </code>
      </a>
      ,
      <a class="link" href="aggregate-functions.html#function_std">
       <code class="literal">
        STD()
       </code>
      </a>
      ,
      <a class="link" href="aggregate-functions.html#function_sum">
       <code class="literal">
        SUM()
       </code>
      </a>
      ,
      <a class="link" href="aggregate-functions.html#function_max">
       <code class="literal">
        MAX()
       </code>
      </a>
      ,
      <a class="link" href="aggregate-functions.html#function_min">
       <code class="literal">
        MIN()
       </code>
      </a>
      , and
      <a class="link" href="aggregate-functions.html#function_group-concat">
       <code class="literal">
        GROUP_CONCAT()
       </code>
      </a>
      ).
     </p>
    </li>
    <li class="listitem">
     <p>
      Support for
      <code class="literal">
       LEFT OUTER JOIN
      </code>
      and
      <code class="literal">
       RIGHT OUTER JOIN
      </code>
      with both standard SQL and
          ODBC syntax.
     </p>
    </li>
    <li class="listitem">
     <p>
      Support for aliases on tables and columns as required by
          standard SQL.
     </p>
    </li>
    <li class="listitem">
     <p>
      Support for
      <a class="link" href="delete.html" title="15.2.2 DELETE Statement">
       <code class="literal">
        DELETE
       </code>
      </a>
      ,
      <a class="link" href="insert.html" title="15.2.7 INSERT Statement">
       <code class="literal">
        INSERT
       </code>
      </a>
      ,
      <a class="link" href="replace.html" title="15.2.12 REPLACE Statement">
       <code class="literal">
        REPLACE
       </code>
      </a>
      , and
      <a class="link" href="update.html" title="15.2.17 UPDATE Statement">
       <code class="literal">
        UPDATE
       </code>
      </a>
      to return the number of
          rows that were changed (affected), or to return the number of
          rows matched instead by setting a flag when connecting to the
          server.
     </p>
    </li>
    <li class="listitem">
     <p>
      Support for MySQL-specific
      <a class="link" href="show.html" title="15.7.7 SHOW Statements">
       <code class="literal">
        SHOW
       </code>
      </a>
      statements that retrieve information about databases, storage
          engines, tables, and indexes. Support for the
      <code class="literal">
       INFORMATION_SCHEMA
      </code>
      database, implemented
          according to standard SQL.
     </p>
    </li>
    <li class="listitem">
     <p>
      An
      <a class="link" href="explain.html" title="15.8.2 EXPLAIN Statement">
       <code class="literal">
        EXPLAIN
       </code>
      </a>
      statement to show
          how the optimizer resolves a query.
     </p>
    </li>
    <li class="listitem">
     <p>
      Independence of function names from table or column names. For
          example,
      <code class="literal">
       ABS
      </code>
      is a valid column name. The
          only restriction is that for a function call, no spaces are
          permitted between the function name and the
      <span class="quote">
       “
       <span class="quote">
        <code class="literal">
         (
        </code>
       </span>
       ”
      </span>
      that follows it. See
      <a class="xref" href="keywords.html" title="11.3 Keywords and Reserved Words">
       Section 11.3, “Keywords and Reserved Words”
      </a>
      .
     </p>
    </li>
    <li class="listitem">
     <p>
      You can refer to tables from different databases in the same
          statement.
     </p>
    </li>
   </ul>
  </div>
  <h4>
   <a name="idm46045335129248">
   </a>
   Security
  </h4>
  <div class="itemizedlist">
   <ul class="itemizedlist" style="list-style-type: disc; ">
    <li class="listitem">
     <p>
      A privilege and password system that is very flexible and
          secure, and that enables host-based verification.
     </p>
    </li>
    <li class="listitem">
     <p>
      Password security by encryption of all password traffic when
          you connect to a server.
     </p>
    </li>
   </ul>
  </div>
  <h4>
   <a name="idm46045335126416">
   </a>
   Scalability and Limits
  </h4>
  <div class="itemizedlist">
   <ul class="itemizedlist" style="list-style-type: disc; ">
    <li class="listitem">
     <p>
      Support for large databases. We use MySQL Server with
          databases that contain 50 million records. We also know of
          users who use MySQL Server with 200,000 tables and about
          5,000,000,000 rows.
     </p>
    </li>
    <li class="listitem">
     <p>
      Support for up to 64 indexes per table. Each index may consist
          of 1 to 16 columns or parts of columns. The maximum index
          width for
      <a class="link" href="innodb-storage-engine.html" title="Chapter 17 The InnoDB Storage Engine">
       <code class="literal">
        InnoDB
       </code>
      </a>
      tables is either
          767 bytes or 3072 bytes. See
      <a class="xref" href="innodb-limits.html" title="17.21 InnoDB Limits">
       Section 17.21, “InnoDB Limits”
      </a>
      .
          The maximum index width for
      <a class="link" href="myisam-storage-engine.html" title="18.2 The MyISAM Storage Engine">
       <code class="literal">
        MyISAM
       </code>
      </a>
      tables is 1000 bytes. See
      <a class="xref" href="myisam-storage-engine.html" title="18.2 The MyISAM Storage Engine">
       Section 18.2, “The MyISAM Storage Engine”
      </a>
      . An index may use a
          prefix of a column for
      <a class="link" href="char.html" title="13.3.2 The CHAR and VARCHAR Types">
       <code class="literal">
        CHAR
       </code>
      </a>
      ,
      <a class="link" href="char.html" title="13.3.2 The CHAR and VARCHAR Types">
       <code class="literal">
        VARCHAR
       </code>
      </a>
      ,
      <a class="link" href="blob.html" title="13.3.4 The BLOB and TEXT Types">
       <code class="literal">
        BLOB
       </code>
      </a>
      , or
      <a class="link" href="blob.html" title="13.3.4 The BLOB and TEXT Types">
       <code class="literal">
        TEXT
       </code>
      </a>
      column types.
     </p>
    </li>
   </ul>
  </div>
  <h4>
   <a name="idm46045335116416">
   </a>
   Connectivity
  </h4>
  <div class="itemizedlist">
   <ul class="itemizedlist" style="list-style-type: disc; ">
    <li class="listitem">
     <p>
      Clients can connect to MySQL Server using several protocols:
     </p>
     <div class="itemizedlist">
      <ul class="itemizedlist" style="list-style-type: circle; ">
       <li class="listitem">
        <p>
         Clients can connect using TCP/IP sockets on any platform.
        </p>
       </li>
       <li class="listitem">
        <p>
         On Windows systems, clients can connect using named pipes
              if the server is started with the
         <a class="link" href="server-system-variables.html#sysvar_named_pipe">
          <code class="literal">
           named_pipe
          </code>
         </a>
         system
              variable enabled. Windows servers also support
              shared-memory connections if started with the
         <a class="link" href="server-system-variables.html#sysvar_shared_memory">
          <code class="literal">
           shared_memory
          </code>
         </a>
         system
              variable enabled. Clients can connect through shared
              memory by using the
         <a class="link" href="connection-options.html#option_general_protocol">
          <code class="option">
           --protocol=memory
          </code>
         </a>
         option.
        </p>
       </li>
       <li class="listitem">
        <p>
         On Unix systems, clients can connect using Unix domain
              socket files.
        </p>
       </li>
      </ul>
     </div>
    </li>
    <li class="listitem">
     <p>
      MySQL client programs can be written in many languages. A
          client library written in C is available for clients written
          in C or C++, or for any language that provides C bindings.
     </p>
    </li>
    <li class="listitem">
     <p>
      APIs for C, C++, Eiffel, Java, Perl, PHP, Python, Ruby, and
          Tcl are available, enabling MySQL clients to be written in
          many languages. See
      <a class="xref" href="connectors-apis.html" title="Chapter 31 Connectors and APIs">
       Chapter 31,
       <i>
        Connectors and APIs
       </i>
      </a>
      .
     </p>
    </li>
    <li class="listitem">
     <p>
      The Connector/ODBC (MyODBC) interface provides MySQL support
          for client programs that use ODBC (Open Database Connectivity)
          connections. For example, you can use MS Access to connect to
          your MySQL server. Clients can be run on Windows or Unix.
          Connector/ODBC source is available. All ODBC 2.5 functions are
          supported, as are many others. See
      <a class="ulink" href="/doc/connector-odbc/en/" target="_top">
       MySQL Connector/ODBC Developer Guide
      </a>
      .
     </p>
    </li>
    <li class="listitem">
     <p>
      The Connector/J interface provides MySQL support for Java
          client programs that use JDBC connections. Clients can be run
          on Windows or Unix. Connector/J source is available. See
      <a class="ulink" href="/doc/connector-j/en/" target="_top">
       MySQL Connector/J Developer Guide
      </a>
      .
     </p>
    </li>
    <li class="listitem">
     <p>
      MySQL Connector/NET enables developers to easily create .NET applications
          that require secure, high-performance data connectivity with
          MySQL. It implements the required ADO.NET interfaces and
          integrates into ADO.NET aware tools. Developers can build
          applications using their choice of .NET languages. MySQL Connector/NET is
          a fully managed ADO.NET driver written in 100% pure C#. See
      <a class="ulink" href="/doc/connector-net/en/" target="_top">
       MySQL Connector/NET Developer Guide
      </a>
      .
     </p>
    </li>
   </ul>
  </div>
  <h4>
   <a name="idm46045341023408">
   </a>
   Localization
  </h4>
  <div class="itemizedlist">
   <ul class="itemizedlist" style="list-style-type: disc; ">
    <li class="listitem">
     <p>
      The server can provide error messages to clients in many
          languages. See
      <a class="xref" href="error-message-language.html" title="12.12 Setting the Error Message Language">
       Section 12.12, “Setting the Error Message Language”
      </a>
      .
     </p>
    </li>
    <li class="listitem">
     <p>
      Full support for several different character sets, including
      <code class="literal">
       latin1
      </code>
      (cp1252),
      <code class="literal">
       german
      </code>
      ,
      <code class="literal">
       big5
      </code>
      ,
      <code class="literal">
       ujis
      </code>
      , several
          Unicode character sets, and more. For example, the
          Scandinavian characters
      <span class="quote">
       “
       <span class="quote">
        <code class="literal">
         å
        </code>
       </span>
       ”
      </span>
      ,
      <span class="quote">
       “
       <span class="quote">
        <code class="literal">
         ä
        </code>
       </span>
       ”
      </span>
      and
      <span class="quote">
       “
       <span class="quote">
        <code class="literal">
         ö
        </code>
       </span>
       ”
      </span>
      are permitted in table
          and column names.
     </p>
    </li>
    <li class="listitem">
     <p>
      All data is saved in the chosen character set.
     </p>
    </li>
    <li class="listitem">
     <p>
      Sorting and comparisons are done according to the default
          character set and collation. It is possible to change this
          when the MySQL server is started (see
      <a class="xref" href="charset-server.html" title="12.3.2 Server Character Set and Collation">
       Section 12.3.2, “Server Character Set and Collation”
      </a>
      ). To see an example of very
          advanced sorting, look at the Czech sorting code. MySQL Server
          supports many different character sets that can be specified
          at compile time and runtime.
     </p>
    </li>
    <li class="listitem">
     <p>
      The server time zone can be changed dynamically, and
          individual clients can specify their own time zone. See
      <a class="xref" href="time-zone-support.html" title="7.1.15 MySQL Server Time Zone Support">
       Section 7.1.15, “MySQL Server Time Zone Support”
      </a>
      .
     </p>
    </li>
   </ul>
  </div>
  <h4>
   <a name="idm46045335079696">
   </a>
   Clients and Tools
  </h4>
  <div class="itemizedlist">
   <ul class="itemizedlist" style="list-style-type: disc; ">
    <li class="listitem">
     <p>
      MySQL includes several client and utility programs. These
          include both command-line programs such as
      <a class="link" href="mysqldump.html" title="6.5.4 mysqldump — A Database Backup Program">
       <span class="command">
        <strong>
         mysqldump
        </strong>
       </span>
      </a>
      and
      <a class="link" href="mysqladmin.html" title="6.5.2 mysqladmin — A MySQL Server Administration Program">
       <span class="command">
        <strong>
         mysqladmin
        </strong>
       </span>
      </a>
      , and graphical programs such as
      <a class="link" href="workbench.html" title="Chapter 33 MySQL Workbench">
       MySQL Workbench
      </a>
      .
     </p>
    </li>
    <li class="listitem">
     <p>
      MySQL Server has built-in support for SQL statements to check,
          optimize, and repair tables. These statements are available
          from the command line through the
      <a class="link" href="mysqlcheck.html" title="6.5.3 mysqlcheck — A Table Maintenance Program">
       <span class="command">
        <strong>
         mysqlcheck
        </strong>
       </span>
      </a>
      client. MySQL also includes
      <a class="link" href="myisamchk.html" title="6.6.4 myisamchk — MyISAM Table-Maintenance Utility">
       <span class="command">
        <strong>
         myisamchk
        </strong>
       </span>
      </a>
      , a very fast command-line utility
          for performing these operations on
      <code class="literal">
       MyISAM
      </code>
      tables. See
      <a class="xref" href="programs.html" title="Chapter 6 MySQL Programs">
       Chapter 6,
       <i>
        MySQL Programs
       </i>
      </a>
      .
     </p>
    </li>
    <li class="listitem">
     <p>
      MySQL programs can be invoked with the
      <code class="option">
       --help
      </code>
      or
      <code class="option">
       -?
      </code>
      option to obtain online assistance.
     </p>
    </li>
   </ul>
  </div>
 </div>
 <br/>
</div>
