<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl">
	<id>https://docs.moodle.org/2x/pl/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Stronk7</id>
	<title>MoodleDocs - Wkład użytkownika [pl]</title>
	<link rel="self" type="application/atom+xml" href="https://docs.moodle.org/2x/pl/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Stronk7"/>
	<link rel="alternate" type="text/html" href="https://docs.moodle.org/2x/pl/Specjalna:Wk%C5%82ad/Stronk7"/>
	<updated>2026-05-22T01:25:29Z</updated>
	<subtitle>Wkład użytkownika</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://docs.moodle.org/2x/pl/index.php?title=Installing_MSSQL_for_PHP&amp;diff=112305</id>
		<title>Installing MSSQL for PHP</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/2x/pl/index.php?title=Installing_MSSQL_for_PHP&amp;diff=112305"/>
		<updated>2014-05-05T01:41:57Z</updated>

		<summary type="html">&lt;p&gt;Stronk7: /* Using FreeTDS on Windows */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Installing Moodle}}== Introduction ==&lt;br /&gt;
&lt;br /&gt;
This short manual is suitable if you are trying to run Moodle using the SQL*Server (MSSQL) RDBMS. Steps detailed below must be performed &#039;&#039;&#039;before&#039;&#039;&#039; installing Moodle itself.&lt;br /&gt;
&lt;br /&gt;
Some of this may also apply if you wish to access an MSSQL server for external db authentication/enrollment. &lt;br /&gt;
&lt;br /&gt;
First of all, minimum required version of MSSQL has been stabilised to MSSQL 2005 (v.9).&lt;br /&gt;
&lt;br /&gt;
While PHP comes with one, more or less, standard extension (mssql) that provides access to MSSQL databases, early we found some hard limits on it. Basically such default extension has some limits that prevent us to use it at all (you can find more info about these problems [[Development:XMLDB problems#MSSQL, PHP, UTF-8 and UCS-2|here]]).&lt;br /&gt;
&lt;br /&gt;
So, in order to allow PHP (i.e. Moodle) to access to MSSQL DBs properly we have to install a &#039;&#039;&#039;mssql extension alternative&#039;&#039;&#039; to save us from the problems related above. See the sections below for details about the various options.&lt;br /&gt;
&lt;br /&gt;
== Installation overview ==&lt;br /&gt;
&lt;br /&gt;
1. Get MSSQL Server installed and running. ([http://www.microsoft.com/sql/editions/express/default.mspx A free limited version, SQL Server Express Edition] is available for testing.)&lt;br /&gt;
:Make sure that you choose mixed authentication (Windows and local accounts) to keep things simpler later.  You&#039;ll be asked to define the  &amp;quot;sa&amp;quot; account password (it&#039;s the default System Administrator account which has full access to all databases by default).&lt;br /&gt;
&lt;br /&gt;
2. Make sure MS SQL Server can accept incoming TCP/IP connections on port 1433 (the standard one).&lt;br /&gt;
:You might need to explicitly allow this in your Windows firewall (see the Control Panel).  You may also need to edit options in the :&#039;&#039;&#039;SQL Server Configuration Manager&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Network Configuration&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Protocols&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;TCP/IP enabled&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
3. Open the &amp;quot;SQL Server Management Studio&amp;quot; and create a new empty database.  If you are using the &amp;quot;sa&amp;quot; account then you don&#039;t need to do anything else here.&lt;br /&gt;
&lt;br /&gt;
4. Configure these settings in your created (and still empty) database:&lt;br /&gt;
Configure these settings in your created (and still empty) database:&lt;br /&gt;
:*Use a case sensitive collation, such as Latin1_General_CS_AS.&lt;br /&gt;
:*ANSI NULLS Enabled = True (ALTER DATABASE xxxx SET ANSI_NULLS ON)&lt;br /&gt;
:*Quoted Identifiers Enabled = True (ALTER DATABASE xxxx SET QUOTED_IDENTIFIER ON)&lt;br /&gt;
:*Is Read Committed transaction ON = True (ALTER DATABASE xxxx SET READ_COMMITTED_SNAPSHOT ON)&lt;br /&gt;
:** In older versions this is not settable via the DB properties. To set READ_COMMITTED_SNAPSHOT, there must be no active connections to the database except for the connection executing the ALTER command. If you are viewing the DB in the Server Management Studio, disconnect from any servers in the &amp;quot;Object Explorer&amp;quot; (right-click &amp;gt; Disconnect), then create a &amp;quot;New Query&amp;quot; and run the ALTER command. See http://msdn.microsoft.com/en-us/library/bb522682.aspx for details.&lt;br /&gt;
:** If your DB name starts with a number, you may need to put quotes around the DB name in the query.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5. Get PHP installed with a web server.   Unless you want to do it under IIS or some other way, the packages on the [http://download.moodle.org Moodle download page] are a good solution.&lt;br /&gt;
&lt;br /&gt;
6. Choose one of the following specific sections for your server to install the &#039;&#039;&#039;mssql extension alternative&#039;&#039;&#039; installed and running properly on your PHP box.&lt;br /&gt;
&lt;br /&gt;
7. Set the following settings in your php.ini file&lt;br /&gt;
:* mssql.textlimit = 20971520&lt;br /&gt;
:* mssql.textsize = 20971520&lt;br /&gt;
&lt;br /&gt;
8. With all this properly configured, you can continue with a [[Installing Moodle|standard Moodle installation]].&lt;br /&gt;
&lt;br /&gt;
== Microsoft Drivers for SQL Server for PHP ==&lt;br /&gt;
&lt;br /&gt;
In July 2008 Microsoft [http://social.msdn.microsoft.com/forums/en-US/sqldriverforphp/thread/a10e5202-9e41-4ff8-a33e-fbcc7b951be2/ released] a new SQL Server Driver for PHP. This is a PHP extension that allows PHP scripts to read and write data on Microsoft SQL Server databases and it overcomes the problems with the native SQL Server extension that was previously bundled with PHP.&lt;br /&gt;
&lt;br /&gt;
When using [[IIS]] it is strongly recommended to use the official Microsoft PHP installer from http://php.iis.net/, it should include the latest version of necessary drivers and it also simplifies future upgrades and configuration.&lt;br /&gt;
&lt;br /&gt;
For Windows servers with [[Apache]] see http://www.microsoft.com/en-us/download/details.aspx?id=20098.&lt;br /&gt;
&lt;br /&gt;
To know more about how to run Moodle with these drivers go to [[Using the Microsoft SQL Server Driver for PHP]].&lt;br /&gt;
&lt;br /&gt;
== Using FreeTDS on Windows ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&#039;&#039;&#039;Important Note 1:&#039;&#039;&#039; Due to some previous bugs it&#039;s highly recommendable to use PHP &amp;gt;= 5.2.6 and FreeTDS 0.82 + post-release patches ([http://tracker.moodle.org/browse/MDL-14725 more info]).&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If your web server is on Windows, use &#039;&#039;&#039;php_dblib.dll&#039;&#039;&#039;. Despite the name, it&#039;s FreeTDS compiled for Windows. (Go to this page for information on [https://docs.moodle.org/en/FreeTDS Using FreeTDS for Unix].) &lt;br /&gt;
&lt;br /&gt;
Originally we were using the DLLs available at [http://kromann.info/article.php?Id=11062598797760000 Frank Kromann&#039;s site], but they are outdated (using old versions of FreeTDS) and that has caused [http://tracker.moodle.org/browse/MDL-14725 some problems] in the past.&lt;br /&gt;
&lt;br /&gt;
So, right now, the recommended way to use FreeTDS under Windows is to use PHP 5.2.x following the following instructions:&lt;br /&gt;
&lt;br /&gt;
1. Download the appropriate copy of php_dblib.dll from the list below, and save it into your /PHP/ext directory.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; align=&amp;quot;center&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! PHP version !! [http://www.iis-aid.com/articles/my_word/difference_between_php_thread_safe_and_non_thread_safe_binaries Thread Safe]  !! FreeTDS version !! Download URL&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | PHP 5.2.x (vc6) || Yes || 0.82 + 20090302 patches || [http://download.moodle.org/download.php/dblib/php52/DBLIB_TS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| No || 0.82 + 20090302 patches || [http://download.moodle.org/download.php/dblib/php52/DBLIB_NOTS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | PHP 5.3.x (vc6) || Yes || 0.82 + 20090904 patches (unconfirmed) || [http://download.moodle.org/download.php/dblib/php53_vc6/DBLIB_TS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| No || 0.82 + 20090904 patches (unconfirmed) || [http://download.moodle.org/download.php/dblib/php53_vc6/DBLIB_NOTS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | PHP 5.3.x (vc9) || Yes || 0.82 + 20090904 patches || [http://download.moodle.org/download.php/dblib/php53_vc9/DBLIB_TS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| No || 0.82 + 20090904 patches || [http://download.moodle.org/download.php/dblib/php53_vc9/DBLIB_NOTS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | PHP 5.4.x (vc9) || Yes || 0.82 + 20110906 patches || [http://download.moodle.org/download.php/dblib/php54_vc9/DBLIB_TS.zip Download!] Mirrors: [http://inethub.olvi.net.ua/ftp/pub/soft/programming/php/ms%20sql%20driver%20for%20%20php%205.4.10/dblib_ts.zip 1] [ftp://inethub.olvi.net.ua/pub/soft/programming/php/ms%20sql%20driver%20for%20%20php%205.4.10/DBLIB_TS.zip 2 (ftp)] [http://www.sendspace.com/file/vtger3 3]&lt;br /&gt;
|-&lt;br /&gt;
| No || 0.82 + 20110906 patches || [http://download.moodle.org/download.php/dblib/php54_vc9/DBLIB_NOTS.zip Download!] Mirrors: [http://inethub.olvi.net.ua/ftp/pub/soft/programming/php/ms%20sql%20driver%20for%20%20php%205.4.10/dblib_nts.zip 1] [ftp://inethub.olvi.net.ua/pub/soft/programming/php/ms%20sql%20driver%20for%20%20php%205.4.10/DBLIB_NTS.zip 2 (ftp)] [http://www.sendspace.com/file/nkg2j4 3]&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | PHP 5.4.x (vc9) || Yes || 0.91.102 || [http://download.moodle.org/download.php/dblib/php54_vc9_091102/DBLIB_TS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| No || 0.91.102 || [http://download.moodle.org/download.php/dblib/php54_vc9_091102/DBLIB_NOTS.zip Download!]&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | PHP 5.5.x (vc11-x86) || Yes || 0.91.89 || [http://download.moodle.org/download.php/dblib/php55_vc11_x86/DBLIB_TS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| No || 0.91.89 || [http://download.moodle.org/download.php/dblib/php55_vc11_x86/DBLIB_NOTS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | PHP 5.5.x (vc11-x64) || Yes || 0.91.93 || [http://download.moodle.org/download.php/dblib/php55_vc11_x64/DBLIB_TS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| No || 0.91.93 || [http://download.moodle.org/download.php/dblib/php55_vc11_x64/DBLIB_NOTS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |  Thanks to [http://remote-learner.net/ Remote-Learner]] (Moodle [http://moodle.com/partners/ Partner]) and specially to Bryan Williams, donating one Visual C++ 6.0 Pro license to Moodle. Thanks to Trevor Johnson and his builds of the dblib extensions. Thanks to Daniele, Doug, Luis, Sean and many others by their collaboration in MDL-14725. Thanks to Frediano Ziglio and James K. Lowden from [http://freetds.org freetds.org] by their support. Thanks to [[User:Alastair Hole|Alastair Hole]] and Matt Rusiniak for providing the PHP 5.3 builds of the libraries. Thanks to Enyby by providing the PHP 5.4 builds of the libraries. Thanks to David Aylmer and Matt Rusiniak for providing the PHP 5.5 builds of the libraries. Thanks!&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
(alternatively here you can find some [[Development:Compiling FreeTDS under Windows|instructions to build those freetds extensions under win32]] yourself)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. FreeTDS requires the .NET Framework v1.1 to be installed.  You can [http://www.microsoft.com/downloads/details.aspx?FamilyID=262d25e3-f589-4842-8157-034d1e7cf3a3&amp;amp;DisplayLang=en download it from the Microsoft website] along with its [http://www.microsoft.com/downloads/details.aspx?FamilyID=a8f5654f-088e-40b2-bbdb-a83353618b38&amp;amp;DisplayLang=en service pack].  Alternatively, if you do not wish to install this framework, you can [http://kromann.info/ms-libs/msvcr71.dll download the required DLL] from Frank&#039;s site, and save it into your /PHP root directory.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. Edit your /PHP/php.ini file and add this line:&lt;br /&gt;
&lt;br /&gt;
  extension=php_dblib.dll &lt;br /&gt;
&lt;br /&gt;
Make sure that any lines referring to the php_mssql.dll extension are DISABLED (commented out).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. When the PHP engine loads the FreeTDS extension it needs to be passed certain infiormation in order to be able to connect to your Moodle database. To retrieve this information FreeTDS looks for a file called &#039;&#039;&#039;freetds.conf&#039;&#039;&#039; in the root folder of the server that PHP installed on (e.g. C:\).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;freetds.conf&#039;&#039;&#039; should have the following structure:&lt;br /&gt;
&lt;br /&gt;
  [global]&lt;br /&gt;
      host = xxx.xxx.xxx.xxx (host name or ip of the MSSQL server)&lt;br /&gt;
      port = 1433&lt;br /&gt;
      client charset = UTF-8&lt;br /&gt;
      tds version = 8.0&lt;br /&gt;
      text size = 20971520&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want to connect to a particular [http://msdn.microsoft.com/en-us/library/aa174516(SQL.80).aspx instance] of MSSQL you should specify the instance name:&lt;br /&gt;
&lt;br /&gt;
  [global]&lt;br /&gt;
      host = xxx.xxx.xxx.xxx (host name or ip of the MSSQL server)&lt;br /&gt;
      instance = xxx (instance name, e.g. INST2)&lt;br /&gt;
      port = 1433&lt;br /&gt;
      client charset = UTF-8&lt;br /&gt;
      tds version = 8.0&lt;br /&gt;
      text size = 20971520&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
*You can configure FreeTDS to look for the freetds.conf file in any directory that you want - you don&#039;t have to use C:\. To do this create a SYSTEM environment variable called &#039;&#039;&#039;FREETDS&#039;&#039;&#039; and point it to the directory where you have installed the freetds.conf file. If you do not set this environment variable FreeTDS will look for the freetds.conf file in the C:\ folder, which is the default. One possible benefit of setting the FREETDS environment variable and using a different installation directory for freetds.conf is that C:\ is very predictable to a hacker that knows anything about FreeTDS and that is the first place that he would look if he wanted to compromise your system. So, using a different installation directory would just make your system stronger. See the FreeTDS [http://www.freetds.org/userguide/envvar.htm Setting the environment variables] documentation for more information about this FREETDS environment variable.&lt;br /&gt;
&lt;br /&gt;
*Alternatively, you can [[Development:Compiling FreeTDS under Windows|recompile]] the FreeTDS extension yourself and change the default location to your preferred location at compile time. Then it is not necessary to create any environment variable. You must just ensure that freetds.conf is in the same folder that you specify when you compile php_dblib.dll.&lt;br /&gt;
&lt;br /&gt;
*MSSQL is usually installed with port 1433 as the default. However, if the port was changed on your server when you installed MSSQL then you need to specify the correct port number.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5. Your Moodle &#039;&#039;&#039;config.php&#039;&#039;&#039; should include lines like these:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
$CFG-&amp;gt;dbtype    = &#039;mssql&#039;;        // Required&lt;br /&gt;
$CFG-&amp;gt;dbhost    = &#039;localhost&#039;;      // assuming MS SQL is on the same server, otherwise use an IP&lt;br /&gt;
$CFG-&amp;gt;dbname    = &#039;moodle&#039;;         // or whatever you called the database you created&lt;br /&gt;
$CFG-&amp;gt;dbuser    = &#039;yourusername&#039;;   // I usually use the &#039;sa&#039; account (dbowner perms are enough)&lt;br /&gt;
$CFG-&amp;gt;dbpass    = &#039;yourpassword&#039;;&lt;br /&gt;
$CFG-&amp;gt;dbpersist =  false;&lt;br /&gt;
$CFG-&amp;gt;prefix    = &#039;mdl_&#039;;            //Prefix, you can change it, but NEVER leave it blank.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t have a config.php file yet, it can be generated as normal from the Moodle installer. Alternatively you can use the config-dist.php file that comes with the Moodle package to create your own config.php file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6. Restart or start your web server.  If Moodle still cannot communicate with the database server, please turn display_startup_errors to &amp;quot;On&amp;quot; in your /PHP/php.ini file, then restart the web server and check for any errors that may indicate incorrect DLL versions or missing dependencies.  These error reports, turned off by default in PHP, can be vital in locating a problem with new extension installations.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
7. Database conection test, try this PHP script, just put in a text file called test.php change (&#039;localhost&#039;, &#039;db_user&#039;, &#039;db_password&#039;) to suite your setup, and load from local host (http://localhost/test.php)...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
	$link = mssql_connect(&#039;localhost&#039;, &#039;db_user&#039;, &#039;db_password&#039;);&lt;br /&gt;
	if(!$link) {&lt;br /&gt;
		echo&#039;Could not connect&#039;;&lt;br /&gt;
		die(&#039;Could not connect: &#039; . mssql_error());&lt;br /&gt;
	}&lt;br /&gt;
	echo&#039;Successful connection&#039;;&lt;br /&gt;
	mssql_close($link);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
8. Install Moodle as usual.  Good luck!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Troubleshooting ===&lt;br /&gt;
If you encounter some problems you can try:&lt;br /&gt;
*check that you have DotNet framework 1.1 installed (later version are installed on Vista, but you could need this specific one)&amp;lt;br /&amp;gt;&lt;br /&gt;
*enable TCP/IP for MSSQL: SQL Server 2005 Network Configuration -&amp;gt; Protocols for MSSQLSERVER -&amp;gt; TCP/IP (Enable) -&amp;gt; Properties -&amp;gt; Ip Addresses -&amp;gt; 127.0.0.1 (Active+Enable)&amp;lt;br /&amp;gt;&lt;br /&gt;
*make sure the SQL Server Browser service is running SQL Server 2005 Network Configuration -&amp;gt; SQL Server Services&amp;lt;br /&amp;gt;&lt;br /&gt;
*if you are using SQL Server 2005 and you have the error &#039;&#039;4004: Unicode data in a Unicode-only collation or ntext data cannot be sent to clients using DB-Library (such as ISQL) or ODBC version 3.7 or earlier&#039;&#039;, try the ODBTP method (next chapter). The SQL Server complaining that it doesn&#039;t support pure Unicode via TDS or older versions of ODBC. Microsoft has deprecated DB-Library a long ago, in favor of ODBC, OLE DB, or SQL Native Client. Many new features of SQL 2005 aren&#039;t accessible via DB-Library so if you need them, you could have to switch away from tools based on TDS and DB-Library :(&lt;br /&gt;
&lt;br /&gt;
== FreeTDS on Linux (on Ubuntu by compiling an mssql.so extension) ==&lt;br /&gt;
This is a good read to [http://www.robert-gonzalez.com/2009/02/18/building-the-php-ms-sql-server-extension-from-source-on-ubuntu-810/ building a FreeTDS based mssql extension for apache on Ubuntu]. Do note that [http://www.freetds.org/news.html freeTDS] 0.91 was recently released, you can find latest versions [http://freetds.sourceforge.net/ here]. &lt;br /&gt;
&lt;br /&gt;
Note: the freetds.conf file you use should have &amp;quot;text size = 20971520&amp;quot; as mentioned in the FreeTDS on Windows section otherwise you might see sessions logging out or worse apache segmentation faults. Also see [[FreeTDS]].&lt;br /&gt;
&lt;br /&gt;
Note2: Please note that updating php tends to remove the freetds configurations. You might need to reconfigure freetds after an upgrade&lt;br /&gt;
&lt;br /&gt;
== Using FreeTDS on Debian Lenny ==&lt;br /&gt;
I found the following solution using:&lt;br /&gt;
* PHP Version 5.2.6-1+lenny9&lt;br /&gt;
* Microsoft SQL Server Enterprise Edition, version: 9.00.4053.00&lt;br /&gt;
&amp;lt;pre&amp;gt;apt-get install libsybdb5 freetds-common php5-sybase&lt;br /&gt;
/etc/init.d/apache2 restart&amp;lt;/pre&amp;gt;&lt;br /&gt;
At the end of the process, if all goes fine, you will find in the mssql section of phpinfo();&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;nicetable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! MSSQL Support&lt;br /&gt;
! enabled&lt;br /&gt;
|-&lt;br /&gt;
| Library version &lt;br /&gt;
| FreeTDS &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Once FreeTDS is correctly installed, don not forget to set it up following explanations in https://docs.moodle.org/en/FreeTDS&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Errors FAQ]]&lt;br /&gt;
* Using Moodle [http://moodle.org/mod/forum/view.php?id=28 Installation problems forum]&lt;br /&gt;
&lt;br /&gt;
[[Category:XMLDB]]&lt;br /&gt;
[[Category:DB]]&lt;br /&gt;
[[Category:SQL databases]]&lt;/div&gt;</summary>
		<author><name>Stronk7</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/2x/pl/index.php?title=Git_for_Administrators&amp;diff=110574</id>
		<title>Git for Administrators</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/2x/pl/index.php?title=Git_for_Administrators&amp;diff=110574"/>
		<updated>2014-03-01T10:21:53Z</updated>

		<summary type="html">&lt;p&gt;Stronk7: fixed link to forum discussion&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Installing Moodle}}&lt;br /&gt;
This page describes how to maintain a copy of Moodle on your production server which can easily be upgraded using Git. If you have customisations of Moodle core code, you are advised to follow the instructions in the [[Development:Quick Git start guide for Moodle development|Quick Git start guide for Moodle development]].&lt;br /&gt;
&lt;br /&gt;
To get the most of of Git it is worth making the effort to understand its basic concepts - see the See also section below. It can be a bit of a learning curve, especially if you are used to CVS or Subversion. &lt;br /&gt;
&lt;br /&gt;
== Getting hold of Git (Windows, OSX, Linux and others) ==&lt;br /&gt;
&lt;br /&gt;
Support for Git was, up until recently, mostly confined to Linux but builds are now available for most popular operating systems:&lt;br /&gt;
&lt;br /&gt;
* List of downloads from Git site - http://git-scm.com/download&lt;br /&gt;
&lt;br /&gt;
Once you have downloaded and installed your OS relevant git installation, the git commands in this document should work with your operating system.&lt;br /&gt;
&lt;br /&gt;
== Obtaining the code from Git ==&lt;br /&gt;
&lt;br /&gt;
The command line version of Git is discussed here. Graphical clients are little more than wrappers around the command line version, so you should be able to deduce the correct parameters quite easily. &lt;br /&gt;
&lt;br /&gt;
You can find the official Moodle git repository at git://git.moodle.org/moodle.git (with an official clone at git://github.com/moodle/moodle.git). To initialize your local checkout, use&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ git clone git://git.moodle.org/moodle.git                       (1)&lt;br /&gt;
$ cd moodle&lt;br /&gt;
$ git branch -a                                                   (2)&lt;br /&gt;
$ git branch --track MOODLE_26_STABLE origin/MOODLE_26_STABLE     (3)&lt;br /&gt;
$ git checkout MOODLE_26_STABLE                                   (4)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* The command (1) initializes the new local repository as a clone of the &#039;upstream&#039; (i.e. the remote server based) moodle.git repository. The upstream repository is called &#039;origin&#039; by default. It creates a new directory named &#039;&#039;moodle&#039;&#039;, where it downloads all the files. This operation can take a while as it is actually getting the entire history of all Moodle versions&lt;br /&gt;
* The command (2) lists all available branches.&lt;br /&gt;
* Use the command (3) to create a new local branch called MOODLE_26_STABLE and set it to track the remote branch MOODLE_26_STABLE from the upstream repository.&lt;br /&gt;
* The command (4) actually switches to the newly created local branch. &lt;br /&gt;
&lt;br /&gt;
Note that Git has a huge number of options for each command and it&#039;s actually possible to do the above process with a single command (left as an exercise!!).&lt;br /&gt;
&lt;br /&gt;
==Git from behind a firewall==&lt;br /&gt;
&lt;br /&gt;
Git uses a read-only protocol that may be blocked by your firewall (port 9418). If this is a problem, you can use Github&#039;s http version &amp;lt;nowiki&amp;gt;https://github.com/moodle/moodle.git&amp;lt;/nowiki&amp;gt;. It&#039;s a bit slower, so use the Git protocol if you can.&lt;br /&gt;
&lt;br /&gt;
== Updating your installation ==&lt;br /&gt;
&lt;br /&gt;
The Moodle development team performs integration and testing of fixed bugs every Monday and Tuesday. On Wednesday you can install all patches by updating your code. Check the [http://git.moodle.org/gw?p=moodle.git;a=summary shortlog] to see if the official repository has been already updated or not.&lt;br /&gt;
&lt;br /&gt;
To update your code to the latest version (on the MOODLE_26_STABLE branch) &#039;&#039;&#039;all&#039;&#039;&#039; you have to do is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cd /path/to/your/moodle/&lt;br /&gt;
$ git pull&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If this is a production site you should still consider the [[Upgrade]] instructions (e.g. take backups).&lt;br /&gt;
&lt;br /&gt;
== Installing a contributed extension from its Git repository ==&lt;br /&gt;
&lt;br /&gt;
This is one way to handle adding plugins from other Git repositories into your Moodle repository. Another way is to use Git Submodules. However, at the time of writing, this is one of Git&#039;s rougher features and should be regarded as an advanced option. &lt;br /&gt;
&lt;br /&gt;
For example, let us say we want to install the [[Certificate module]] from its Git repository into our Moodle 2.6.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cd /path/to/your/moodle/&lt;br /&gt;
$ cd mod                                                          (1)&lt;br /&gt;
$ git clone https://github.com/markn86/moodle-mod_certificate.git certificate     (2)&lt;br /&gt;
$ cd certificate&lt;br /&gt;
$ git checkout -b MOODLE_26_STABLE origin/MOODLE_26_STABLE        (3)&lt;br /&gt;
$ git branch -d master                                            (4)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The command (1) changes the current directory into the &#039;&#039;mod&#039;&#039; folder of your local Moodle clone. The command (2) creates a new subdirectory &#039;&#039;certificate&#039;&#039; and makes a local clone of vanilla Certificate repository. The command (3) creates a new local branch that will track the remote branch with a Certificate version for Moodle 2.6. The command (4) deletes the &#039;&#039;master&#039;&#039; that was created automatically by git-clone in (2) as we do not want it in this production checkout.&lt;br /&gt;
&lt;br /&gt;
Note: you should check first the compatibility of a module with your Moodle branch by asking directly to the Maintainer before cloning the repo or - if you want to guess it - by issueing the command below before running the command (3), in order to verify what is available among the branches:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ git branch -a&lt;br /&gt;
* master&lt;br /&gt;
  remotes/origin/HEAD -&amp;gt; origin/master&lt;br /&gt;
  remotes/origin/MOODLE_20_STABLE&lt;br /&gt;
  remotes/origin/MOODLE_21_STABLE&lt;br /&gt;
  remotes/origin/MOODLE_22_STABLE&lt;br /&gt;
  remotes/origin/MOODLE_23_STABLE&lt;br /&gt;
  remotes/origin/MOODLE_24_STABLE&lt;br /&gt;
  remotes/origin/MOODLE_25_STABLE&lt;br /&gt;
  remotes/origin/MOODLE_26_STABLE&lt;br /&gt;
  remotes/origin/master&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This will avoid an error message when you issue the command (3) against a nonexistent branch, e.g.:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
§ git checkout -b MOODLE_27_STABLE origin/MOODLE_27_STABLE&lt;br /&gt;
fatal: git checkout: updating paths is incompatible with switching branches.&lt;br /&gt;
Did you intend to checkout &#039;origin/MOODLE_27_STABLE&#039; which can not be resolved as commit?&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now it is wise to put the new directory mod/certificate/ to the list of ignored files of the main Moodle clone, otherwise a status of the main clone will keep reminding you that the new code has not been checked in.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cd /path/to/your/moodle/&lt;br /&gt;
$ echo /mod/certificate/ &amp;gt;&amp;gt; .git/info/exclude&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To update your Moodle installation now, you must visit both Git repositories and pull changes from upstream.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cd /path/to/your/moodle/&lt;br /&gt;
$ git pull&lt;br /&gt;
$ cd mod/certificate&lt;br /&gt;
$ git pull&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Writing a shell script with these lines in the root of Moodle installation is a very good idea. Otherwise it is easy to forget what Git repositories are there within the main Moodle repository.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
; Moodle Docs&lt;br /&gt;
* [[Git FAQ]]&lt;br /&gt;
* [[Windows installation using Git]]&lt;br /&gt;
* [[Git for Mac]]&lt;br /&gt;
* [[:dev:Moodle versions]]&lt;br /&gt;
* For some screenshots see [[User:Frank_Ralf/Git]] (still work in progress)&lt;br /&gt;
* For fixing a Tracker Issue (MDL) / Forking Moodle / CONTRIButing code ... [[User:Sam_Hemelryk/My_Moodle_Git_workflow]]&lt;br /&gt;
* [[Moodle_Production_Server_with_GIT|Case study Git + Moodle from Technical University Berlin]]&lt;br /&gt;
&lt;br /&gt;
; Moodle forum discussions&lt;br /&gt;
* [https://moodle.org/mod/forum/discuss.php?d=255175 Github and Moodle deployment for production]&lt;br /&gt;
* [https://moodle.org/mod/forum/discuss.php?d=213695 Got GIT installed on my site- here&#039;s how!]&lt;br /&gt;
* [http://moodle.org/mod/forum/discuss.php?d=168094 GIT help needed]&lt;br /&gt;
* [http://moodle.org/mod/forum/discuss.php?d=165236 Best way to manage CONTRIB code with GIT]&lt;br /&gt;
* [http://moodle.org/mod/forum/discuss.php?d=167063 Handy Git tip for tracking 3rd-party modules and plugins]&lt;br /&gt;
* [http://moodle.org/mod/forum/discuss.php?d=167730 Moodle Git repositories]&lt;br /&gt;
* [http://moodle.org/mod/forum/discuss.php?d=183693 Git and CVS]&lt;br /&gt;
* [http://moodle.org/mod/forum/discuss.php?d=208904 GIT for dummies]&lt;br /&gt;
* [http://moodle.org/mod/forum/discuss.php?d=211930 Git and upgrading misunderstanding]&lt;br /&gt;
* [https://moodle.org/mod/forum/discuss.php?d=231046 Clear git guide for Admins (not developers)]&lt;br /&gt;
&lt;br /&gt;
; External resources &lt;br /&gt;
* [http://thamblings.blogspot.com.au/2013/07/upgrading-moodle-from-git.html Deploying Moodle from git - Blog post from a production experience]&lt;br /&gt;
* [http://www.kernel.org/pub/software/scm/git/docs/everyday.html Everyday GIT With 20 Commands Or So]&lt;br /&gt;
* [http://gitref.org/ Git Reference]&lt;br /&gt;
* [http://progit.org/book/ Pro Git book]&lt;br /&gt;
* [http://eigenjoy.com/2008/05/15/git-from-the-bottom-up/ Git from the bottom up]&lt;br /&gt;
&lt;br /&gt;
[[ja:管理者用Git]]&lt;br /&gt;
[[fr:Git_pour_administrateurs]]&lt;br /&gt;
[[es:Git para Administradores]]&lt;/div&gt;</summary>
		<author><name>Stronk7</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/2x/pl/index.php?title=Verify_Database_Schema&amp;diff=108384</id>
		<title>Verify Database Schema</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/2x/pl/index.php?title=Verify_Database_Schema&amp;diff=108384"/>
		<updated>2013-12-14T15:46:26Z</updated>

		<summary type="html">&lt;p&gt;Stronk7: Get rid of databases forum link. [https://moodle.org/mod/forum/discuss.php?d=217775]&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Installing Moodle}}&lt;br /&gt;
If you have been upgrading your Moodle site over several versions, it is possible (likely even) that some differences may have crept in between the database table definitions (the &amp;quot;schema&amp;quot;) in your database and the version you would get creating a new empty site. This happens because of small errors or oversights in the upgrade scripts. Most of these differences are not harmful, but some may cause strange or unexpected errors. For example, if a default value has been added to a field and this was not reflected in an upgrade script code that assumes the presence of the default may fail to work as expected. &lt;br /&gt;
&lt;br /&gt;
The solution is after doing an upgrade (or, if your problem is that the upgrade fails, before) to compare the database schema of the &amp;quot;production&amp;quot; site to that of a newly created site (where no upgrades have been performed) using &#039;&#039;&#039;exactly&#039;&#039;&#039; the same code base. There are a number of ways of doing this, but this article outlines a simple way using the Unix command line.&lt;br /&gt;
&lt;br /&gt;
* Complete the upgrade&lt;br /&gt;
* Generate the database schema from your recently upgraded site using the following command:&lt;br /&gt;
    # MySQL&lt;br /&gt;
    mysqldump --no-data -u root -p &#039;&#039;myproductiondb&#039;&#039; &amp;gt;production.schema&lt;br /&gt;
    # PostgreSQL&lt;br /&gt;
    pg_dump --schema-only -U postgres &#039;&#039;myproductiondb&#039;&#039; &amp;gt; production.schema&lt;br /&gt;
* Copy the code  of your production database to a new (web accessible) location (this is important, it *must* be the same version)&lt;br /&gt;
* Create a new, empty database and moodledata area for the new site as per the [[Installation]] instructions&lt;br /&gt;
* Edit the config.php file to point at the new database and locations, or delete it and use the install script&lt;br /&gt;
* Run the install script to generate the (if applicable) config.php file and the database (admin and site values are not important)&lt;br /&gt;
* Generate the database schema from your new site using the following command:&lt;br /&gt;
    # MySQL&lt;br /&gt;
    mysqldump --no-data -u root -p &#039;&#039;mycleandb&#039;&#039; &amp;gt;clean.schema&lt;br /&gt;
    # PostgreSQL&lt;br /&gt;
    pg_dump --schema-only -U postgres &#039;&#039;mycleandb&#039;&#039; &amp;gt; clean.schema&lt;br /&gt;
* Run the following command to detect the differences&lt;br /&gt;
    diff -u production.schema clean.schema &amp;gt;db.diff&lt;br /&gt;
&lt;br /&gt;
You can now look at &#039;&#039;db.diff&#039;&#039; with your favorite editor to see the differences.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; The above obviously applies to MySQL databases. Other databases are likely to have a similar function to dump only the schema. For example PostgreSQL has the &#039;&#039;&#039;pg_dump&#039;&#039;&#039; command. The remainder of the discussion still applies. &lt;br /&gt;
&lt;br /&gt;
==Interpreting the diff file==&lt;br /&gt;
&lt;br /&gt;
Firstly here&#039;s a (real) example:&lt;br /&gt;
&lt;br /&gt;
     --&lt;br /&gt;
     -- Table structure for table `mdl_backup_config`&lt;br /&gt;
        @@ -129,11 +93,11 @@&lt;br /&gt;
         DROP TABLE IF EXISTS `mdl_backup_config`;&lt;br /&gt;
         CREATE TABLE `mdl_backup_config` (&lt;br /&gt;
    -  `id` int(10) unsigned NOT NULL auto_increment,&lt;br /&gt;
    +  `id` bigint(10) unsigned NOT NULL auto_increment,&lt;br /&gt;
       `name` varchar(255) NOT NULL default &#039;&#039;,&lt;br /&gt;
       `value` varchar(255) NOT NULL default &#039;&#039;,&lt;br /&gt;
        PRIMARY KEY  (`id`),&lt;br /&gt;
    -  UNIQUE KEY `name` (`name`)&lt;br /&gt;
    +  UNIQUE KEY `mdl_backconf_nam_uix` (`name`)&lt;br /&gt;
         ) ENGINE=MyISAM AUTO_INCREMENT=15 DEFAULT CHARSET=utf8 COMMENT=&#039;To store backup configuration variables&#039;;&lt;br /&gt;
&lt;br /&gt;
The file may have lots of blocks of changes. The - lines show lines to be taken out and the + lines the ones to replace them (from the production to the clean). So here, the int has been replaced with a bigint and the key name changed. Both of these, technically, should have been changed at some point by upgrade scripts but have been missed. In this case they are unlikely to affect the operation of Moodle. &lt;br /&gt;
&lt;br /&gt;
===Too many changes to track manually?===&lt;br /&gt;
&lt;br /&gt;
You can also use database management programs to synchronize old and new Moodle databases.&lt;br /&gt;
&lt;br /&gt;
For example [http://wb.mysql.com/ MySQL Workbench] for MySQL databases.&lt;br /&gt;
&lt;br /&gt;
This is very useful, if you have a lot of changes.&lt;br /&gt;
&lt;br /&gt;
If you can work a Unix/Linux command line the Python script [http://schemasync.org/ Schema Sync] provides a quick and simple way to generate all the commands to update your database.&lt;br /&gt;
&lt;br /&gt;
==Should I worry?==&lt;br /&gt;
&lt;br /&gt;
Changes in field types (as long as they are compatible) and key name changes seem to be the common issues but &#039;&#039;&#039;should&#039;&#039;&#039; not cause problems. Things to look out for would be along the lines of missing fields and changes to default values.&lt;br /&gt;
&lt;br /&gt;
If you are about to upgrade to Moodle 2.0 you should be more concerned. In order for the upgrade to proceed smoothly it is a very good idea to correct these problems.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* The missing indexes report in &#039;&#039;SiteAdmin-&amp;gt;Misc-&amp;gt;XMLDB editor-&amp;gt;Check Indexes&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[de:Datenbank-Schema prüfen]]&lt;br /&gt;
[[fr:Vérification du schéma de la base de données]]&lt;/div&gt;</summary>
		<author><name>Stronk7</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/2x/pl/index.php?title=PostgreSQL&amp;diff=108383</id>
		<title>PostgreSQL</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/2x/pl/index.php?title=PostgreSQL&amp;diff=108383"/>
		<updated>2013-12-14T15:43:12Z</updated>

		<summary type="html">&lt;p&gt;Stronk7: Get rid of databases forum link. [https://moodle.org/mod/forum/discuss.php?d=217775]&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Installing Moodle}}&lt;br /&gt;
PostgreSQL is one of the two databases that is fully supported by Moodle. A database is a required component of any Moodle installation.&lt;br /&gt;
&lt;br /&gt;
== Creating Moodle Database ==&lt;br /&gt;
&lt;br /&gt;
These instructions assume that the database server and web server are on the same machine. If that is not the case you have some more work to do. See the PostgreSQL documentation for further details. &lt;br /&gt;
&lt;br /&gt;
* Log into the PostgreSQL command line client. The exact form depends on how your PostgreSQL is configured but will be something like&lt;br /&gt;
&lt;br /&gt;
    $ psql -U postgres&lt;br /&gt;
    Password for user postgres:&lt;br /&gt;
&lt;br /&gt;
Enter the password for your &#039;postgres&#039; user set during installation. After some preamble you should see the prompt &#039;&#039;postgres=#&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
* Create the user for the Moodle database and assign a password:&lt;br /&gt;
&lt;br /&gt;
    postgres=# CREATE USER moodleuser WITH PASSWORD &#039;yourpassword&#039;;&lt;br /&gt;
&lt;br /&gt;
Provide a suitably strong password. Please note that the actual authentication method depends on your PostgreSQL server&#039;s pg_hba.conf file. Some authentication methods (like ident) do not require the password.&lt;br /&gt;
&lt;br /&gt;
* Create the database:&lt;br /&gt;
&lt;br /&gt;
    postgres=# CREATE DATABASE moodle WITH OWNER moodleuser;&lt;br /&gt;
&lt;br /&gt;
== Character set and collation ==&lt;br /&gt;
&lt;br /&gt;
If the PostgreSQL server&#039;s default collation does not suit your needs, you can provide explicit LC_CTYPE (character classification) and LC_COLLATE (string sort order) setting for your Moodle database. The following example creates new database called &#039;moodle&#039; optimised for a Czech Moodle site:&lt;br /&gt;
&lt;br /&gt;
    postgres=# CREATE DATABASE moodle WITH OWNER moodleuser ENCODING &#039;UTF8&#039; LC_COLLATE=&#039;cs_CZ.utf8&#039; LC_CTYPE=&#039;cs_CZ.utf8&#039; TEMPLATE=template0;&lt;br /&gt;
&lt;br /&gt;
For more details refer to [http://www.postgresql.org/docs/9.1/static/multibyte.html Character Set Support] chapter in PostgreSQL manual.&lt;br /&gt;
&lt;br /&gt;
To make sure the database was created correctly, use the &#039;&#039;\l&#039;&#039; at the psql console or execute &#039;&#039;psql -l&#039;&#039; shell command. You should get something like&lt;br /&gt;
&lt;br /&gt;
    postgres=# \l&lt;br /&gt;
                                       List of databases&lt;br /&gt;
       Name    |  Owner     | Encoding |  Collation  |    Ctype    |   Access privileges   &lt;br /&gt;
    -----------+------------+----------+-------------+-------------+-----------------------&lt;br /&gt;
     moodle    | moodleuser | UTF8     | cs_CZ.utf8  | cs_CZ.utf8  | &lt;br /&gt;
     postgres  | postgres   | UTF8     | en_US.UTF-8 | en_US.UTF-8 | &lt;br /&gt;
     template0 | postgres   | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres&lt;br /&gt;
                                                                   : postgres=CTc/postgres&lt;br /&gt;
     template1 | postgres   | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres&lt;br /&gt;
                                                                   : postgres=CTc/postgres&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.postgresql.org PostgreSQL home page]&lt;br /&gt;
* [http://wiki.postgresql.org/wiki/Tuning_Your_PostgreSQL_Server Tuning Your PostgreSQL Server]&lt;br /&gt;
* [[Arguments in favour of PostgreSQL]]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Postgres Wikipedia article on PostgerSQL]&lt;br /&gt;
* Using Moodle [http://moodle.org/mod/forum/discuss.php?d=49195 Upgrading to 1.6 and may need to switch to PostgreSQL] forum discussion&lt;br /&gt;
&lt;br /&gt;
[[Category:SQL databases]]&lt;br /&gt;
&lt;br /&gt;
[[es:PostgreSQL]]&lt;br /&gt;
[[ja:PostgreSQL]]&lt;/div&gt;</summary>
		<author><name>Stronk7</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/2x/pl/index.php?title=MySQL&amp;diff=108382</id>
		<title>MySQL</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/2x/pl/index.php?title=MySQL&amp;diff=108382"/>
		<updated>2013-12-14T15:42:46Z</updated>

		<summary type="html">&lt;p&gt;Stronk7: Get rid of databases forum link. [https://moodle.org/mod/forum/discuss.php?d=217775]&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Installing Moodle}}&lt;br /&gt;
MySQL is one of the supported databases that underpins a Moodle installation. &lt;br /&gt;
&lt;br /&gt;
== Installing MySQL ==&lt;br /&gt;
&lt;br /&gt;
* If you are running Linux your preference should be to install using your distributions package manager. This ensures you will get any available updates. &lt;br /&gt;
* There are installers available for most popular operating systems at http://www.mysql.com/downloads/mysql/.&lt;br /&gt;
* It is possible and reasonably straightforward to build mysql from source but it is not recommended (the pre-built binaries are supposedly better optimised).&lt;br /&gt;
* Make sure you set a password for the &#039;root&#039; user (see http://dev.mysql.com/doc/refman/5.0/en/default-privileges.html).&lt;br /&gt;
* Consider installing and configuring my.cnf (the MySQL settings file) to suit your needs. The default configuration is usually very conservative in respect of memory usage versus performance.&lt;br /&gt;
&lt;br /&gt;
== Creating Moodle database ==&lt;br /&gt;
&lt;br /&gt;
These are the steps to create an empty Moodle database. Substitute your own database name, user name and password as appropriate.&lt;br /&gt;
&lt;br /&gt;
The instructions assume that the web server and MySQL server are on the same machine. In this case the &#039;dbhost&#039; is &#039;localhost&#039;. If they are on different machines substitute the name of the web server for &#039;localhost&#039; in the following instructions and the &#039;dbhost&#039; setting will be the name of the database server. &lt;br /&gt;
&lt;br /&gt;
=== Command line === &lt;br /&gt;
&lt;br /&gt;
* To create a database using the &#039;mysql&#039; command line client, first log into MySQL&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ mysql -u root -p&lt;br /&gt;
Enter password: &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(Enter the password you previously set - or been given - for the MySQL &#039;root&#039; user). After some pre-amble this should take you to the &#039;&#039;mysql&amp;gt;&#039;&#039; prompt.&lt;br /&gt;
* Create a new database (called &#039;moodle&#039; - substitute your own name if required).  We recommend you use &#039;&#039;&#039;utf8_unicode_ci&#039;&#039;&#039; for collation.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mysql&amp;gt; CREATE DATABASE moodle DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Add a user/password with the minimum needed permissions:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mysql&amp;gt; GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,CREATE TEMPORARY TABLES,DROP,INDEX,ALTER ON moodle.* TO moodleuser@localhost IDENTIFIED BY &#039;yourpassword&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
...which creates a user called &#039;moodleuser&#039; with a password &#039;yourpassword&#039;. Make sure you invent a strong password and resist the temptation to &#039;GRANT ALL&#039;.&lt;br /&gt;
&lt;br /&gt;
=== phpMyAdmin ===&lt;br /&gt;
&lt;br /&gt;
[http://www.phpmyadmin.net/ phpMyAdmin] is a web based administration tool for MySQL. If this is available you can use it to create a new database. Make sure that you select &#039;UTF8&#039; as the default character set.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[MariaDB]]&lt;br /&gt;
* [http://www.mysql.com/ The MySQL homepage]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/MySQL Wikipedia article about &#039;&#039;MySQL&#039;&#039;]&lt;br /&gt;
* [http://forums.mysql.com/read.php?24,92131,92131 List of articles on MySQL performance tuning]&lt;br /&gt;
&lt;br /&gt;
[[Category:SQL databases]]&lt;br /&gt;
&lt;br /&gt;
[[ja:MySQL]]&lt;br /&gt;
[[de:MySQL]]&lt;/div&gt;</summary>
		<author><name>Stronk7</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/2x/pl/index.php?title=Installing_MSSQL_for_PHP&amp;diff=108376</id>
		<title>Installing MSSQL for PHP</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/2x/pl/index.php?title=Installing_MSSQL_for_PHP&amp;diff=108376"/>
		<updated>2013-12-13T19:32:25Z</updated>

		<summary type="html">&lt;p&gt;Stronk7: 93, is 91.93 (in Matt Rusiniak words)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Installing Moodle}}== Introduction ==&lt;br /&gt;
&lt;br /&gt;
This short manual is suitable if you are trying to run Moodle using the SQL*Server (MSSQL) RDBMS. Steps detailed below must be performed &#039;&#039;&#039;before&#039;&#039;&#039; installing Moodle itself.&lt;br /&gt;
&lt;br /&gt;
Some of this may also apply if you wish to access an MSSQL server for external db authentication/enrollment. &lt;br /&gt;
&lt;br /&gt;
First of all, minimum required version of MSSQL has been stabilised to MSSQL 2005 (v.9).&lt;br /&gt;
&lt;br /&gt;
While PHP comes with one, more or less, standard extension (mssql) that provides access to MSSQL databases, early we found some hard limits on it. Basically such default extension has some limits that prevent us to use it at all (you can find more info about these problems [[Development:XMLDB problems#MSSQL, PHP, UTF-8 and UCS-2|here]]).&lt;br /&gt;
&lt;br /&gt;
So, in order to allow PHP (i.e. Moodle) to access to MSSQL DBs properly we have to install a &#039;&#039;&#039;mssql extension alternative&#039;&#039;&#039; to save us from the problems related above. See the sections below for details about the various options.&lt;br /&gt;
&lt;br /&gt;
== Installation overview ==&lt;br /&gt;
&lt;br /&gt;
1. Get MSSQL Server installed and running. ([http://www.microsoft.com/sql/editions/express/default.mspx A free limited version, SQL Server Express Edition] is available for testing.)&lt;br /&gt;
:Make sure that you choose mixed authentication (Windows and local accounts) to keep things simpler later.  You&#039;ll be asked to define the  &amp;quot;sa&amp;quot; account password (it&#039;s the default System Administrator account which has full access to all databases by default).&lt;br /&gt;
&lt;br /&gt;
2. Make sure MS SQL Server can accept incoming TCP/IP connections on port 1433 (the standard one).&lt;br /&gt;
:You might need to explicitly allow this in your Windows firewall (see the Control Panel).  You may also need to edit options in the :&#039;&#039;&#039;SQL Server Configuration Manager&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Network Configuration&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Protocols&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;TCP/IP enabled&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
3. Open the &amp;quot;SQL Server Management Studio&amp;quot; and create a new empty database.  If you are using the &amp;quot;sa&amp;quot; account then you don&#039;t need to do anything else here.&lt;br /&gt;
&lt;br /&gt;
4. Configure these settings in your created (and still empty) database:&lt;br /&gt;
Configure these settings in your created (and still empty) database:&lt;br /&gt;
:*Use a case sensitive collation, such as Latin1_General_CS_AS.&lt;br /&gt;
:*ANSI NULLS Enabled = True (ALTER DATABASE xxxx SET ANSI_NULLS ON)&lt;br /&gt;
:*Quoted Identifiers Enabled = True (ALTER DATABASE xxxx SET QUOTED_IDENTIFIER ON)&lt;br /&gt;
:*Is Read Committed transaction ON = True (ALTER DATABASE xxxx SET READ_COMMITTED_SNAPSHOT ON)&lt;br /&gt;
:** In older versions this is not settable via the DB properties. To set READ_COMMITTED_SNAPSHOT, there must be no active connections to the database except for the connection executing the ALTER command. If you are viewing the DB in the Server Management Studio, disconnect from any servers in the &amp;quot;Object Explorer&amp;quot; (right-click &amp;gt; Disconnect), then create a &amp;quot;New Query&amp;quot; and run the ALTER command. See http://msdn.microsoft.com/en-us/library/bb522682.aspx for details.&lt;br /&gt;
:** If your DB name starts with a number, you may need to put quotes around the DB name in the query.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5. Get PHP installed with a web server.   Unless you want to do it under IIS or some other way, the packages on the [http://download.moodle.org Moodle download page] are a good solution.&lt;br /&gt;
&lt;br /&gt;
6. Choose one of the following specific sections for your server to install the &#039;&#039;&#039;mssql extension alternative&#039;&#039;&#039; installed and running properly on your PHP box.&lt;br /&gt;
&lt;br /&gt;
7. Set the following settings in your php.ini file&lt;br /&gt;
:* mssql.textlimit = 20971520&lt;br /&gt;
:* mssql.textsize = 20971520&lt;br /&gt;
&lt;br /&gt;
8. With all this properly configured, you can continue with a [[Installing Moodle|standard Moodle installation]].&lt;br /&gt;
&lt;br /&gt;
== Microsoft Drivers for SQL Server for PHP ==&lt;br /&gt;
&lt;br /&gt;
In July 2008 Microsoft [http://social.msdn.microsoft.com/forums/en-US/sqldriverforphp/thread/a10e5202-9e41-4ff8-a33e-fbcc7b951be2/ released] a new SQL Server Driver for PHP. This is a PHP extension that allows PHP scripts to read and write data on Microsoft SQL Server databases and it overcomes the problems with the native SQL Server extension that was previously bundled with PHP.&lt;br /&gt;
&lt;br /&gt;
When using [[IIS]] it is strongly recommended to use the official Microsoft PHP installer from http://php.iis.net/, it should include the latest version of necessary drivers and it also simplifies future upgrades and configuration.&lt;br /&gt;
&lt;br /&gt;
For Windows servers with [[Apache]] see http://www.microsoft.com/en-us/download/details.aspx?id=20098.&lt;br /&gt;
&lt;br /&gt;
To know more about how to run Moodle with these drivers go to [[Using the Microsoft SQL Server Driver for PHP]].&lt;br /&gt;
&lt;br /&gt;
== Using FreeTDS on Windows ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&#039;&#039;&#039;Important Note 1:&#039;&#039;&#039; Due to some previous bugs it&#039;s highly recommendable to use PHP &amp;gt;= 5.2.6 and FreeTDS 0.82 + post-release patches ([http://tracker.moodle.org/browse/MDL-14725 more info]).&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If your web server is on Windows, use &#039;&#039;&#039;php_dblib.dll&#039;&#039;&#039;. Despite the name, it&#039;s FreeTDS compiled for Windows. (Go to this page for information on [https://docs.moodle.org/en/FreeTDS Using FreeTDS for Unix].) &lt;br /&gt;
&lt;br /&gt;
Originally we were using the DLLs available at [http://kromann.info/article.php?Id=11062598797760000 Frank Kromann&#039;s site], but they are outdated (using old versions of FreeTDS) and that has caused [http://tracker.moodle.org/browse/MDL-14725 some problems] in the past.&lt;br /&gt;
&lt;br /&gt;
So, right now, the recommended way to use FreeTDS under Windows is to use PHP 5.2.x following the following instructions:&lt;br /&gt;
&lt;br /&gt;
1. Download the appropriate copy of php_dblib.dll from the list below, and save it into your /PHP/ext directory.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; align=&amp;quot;center&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! PHP version !! [http://www.iis-aid.com/articles/my_word/difference_between_php_thread_safe_and_non_thread_safe_binaries Thread Safe]  !! FreeTDS version !! Download URL&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | PHP 5.2.x (vc6) || Yes || 0.82 + 20090302 patches || [http://download.moodle.org/download.php/dblib/php52/DBLIB_TS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| No || 0.82 + 20090302 patches || [http://download.moodle.org/download.php/dblib/php52/DBLIB_NOTS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | PHP 5.3.x (vc6) || Yes || 0.82 + 20090904 patches (unconfirmed) || [http://download.moodle.org/download.php/dblib/php53_vc6/DBLIB_TS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| No || 0.82 + 20090904 patches (unconfirmed) || [http://download.moodle.org/download.php/dblib/php53_vc6/DBLIB_NOTS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | PHP 5.3.x (vc9) || Yes || 0.82 + 20090904 patches || [http://download.moodle.org/download.php/dblib/php53_vc9/DBLIB_TS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| No || 0.82 + 20090904 patches || [http://download.moodle.org/download.php/dblib/php53_vc9/DBLIB_NOTS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | PHP 5.4.x (vc9) || Yes || 0.82 + 20110906 patches || [http://download.moodle.org/download.php/dblib/php54_vc9/DBLIB_TS.zip Download!] Mirrors: [http://inethub.olvi.net.ua/ftp/pub/soft/programming/php/ms%20sql%20driver%20for%20%20php%205.4.10/dblib_ts.zip 1] [ftp://inethub.olvi.net.ua/pub/soft/programming/php/ms%20sql%20driver%20for%20%20php%205.4.10/DBLIB_TS.zip 2 (ftp)] [http://www.sendspace.com/file/vtger3 3]&lt;br /&gt;
|-&lt;br /&gt;
| No || 0.82 + 20110906 patches || [http://download.moodle.org/download.php/dblib/php54_vc9/DBLIB_TS.zip Download!] Mirrors: [http://inethub.olvi.net.ua/ftp/pub/soft/programming/php/ms%20sql%20driver%20for%20%20php%205.4.10/dblib_nts.zip 1] [ftp://inethub.olvi.net.ua/pub/soft/programming/php/ms%20sql%20driver%20for%20%20php%205.4.10/DBLIB_NTS.zip 2 (ftp)] [http://www.sendspace.com/file/nkg2j4 3]&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | PHP 5.5.x (vc11-x86) || Yes || 0.91.89 || [http://download.moodle.org/download.php/dblib/php55_vc11_x86/DBLIB_TS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| No || 0.91.89 || [http://download.moodle.org/download.php/dblib/php55_vc11_x86/DBLIB_NOTS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | PHP 5.5.x (vc11-x64) || Yes || 0.91.93 || [http://download.moodle.org/download.php/dblib/php55_vc11_x64/DBLIB_TS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| No || 0.91.93 || [http://download.moodle.org/download.php/dblib/php55_vc11_x64/DBLIB_NOTS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |  Thanks to [http://remote-learner.net/ Remote-Learner]] (Moodle [http://moodle.com/partners/ Partner]) and specially to Bryan Williams, donating one Visual C++ 6.0 Pro license to Moodle. Thanks to Trevor Johnson and his builds of the dblib extensions. Thanks to Daniele, Doug, Luis, Sean and many others by their collaboration in MDL-14725. Thanks to Frediano Ziglio and James K. Lowden from [http://freetds.org freetds.org] by their support. Thanks to [[User:Alastair Hole|Alastair Hole]] and Matt Rusiniak for providing the PHP 5.3 builds of the libraries. Thanks to Enyby by providing the PHP 5.4 builds of the libraries. Thanks to David Aylmer and Matt Rusiniak for providing the PHP 5.5 builds of the libraries. Thanks!&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
(alternatively here you can find some [[Development:Compiling FreeTDS under Windows|instructions to build those freetds extensions under win32]] yourself)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. FreeTDS requires the .NET Framework v1.1 to be installed.  You can [http://www.microsoft.com/downloads/details.aspx?FamilyID=262d25e3-f589-4842-8157-034d1e7cf3a3&amp;amp;DisplayLang=en download it from the Microsoft website] along with its [http://www.microsoft.com/downloads/details.aspx?FamilyID=a8f5654f-088e-40b2-bbdb-a83353618b38&amp;amp;DisplayLang=en service pack].  Alternatively, if you do not wish to install this framework, you can [http://kromann.info/ms-libs/msvcr71.dll download the required DLL] from Frank&#039;s site, and save it into your /PHP root directory.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. Edit your /PHP/php.ini file and add this line:&lt;br /&gt;
&lt;br /&gt;
  extension=php_dblib.dll &lt;br /&gt;
&lt;br /&gt;
Make sure that any lines referring to the php_mssql.dll extension are DISABLED (commented out).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. When the PHP engine loads the FreeTDS extension it needs to be passed certain infiormation in order to be able to connect to your Moodle database. To retrieve this information FreeTDS looks for a file called &#039;&#039;&#039;freetds.conf&#039;&#039;&#039; in the root folder of the server that PHP installed on (e.g. C:\).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;freetds.conf&#039;&#039;&#039; should have the following structure:&lt;br /&gt;
&lt;br /&gt;
  [global]&lt;br /&gt;
      host = xxx.xxx.xxx.xxx (host name or ip of the MSSQL server)&lt;br /&gt;
      port = 1433&lt;br /&gt;
      client charset = UTF-8&lt;br /&gt;
      tds version = 8.0&lt;br /&gt;
      text size = 20971520&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want to connect to a particular [http://msdn.microsoft.com/en-us/library/aa174516(SQL.80).aspx instance] of MSSQL you should specify the instance name:&lt;br /&gt;
&lt;br /&gt;
  [global]&lt;br /&gt;
      host = xxx.xxx.xxx.xxx (host name or ip of the MSSQL server)&lt;br /&gt;
      instance = xxx (instance name, e.g. INST2)&lt;br /&gt;
      port = 1433&lt;br /&gt;
      client charset = UTF-8&lt;br /&gt;
      tds version = 8.0&lt;br /&gt;
      text size = 20971520&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
*You can configure FreeTDS to look for the freetds.conf file in any directory that you want - you don&#039;t have to use C:\. To do this create a SYSTEM environment variable called &#039;&#039;&#039;FREETDS&#039;&#039;&#039; and point it to the directory where you have installed the freetds.conf file. If you do not set this environment variable FreeTDS will look for the freetds.conf file in the C:\ folder, which is the default. One possible benefit of setting the FREETDS environment variable and using a different installation directory for freetds.conf is that C:\ is very predictable to a hacker that knows anything about FreeTDS and that is the first place that he would look if he wanted to compromise your system. So, using a different installation directory would just make your system stronger. See the FreeTDS [http://www.freetds.org/userguide/envvar.htm Setting the environment variables] documentation for more information about this FREETDS environment variable.&lt;br /&gt;
&lt;br /&gt;
*Alternatively, you can [[Development:Compiling FreeTDS under Windows|recompile]] the FreeTDS extension yourself and change the default location to your preferred location at compile time. Then it is not necessary to create any environment variable. You must just ensure that freetds.conf is in the same folder that you specify when you compile php_dblib.dll.&lt;br /&gt;
&lt;br /&gt;
*MSSQL is usually installed with port 1433 as the default. However, if the port was changed on your server when you installed MSSQL then you need to specify the correct port number.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5. Your Moodle &#039;&#039;&#039;config.php&#039;&#039;&#039; should include lines like these:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
$CFG-&amp;gt;dbtype    = &#039;mssql&#039;;        // Required&lt;br /&gt;
$CFG-&amp;gt;dbhost    = &#039;localhost&#039;;      // assuming MS SQL is on the same server, otherwise use an IP&lt;br /&gt;
$CFG-&amp;gt;dbname    = &#039;moodle&#039;;         // or whatever you called the database you created&lt;br /&gt;
$CFG-&amp;gt;dbuser    = &#039;yourusername&#039;;   // I usually use the &#039;sa&#039; account (dbowner perms are enough)&lt;br /&gt;
$CFG-&amp;gt;dbpass    = &#039;yourpassword&#039;;&lt;br /&gt;
$CFG-&amp;gt;dbpersist =  false;&lt;br /&gt;
$CFG-&amp;gt;prefix    = &#039;mdl_&#039;;            //Prefix, you can change it, but NEVER leave it blank.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t have a config.php file yet, it can be generated as normal from the Moodle installer. Alternatively you can use the config-dist.php file that comes with the Moodle package to create your own config.php file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6. Restart or start your web server.  If Moodle still cannot communicate with the database server, please turn display_startup_errors to &amp;quot;On&amp;quot; in your /PHP/php.ini file, then restart the web server and check for any errors that may indicate incorrect DLL versions or missing dependencies.  These error reports, turned off by default in PHP, can be vital in locating a problem with new extension installations.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
7. Database conection test, try this PHP script, just put in a text file called test.php change (&#039;localhost&#039;, &#039;db_user&#039;, &#039;db_password&#039;) to suite your setup, and load from local host (http://localhost/test.php)...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
	$link = mssql_connect(&#039;localhost&#039;, &#039;db_user&#039;, &#039;db_password&#039;);&lt;br /&gt;
	if(!$link) {&lt;br /&gt;
		echo&#039;Could not connect&#039;;&lt;br /&gt;
		die(&#039;Could not connect: &#039; . mssql_error());&lt;br /&gt;
	}&lt;br /&gt;
	echo&#039;Successful connection&#039;;&lt;br /&gt;
	mssql_close($link);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
8. Install Moodle as usual.  Good luck!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Troubleshooting ===&lt;br /&gt;
If you encounter some problems you can try:&lt;br /&gt;
*check that you have DotNet framework 1.1 installed (later version are installed on Vista, but you could need this specific one)&amp;lt;br /&amp;gt;&lt;br /&gt;
*enable TCP/IP for MSSQL: SQL Server 2005 Network Configuration -&amp;gt; Protocols for MSSQLSERVER -&amp;gt; TCP/IP (Enable) -&amp;gt; Properties -&amp;gt; Ip Addresses -&amp;gt; 127.0.0.1 (Active+Enable)&amp;lt;br /&amp;gt;&lt;br /&gt;
*make sure the SQL Server Browser service is running SQL Server 2005 Network Configuration -&amp;gt; SQL Server Services&amp;lt;br /&amp;gt;&lt;br /&gt;
*if you are using SQL Server 2005 and you have the error &#039;&#039;4004: Unicode data in a Unicode-only collation or ntext data cannot be sent to clients using DB-Library (such as ISQL) or ODBC version 3.7 or earlier&#039;&#039;, try the ODBTP method (next chapter). The SQL Server complaining that it doesn&#039;t support pure Unicode via TDS or older versions of ODBC. Microsoft has deprecated DB-Library a long ago, in favor of ODBC, OLE DB, or SQL Native Client. Many new features of SQL 2005 aren&#039;t accessible via DB-Library so if you need them, you could have to switch away from tools based on TDS and DB-Library :(&lt;br /&gt;
&lt;br /&gt;
== FreeTDS on Linux (on Ubuntu by compiling an mssql.so extension) ==&lt;br /&gt;
This is a good read to [http://www.robert-gonzalez.com/2009/02/18/building-the-php-ms-sql-server-extension-from-source-on-ubuntu-810/ building a FreeTDS based mssql extension for apache on Ubuntu]. Do note that [http://www.freetds.org/news.html freeTDS] 0.91 was recently released, you can find latest versions [http://freetds.sourceforge.net/ here]. &lt;br /&gt;
&lt;br /&gt;
Note: the freetds.conf file you use should have &amp;quot;text size = 20971520&amp;quot; as mentioned in the FreeTDS on Windows section otherwise you might see sessions logging out or worse apache segmentation faults. Also see [[FreeTDS]].&lt;br /&gt;
&lt;br /&gt;
Note2: Please note that updating php tends to remove the freetds configurations. You might need to reconfigure freetds after an upgrade&lt;br /&gt;
&lt;br /&gt;
== Using FreeTDS on Debian Lenny ==&lt;br /&gt;
I found the following solution using:&lt;br /&gt;
* PHP Version 5.2.6-1+lenny9&lt;br /&gt;
* Microsoft SQL Server Enterprise Edition, version: 9.00.4053.00&lt;br /&gt;
&amp;lt;pre&amp;gt;apt-get install libsybdb5 freetds-common php5-sybase&lt;br /&gt;
/etc/init.d/apache2 restart&amp;lt;/pre&amp;gt;&lt;br /&gt;
At the end of the process, if all goes fine, you will find in the mssql section of phpinfo();&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;nicetable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! MSSQL Support&lt;br /&gt;
! enabled&lt;br /&gt;
|-&lt;br /&gt;
| Library version &lt;br /&gt;
| FreeTDS &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Once FreeTDS is correctly installed, don not forget to set it up following explanations in https://docs.moodle.org/en/FreeTDS&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Errors FAQ]]&lt;br /&gt;
* Using Moodle [http://moodle.org/mod/forum/view.php?id=28 Installation problems forum]&lt;br /&gt;
&lt;br /&gt;
[[Category:XMLDB]]&lt;br /&gt;
[[Category:DB]]&lt;br /&gt;
[[Category:SQL databases]]&lt;/div&gt;</summary>
		<author><name>Stronk7</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/2x/pl/index.php?title=Installing_MSSQL_for_PHP&amp;diff=108375</id>
		<title>Installing MSSQL for PHP</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/2x/pl/index.php?title=Installing_MSSQL_for_PHP&amp;diff=108375"/>
		<updated>2013-12-13T19:02:05Z</updated>

		<summary type="html">&lt;p&gt;Stronk7: Adding links to download.moodle.org php53_vc6&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Installing Moodle}}== Introduction ==&lt;br /&gt;
&lt;br /&gt;
This short manual is suitable if you are trying to run Moodle using the SQL*Server (MSSQL) RDBMS. Steps detailed below must be performed &#039;&#039;&#039;before&#039;&#039;&#039; installing Moodle itself.&lt;br /&gt;
&lt;br /&gt;
Some of this may also apply if you wish to access an MSSQL server for external db authentication/enrollment. &lt;br /&gt;
&lt;br /&gt;
First of all, minimum required version of MSSQL has been stabilised to MSSQL 2005 (v.9).&lt;br /&gt;
&lt;br /&gt;
While PHP comes with one, more or less, standard extension (mssql) that provides access to MSSQL databases, early we found some hard limits on it. Basically such default extension has some limits that prevent us to use it at all (you can find more info about these problems [[Development:XMLDB problems#MSSQL, PHP, UTF-8 and UCS-2|here]]).&lt;br /&gt;
&lt;br /&gt;
So, in order to allow PHP (i.e. Moodle) to access to MSSQL DBs properly we have to install a &#039;&#039;&#039;mssql extension alternative&#039;&#039;&#039; to save us from the problems related above. See the sections below for details about the various options.&lt;br /&gt;
&lt;br /&gt;
== Installation overview ==&lt;br /&gt;
&lt;br /&gt;
1. Get MSSQL Server installed and running. ([http://www.microsoft.com/sql/editions/express/default.mspx A free limited version, SQL Server Express Edition] is available for testing.)&lt;br /&gt;
:Make sure that you choose mixed authentication (Windows and local accounts) to keep things simpler later.  You&#039;ll be asked to define the  &amp;quot;sa&amp;quot; account password (it&#039;s the default System Administrator account which has full access to all databases by default).&lt;br /&gt;
&lt;br /&gt;
2. Make sure MS SQL Server can accept incoming TCP/IP connections on port 1433 (the standard one).&lt;br /&gt;
:You might need to explicitly allow this in your Windows firewall (see the Control Panel).  You may also need to edit options in the :&#039;&#039;&#039;SQL Server Configuration Manager&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Network Configuration&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Protocols&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;TCP/IP enabled&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
3. Open the &amp;quot;SQL Server Management Studio&amp;quot; and create a new empty database.  If you are using the &amp;quot;sa&amp;quot; account then you don&#039;t need to do anything else here.&lt;br /&gt;
&lt;br /&gt;
4. Configure these settings in your created (and still empty) database:&lt;br /&gt;
Configure these settings in your created (and still empty) database:&lt;br /&gt;
:*Use a case sensitive collation, such as Latin1_General_CS_AS.&lt;br /&gt;
:*ANSI NULLS Enabled = True (ALTER DATABASE xxxx SET ANSI_NULLS ON)&lt;br /&gt;
:*Quoted Identifiers Enabled = True (ALTER DATABASE xxxx SET QUOTED_IDENTIFIER ON)&lt;br /&gt;
:*Is Read Committed transaction ON = True (ALTER DATABASE xxxx SET READ_COMMITTED_SNAPSHOT ON)&lt;br /&gt;
:** In older versions this is not settable via the DB properties. To set READ_COMMITTED_SNAPSHOT, there must be no active connections to the database except for the connection executing the ALTER command. If you are viewing the DB in the Server Management Studio, disconnect from any servers in the &amp;quot;Object Explorer&amp;quot; (right-click &amp;gt; Disconnect), then create a &amp;quot;New Query&amp;quot; and run the ALTER command. See http://msdn.microsoft.com/en-us/library/bb522682.aspx for details.&lt;br /&gt;
:** If your DB name starts with a number, you may need to put quotes around the DB name in the query.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5. Get PHP installed with a web server.   Unless you want to do it under IIS or some other way, the packages on the [http://download.moodle.org Moodle download page] are a good solution.&lt;br /&gt;
&lt;br /&gt;
6. Choose one of the following specific sections for your server to install the &#039;&#039;&#039;mssql extension alternative&#039;&#039;&#039; installed and running properly on your PHP box.&lt;br /&gt;
&lt;br /&gt;
7. Set the following settings in your php.ini file&lt;br /&gt;
:* mssql.textlimit = 20971520&lt;br /&gt;
:* mssql.textsize = 20971520&lt;br /&gt;
&lt;br /&gt;
8. With all this properly configured, you can continue with a [[Installing Moodle|standard Moodle installation]].&lt;br /&gt;
&lt;br /&gt;
== Microsoft Drivers for SQL Server for PHP ==&lt;br /&gt;
&lt;br /&gt;
In July 2008 Microsoft [http://social.msdn.microsoft.com/forums/en-US/sqldriverforphp/thread/a10e5202-9e41-4ff8-a33e-fbcc7b951be2/ released] a new SQL Server Driver for PHP. This is a PHP extension that allows PHP scripts to read and write data on Microsoft SQL Server databases and it overcomes the problems with the native SQL Server extension that was previously bundled with PHP.&lt;br /&gt;
&lt;br /&gt;
When using [[IIS]] it is strongly recommended to use the official Microsoft PHP installer from http://php.iis.net/, it should include the latest version of necessary drivers and it also simplifies future upgrades and configuration.&lt;br /&gt;
&lt;br /&gt;
For Windows servers with [[Apache]] see http://www.microsoft.com/en-us/download/details.aspx?id=20098.&lt;br /&gt;
&lt;br /&gt;
To know more about how to run Moodle with these drivers go to [[Using the Microsoft SQL Server Driver for PHP]].&lt;br /&gt;
&lt;br /&gt;
== Using FreeTDS on Windows ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&#039;&#039;&#039;Important Note 1:&#039;&#039;&#039; Due to some previous bugs it&#039;s highly recommendable to use PHP &amp;gt;= 5.2.6 and FreeTDS 0.82 + post-release patches ([http://tracker.moodle.org/browse/MDL-14725 more info]).&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If your web server is on Windows, use &#039;&#039;&#039;php_dblib.dll&#039;&#039;&#039;. Despite the name, it&#039;s FreeTDS compiled for Windows. (Go to this page for information on [https://docs.moodle.org/en/FreeTDS Using FreeTDS for Unix].) &lt;br /&gt;
&lt;br /&gt;
Originally we were using the DLLs available at [http://kromann.info/article.php?Id=11062598797760000 Frank Kromann&#039;s site], but they are outdated (using old versions of FreeTDS) and that has caused [http://tracker.moodle.org/browse/MDL-14725 some problems] in the past.&lt;br /&gt;
&lt;br /&gt;
So, right now, the recommended way to use FreeTDS under Windows is to use PHP 5.2.x following the following instructions:&lt;br /&gt;
&lt;br /&gt;
1. Download the appropriate copy of php_dblib.dll from the list below, and save it into your /PHP/ext directory.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; align=&amp;quot;center&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! PHP version !! [http://www.iis-aid.com/articles/my_word/difference_between_php_thread_safe_and_non_thread_safe_binaries Thread Safe]  !! FreeTDS version !! Download URL&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | PHP 5.2.x (vc6) || Yes || 0.82 + 20090302 patches || [http://download.moodle.org/download.php/dblib/php52/DBLIB_TS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| No || 0.82 + 20090302 patches || [http://download.moodle.org/download.php/dblib/php52/DBLIB_NOTS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | PHP 5.3.x (vc6) || Yes || 0.82 + 20090904 patches (unconfirmed) || [http://download.moodle.org/download.php/dblib/php53_vc6/DBLIB_TS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| No || 0.82 + 20090904 patches (unconfirmed) || [http://download.moodle.org/download.php/dblib/php53_vc6/DBLIB_NOTS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | PHP 5.3.x (vc9) || Yes || 0.82 + 20090904 patches || [http://download.moodle.org/download.php/dblib/php53_vc9/DBLIB_TS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| No || 0.82 + 20090904 patches || [http://download.moodle.org/download.php/dblib/php53_vc9/DBLIB_NOTS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | PHP 5.4.x (vc9) || Yes || 0.82 + 20110906 patches || [http://download.moodle.org/download.php/dblib/php54_vc9/DBLIB_TS.zip Download!] Mirrors: [http://inethub.olvi.net.ua/ftp/pub/soft/programming/php/ms%20sql%20driver%20for%20%20php%205.4.10/dblib_ts.zip 1] [ftp://inethub.olvi.net.ua/pub/soft/programming/php/ms%20sql%20driver%20for%20%20php%205.4.10/DBLIB_TS.zip 2 (ftp)] [http://www.sendspace.com/file/vtger3 3]&lt;br /&gt;
|-&lt;br /&gt;
| No || 0.82 + 20110906 patches || [http://download.moodle.org/download.php/dblib/php54_vc9/DBLIB_TS.zip Download!] Mirrors: [http://inethub.olvi.net.ua/ftp/pub/soft/programming/php/ms%20sql%20driver%20for%20%20php%205.4.10/dblib_nts.zip 1] [ftp://inethub.olvi.net.ua/pub/soft/programming/php/ms%20sql%20driver%20for%20%20php%205.4.10/DBLIB_NTS.zip 2 (ftp)] [http://www.sendspace.com/file/nkg2j4 3]&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | PHP 5.5.x (vc11-x86) || Yes || 0.91.89 || [http://download.moodle.org/download.php/dblib/php55_vc11_x86/DBLIB_TS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| No || 0.91.89 || [http://download.moodle.org/download.php/dblib/php55_vc11_x86/DBLIB_NOTS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | PHP 5.5.x (vc11-x64) || Yes || 0.91.92 || [http://download.moodle.org/download.php/dblib/php55_vc11_x64/DBLIB_TS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| No || 0.91.92 || [http://download.moodle.org/download.php/dblib/php55_vc11_x64/DBLIB_NOTS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |  Thanks to [http://remote-learner.net/ Remote-Learner]] (Moodle [http://moodle.com/partners/ Partner]) and specially to Bryan Williams, donating one Visual C++ 6.0 Pro license to Moodle. Thanks to Trevor Johnson and his builds of the dblib extensions. Thanks to Daniele, Doug, Luis, Sean and many others by their collaboration in MDL-14725. Thanks to Frediano Ziglio and James K. Lowden from [http://freetds.org freetds.org] by their support. Thanks to [[User:Alastair Hole|Alastair Hole]] and Matt Rusiniak for providing the PHP 5.3 builds of the libraries. Thanks to Enyby by providing the PHP 5.4 builds of the libraries. Thanks to David Aylmer and Matt Rusiniak for providing the PHP 5.5 builds of the libraries. Thanks!&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
(alternatively here you can find some [[Development:Compiling FreeTDS under Windows|instructions to build those freetds extensions under win32]] yourself)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. FreeTDS requires the .NET Framework v1.1 to be installed.  You can [http://www.microsoft.com/downloads/details.aspx?FamilyID=262d25e3-f589-4842-8157-034d1e7cf3a3&amp;amp;DisplayLang=en download it from the Microsoft website] along with its [http://www.microsoft.com/downloads/details.aspx?FamilyID=a8f5654f-088e-40b2-bbdb-a83353618b38&amp;amp;DisplayLang=en service pack].  Alternatively, if you do not wish to install this framework, you can [http://kromann.info/ms-libs/msvcr71.dll download the required DLL] from Frank&#039;s site, and save it into your /PHP root directory.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. Edit your /PHP/php.ini file and add this line:&lt;br /&gt;
&lt;br /&gt;
  extension=php_dblib.dll &lt;br /&gt;
&lt;br /&gt;
Make sure that any lines referring to the php_mssql.dll extension are DISABLED (commented out).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. When the PHP engine loads the FreeTDS extension it needs to be passed certain infiormation in order to be able to connect to your Moodle database. To retrieve this information FreeTDS looks for a file called &#039;&#039;&#039;freetds.conf&#039;&#039;&#039; in the root folder of the server that PHP installed on (e.g. C:\).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;freetds.conf&#039;&#039;&#039; should have the following structure:&lt;br /&gt;
&lt;br /&gt;
  [global]&lt;br /&gt;
      host = xxx.xxx.xxx.xxx (host name or ip of the MSSQL server)&lt;br /&gt;
      port = 1433&lt;br /&gt;
      client charset = UTF-8&lt;br /&gt;
      tds version = 8.0&lt;br /&gt;
      text size = 20971520&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want to connect to a particular [http://msdn.microsoft.com/en-us/library/aa174516(SQL.80).aspx instance] of MSSQL you should specify the instance name:&lt;br /&gt;
&lt;br /&gt;
  [global]&lt;br /&gt;
      host = xxx.xxx.xxx.xxx (host name or ip of the MSSQL server)&lt;br /&gt;
      instance = xxx (instance name, e.g. INST2)&lt;br /&gt;
      port = 1433&lt;br /&gt;
      client charset = UTF-8&lt;br /&gt;
      tds version = 8.0&lt;br /&gt;
      text size = 20971520&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
*You can configure FreeTDS to look for the freetds.conf file in any directory that you want - you don&#039;t have to use C:\. To do this create a SYSTEM environment variable called &#039;&#039;&#039;FREETDS&#039;&#039;&#039; and point it to the directory where you have installed the freetds.conf file. If you do not set this environment variable FreeTDS will look for the freetds.conf file in the C:\ folder, which is the default. One possible benefit of setting the FREETDS environment variable and using a different installation directory for freetds.conf is that C:\ is very predictable to a hacker that knows anything about FreeTDS and that is the first place that he would look if he wanted to compromise your system. So, using a different installation directory would just make your system stronger. See the FreeTDS [http://www.freetds.org/userguide/envvar.htm Setting the environment variables] documentation for more information about this FREETDS environment variable.&lt;br /&gt;
&lt;br /&gt;
*Alternatively, you can [[Development:Compiling FreeTDS under Windows|recompile]] the FreeTDS extension yourself and change the default location to your preferred location at compile time. Then it is not necessary to create any environment variable. You must just ensure that freetds.conf is in the same folder that you specify when you compile php_dblib.dll.&lt;br /&gt;
&lt;br /&gt;
*MSSQL is usually installed with port 1433 as the default. However, if the port was changed on your server when you installed MSSQL then you need to specify the correct port number.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5. Your Moodle &#039;&#039;&#039;config.php&#039;&#039;&#039; should include lines like these:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
$CFG-&amp;gt;dbtype    = &#039;mssql&#039;;        // Required&lt;br /&gt;
$CFG-&amp;gt;dbhost    = &#039;localhost&#039;;      // assuming MS SQL is on the same server, otherwise use an IP&lt;br /&gt;
$CFG-&amp;gt;dbname    = &#039;moodle&#039;;         // or whatever you called the database you created&lt;br /&gt;
$CFG-&amp;gt;dbuser    = &#039;yourusername&#039;;   // I usually use the &#039;sa&#039; account (dbowner perms are enough)&lt;br /&gt;
$CFG-&amp;gt;dbpass    = &#039;yourpassword&#039;;&lt;br /&gt;
$CFG-&amp;gt;dbpersist =  false;&lt;br /&gt;
$CFG-&amp;gt;prefix    = &#039;mdl_&#039;;            //Prefix, you can change it, but NEVER leave it blank.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t have a config.php file yet, it can be generated as normal from the Moodle installer. Alternatively you can use the config-dist.php file that comes with the Moodle package to create your own config.php file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6. Restart or start your web server.  If Moodle still cannot communicate with the database server, please turn display_startup_errors to &amp;quot;On&amp;quot; in your /PHP/php.ini file, then restart the web server and check for any errors that may indicate incorrect DLL versions or missing dependencies.  These error reports, turned off by default in PHP, can be vital in locating a problem with new extension installations.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
7. Database conection test, try this PHP script, just put in a text file called test.php change (&#039;localhost&#039;, &#039;db_user&#039;, &#039;db_password&#039;) to suite your setup, and load from local host (http://localhost/test.php)...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
	$link = mssql_connect(&#039;localhost&#039;, &#039;db_user&#039;, &#039;db_password&#039;);&lt;br /&gt;
	if(!$link) {&lt;br /&gt;
		echo&#039;Could not connect&#039;;&lt;br /&gt;
		die(&#039;Could not connect: &#039; . mssql_error());&lt;br /&gt;
	}&lt;br /&gt;
	echo&#039;Successful connection&#039;;&lt;br /&gt;
	mssql_close($link);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
8. Install Moodle as usual.  Good luck!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Troubleshooting ===&lt;br /&gt;
If you encounter some problems you can try:&lt;br /&gt;
*check that you have DotNet framework 1.1 installed (later version are installed on Vista, but you could need this specific one)&amp;lt;br /&amp;gt;&lt;br /&gt;
*enable TCP/IP for MSSQL: SQL Server 2005 Network Configuration -&amp;gt; Protocols for MSSQLSERVER -&amp;gt; TCP/IP (Enable) -&amp;gt; Properties -&amp;gt; Ip Addresses -&amp;gt; 127.0.0.1 (Active+Enable)&amp;lt;br /&amp;gt;&lt;br /&gt;
*make sure the SQL Server Browser service is running SQL Server 2005 Network Configuration -&amp;gt; SQL Server Services&amp;lt;br /&amp;gt;&lt;br /&gt;
*if you are using SQL Server 2005 and you have the error &#039;&#039;4004: Unicode data in a Unicode-only collation or ntext data cannot be sent to clients using DB-Library (such as ISQL) or ODBC version 3.7 or earlier&#039;&#039;, try the ODBTP method (next chapter). The SQL Server complaining that it doesn&#039;t support pure Unicode via TDS or older versions of ODBC. Microsoft has deprecated DB-Library a long ago, in favor of ODBC, OLE DB, or SQL Native Client. Many new features of SQL 2005 aren&#039;t accessible via DB-Library so if you need them, you could have to switch away from tools based on TDS and DB-Library :(&lt;br /&gt;
&lt;br /&gt;
== FreeTDS on Linux (on Ubuntu by compiling an mssql.so extension) ==&lt;br /&gt;
This is a good read to [http://www.robert-gonzalez.com/2009/02/18/building-the-php-ms-sql-server-extension-from-source-on-ubuntu-810/ building a FreeTDS based mssql extension for apache on Ubuntu]. Do note that [http://www.freetds.org/news.html freeTDS] 0.91 was recently released, you can find latest versions [http://freetds.sourceforge.net/ here]. &lt;br /&gt;
&lt;br /&gt;
Note: the freetds.conf file you use should have &amp;quot;text size = 20971520&amp;quot; as mentioned in the FreeTDS on Windows section otherwise you might see sessions logging out or worse apache segmentation faults. Also see [[FreeTDS]].&lt;br /&gt;
&lt;br /&gt;
Note2: Please note that updating php tends to remove the freetds configurations. You might need to reconfigure freetds after an upgrade&lt;br /&gt;
&lt;br /&gt;
== Using FreeTDS on Debian Lenny ==&lt;br /&gt;
I found the following solution using:&lt;br /&gt;
* PHP Version 5.2.6-1+lenny9&lt;br /&gt;
* Microsoft SQL Server Enterprise Edition, version: 9.00.4053.00&lt;br /&gt;
&amp;lt;pre&amp;gt;apt-get install libsybdb5 freetds-common php5-sybase&lt;br /&gt;
/etc/init.d/apache2 restart&amp;lt;/pre&amp;gt;&lt;br /&gt;
At the end of the process, if all goes fine, you will find in the mssql section of phpinfo();&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;nicetable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! MSSQL Support&lt;br /&gt;
! enabled&lt;br /&gt;
|-&lt;br /&gt;
| Library version &lt;br /&gt;
| FreeTDS &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Once FreeTDS is correctly installed, don not forget to set it up following explanations in https://docs.moodle.org/en/FreeTDS&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Errors FAQ]]&lt;br /&gt;
* Using Moodle [http://moodle.org/mod/forum/view.php?id=28 Installation problems forum]&lt;br /&gt;
&lt;br /&gt;
[[Category:XMLDB]]&lt;br /&gt;
[[Category:DB]]&lt;br /&gt;
[[Category:SQL databases]]&lt;/div&gt;</summary>
		<author><name>Stronk7</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/2x/pl/index.php?title=Installing_MSSQL_for_PHP&amp;diff=108374</id>
		<title>Installing MSSQL for PHP</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/2x/pl/index.php?title=Installing_MSSQL_for_PHP&amp;diff=108374"/>
		<updated>2013-12-13T18:51:11Z</updated>

		<summary type="html">&lt;p&gt;Stronk7: Adding links to download.moodle.org php55_vc11_x64&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Installing Moodle}}== Introduction ==&lt;br /&gt;
&lt;br /&gt;
This short manual is suitable if you are trying to run Moodle using the SQL*Server (MSSQL) RDBMS. Steps detailed below must be performed &#039;&#039;&#039;before&#039;&#039;&#039; installing Moodle itself.&lt;br /&gt;
&lt;br /&gt;
Some of this may also apply if you wish to access an MSSQL server for external db authentication/enrollment. &lt;br /&gt;
&lt;br /&gt;
First of all, minimum required version of MSSQL has been stabilised to MSSQL 2005 (v.9).&lt;br /&gt;
&lt;br /&gt;
While PHP comes with one, more or less, standard extension (mssql) that provides access to MSSQL databases, early we found some hard limits on it. Basically such default extension has some limits that prevent us to use it at all (you can find more info about these problems [[Development:XMLDB problems#MSSQL, PHP, UTF-8 and UCS-2|here]]).&lt;br /&gt;
&lt;br /&gt;
So, in order to allow PHP (i.e. Moodle) to access to MSSQL DBs properly we have to install a &#039;&#039;&#039;mssql extension alternative&#039;&#039;&#039; to save us from the problems related above. See the sections below for details about the various options.&lt;br /&gt;
&lt;br /&gt;
== Installation overview ==&lt;br /&gt;
&lt;br /&gt;
1. Get MSSQL Server installed and running. ([http://www.microsoft.com/sql/editions/express/default.mspx A free limited version, SQL Server Express Edition] is available for testing.)&lt;br /&gt;
:Make sure that you choose mixed authentication (Windows and local accounts) to keep things simpler later.  You&#039;ll be asked to define the  &amp;quot;sa&amp;quot; account password (it&#039;s the default System Administrator account which has full access to all databases by default).&lt;br /&gt;
&lt;br /&gt;
2. Make sure MS SQL Server can accept incoming TCP/IP connections on port 1433 (the standard one).&lt;br /&gt;
:You might need to explicitly allow this in your Windows firewall (see the Control Panel).  You may also need to edit options in the :&#039;&#039;&#039;SQL Server Configuration Manager&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Network Configuration&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Protocols&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;TCP/IP enabled&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
3. Open the &amp;quot;SQL Server Management Studio&amp;quot; and create a new empty database.  If you are using the &amp;quot;sa&amp;quot; account then you don&#039;t need to do anything else here.&lt;br /&gt;
&lt;br /&gt;
4. Configure these settings in your created (and still empty) database:&lt;br /&gt;
Configure these settings in your created (and still empty) database:&lt;br /&gt;
:*Use a case sensitive collation, such as Latin1_General_CS_AS.&lt;br /&gt;
:*ANSI NULLS Enabled = True (ALTER DATABASE xxxx SET ANSI_NULLS ON)&lt;br /&gt;
:*Quoted Identifiers Enabled = True (ALTER DATABASE xxxx SET QUOTED_IDENTIFIER ON)&lt;br /&gt;
:*Is Read Committed transaction ON = True (ALTER DATABASE xxxx SET READ_COMMITTED_SNAPSHOT ON)&lt;br /&gt;
:** In older versions this is not settable via the DB properties. To set READ_COMMITTED_SNAPSHOT, there must be no active connections to the database except for the connection executing the ALTER command. If you are viewing the DB in the Server Management Studio, disconnect from any servers in the &amp;quot;Object Explorer&amp;quot; (right-click &amp;gt; Disconnect), then create a &amp;quot;New Query&amp;quot; and run the ALTER command. See http://msdn.microsoft.com/en-us/library/bb522682.aspx for details.&lt;br /&gt;
:** If your DB name starts with a number, you may need to put quotes around the DB name in the query.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5. Get PHP installed with a web server.   Unless you want to do it under IIS or some other way, the packages on the [http://download.moodle.org Moodle download page] are a good solution.&lt;br /&gt;
&lt;br /&gt;
6. Choose one of the following specific sections for your server to install the &#039;&#039;&#039;mssql extension alternative&#039;&#039;&#039; installed and running properly on your PHP box.&lt;br /&gt;
&lt;br /&gt;
7. Set the following settings in your php.ini file&lt;br /&gt;
:* mssql.textlimit = 20971520&lt;br /&gt;
:* mssql.textsize = 20971520&lt;br /&gt;
&lt;br /&gt;
8. With all this properly configured, you can continue with a [[Installing Moodle|standard Moodle installation]].&lt;br /&gt;
&lt;br /&gt;
== Microsoft Drivers for SQL Server for PHP ==&lt;br /&gt;
&lt;br /&gt;
In July 2008 Microsoft [http://social.msdn.microsoft.com/forums/en-US/sqldriverforphp/thread/a10e5202-9e41-4ff8-a33e-fbcc7b951be2/ released] a new SQL Server Driver for PHP. This is a PHP extension that allows PHP scripts to read and write data on Microsoft SQL Server databases and it overcomes the problems with the native SQL Server extension that was previously bundled with PHP.&lt;br /&gt;
&lt;br /&gt;
When using [[IIS]] it is strongly recommended to use the official Microsoft PHP installer from http://php.iis.net/, it should include the latest version of necessary drivers and it also simplifies future upgrades and configuration.&lt;br /&gt;
&lt;br /&gt;
For Windows servers with [[Apache]] see http://www.microsoft.com/en-us/download/details.aspx?id=20098.&lt;br /&gt;
&lt;br /&gt;
To know more about how to run Moodle with these drivers go to [[Using the Microsoft SQL Server Driver for PHP]].&lt;br /&gt;
&lt;br /&gt;
== Using FreeTDS on Windows ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&#039;&#039;&#039;Important Note 1:&#039;&#039;&#039; Due to some previous bugs it&#039;s highly recommendable to use PHP &amp;gt;= 5.2.6 and FreeTDS 0.82 + post-release patches ([http://tracker.moodle.org/browse/MDL-14725 more info]).&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If your web server is on Windows, use &#039;&#039;&#039;php_dblib.dll&#039;&#039;&#039;. Despite the name, it&#039;s FreeTDS compiled for Windows. (Go to this page for information on [https://docs.moodle.org/en/FreeTDS Using FreeTDS for Unix].) &lt;br /&gt;
&lt;br /&gt;
Originally we were using the DLLs available at [http://kromann.info/article.php?Id=11062598797760000 Frank Kromann&#039;s site], but they are outdated (using old versions of FreeTDS) and that has caused [http://tracker.moodle.org/browse/MDL-14725 some problems] in the past.&lt;br /&gt;
&lt;br /&gt;
So, right now, the recommended way to use FreeTDS under Windows is to use PHP 5.2.x following the following instructions:&lt;br /&gt;
&lt;br /&gt;
1. Download the appropriate copy of php_dblib.dll from the list below, and save it into your /PHP/ext directory.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; align=&amp;quot;center&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! PHP version !! [http://www.iis-aid.com/articles/my_word/difference_between_php_thread_safe_and_non_thread_safe_binaries Thread Safe]  !! FreeTDS version !! Download URL&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | PHP 5.2.x (vc6) || Yes || 0.82 + 20090302 patches || [http://download.moodle.org/download.php/dblib/php52/DBLIB_TS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| No || 0.82 + 20090302 patches || [http://download.moodle.org/download.php/dblib/php52/DBLIB_NOTS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | PHP 5.3.x (vc9) || Yes || 0.82 + 20090904 patches || [http://download.moodle.org/download.php/dblib/php53_vc9/DBLIB_TS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| No || 0.82 + 20090904 patches || [http://download.moodle.org/download.php/dblib/php53_vc9/DBLIB_NOTS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | PHP 5.4.x (vc9) || Yes || 0.82 + 20110906 patches || [http://download.moodle.org/download.php/dblib/php54_vc9/DBLIB_TS.zip Download!] Mirrors: [http://inethub.olvi.net.ua/ftp/pub/soft/programming/php/ms%20sql%20driver%20for%20%20php%205.4.10/dblib_ts.zip 1] [ftp://inethub.olvi.net.ua/pub/soft/programming/php/ms%20sql%20driver%20for%20%20php%205.4.10/DBLIB_TS.zip 2 (ftp)] [http://www.sendspace.com/file/vtger3 3]&lt;br /&gt;
|-&lt;br /&gt;
| No || 0.82 + 20110906 patches || [http://download.moodle.org/download.php/dblib/php54_vc9/DBLIB_TS.zip Download!] Mirrors: [http://inethub.olvi.net.ua/ftp/pub/soft/programming/php/ms%20sql%20driver%20for%20%20php%205.4.10/dblib_nts.zip 1] [ftp://inethub.olvi.net.ua/pub/soft/programming/php/ms%20sql%20driver%20for%20%20php%205.4.10/DBLIB_NTS.zip 2 (ftp)] [http://www.sendspace.com/file/nkg2j4 3]&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | PHP 5.5.x (vc11-x86) || Yes || 0.91.89 || [http://download.moodle.org/download.php/dblib/php55_vc11_x86/DBLIB_TS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| No || 0.91.89 || [http://download.moodle.org/download.php/dblib/php55_vc11_x86/DBLIB_NOTS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | PHP 5.5.x (vc11-x64) || Yes || 0.91.92 || [http://download.moodle.org/download.php/dblib/php55_vc11_x64/DBLIB_TS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| No || 0.91.92 || [http://download.moodle.org/download.php/dblib/php55_vc11_x64/DBLIB_NOTS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |  Thanks to [http://remote-learner.net/ Remote-Learner]] (Moodle [http://moodle.com/partners/ Partner]) and specially to Bryan Williams, donating one Visual C++ 6.0 Pro license to Moodle. Thanks to Trevor Johnson and his builds of the dblib extensions. Thanks to Daniele, Doug, Luis, Sean and many others by their collaboration in MDL-14725. Thanks to Frediano Ziglio and James K. Lowden from [http://freetds.org freetds.org] by their support. Thanks to [[User:Alastair Hole|Alastair Hole]] for providing the PHP 5.3 builds of the libraries. Thanks to Enyby by providing the PHP 5.4 builds of the libraries. Thanks to David Aylmer and Matt Rusiniak for providing the PHP 5.5 builds of the libraries. Thanks!&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
(alternatively here you can find some [[Development:Compiling FreeTDS under Windows|instructions to build those freetds extensions under win32]] yourself)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. FreeTDS requires the .NET Framework v1.1 to be installed.  You can [http://www.microsoft.com/downloads/details.aspx?FamilyID=262d25e3-f589-4842-8157-034d1e7cf3a3&amp;amp;DisplayLang=en download it from the Microsoft website] along with its [http://www.microsoft.com/downloads/details.aspx?FamilyID=a8f5654f-088e-40b2-bbdb-a83353618b38&amp;amp;DisplayLang=en service pack].  Alternatively, if you do not wish to install this framework, you can [http://kromann.info/ms-libs/msvcr71.dll download the required DLL] from Frank&#039;s site, and save it into your /PHP root directory.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. Edit your /PHP/php.ini file and add this line:&lt;br /&gt;
&lt;br /&gt;
  extension=php_dblib.dll &lt;br /&gt;
&lt;br /&gt;
Make sure that any lines referring to the php_mssql.dll extension are DISABLED (commented out).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. When the PHP engine loads the FreeTDS extension it needs to be passed certain infiormation in order to be able to connect to your Moodle database. To retrieve this information FreeTDS looks for a file called &#039;&#039;&#039;freetds.conf&#039;&#039;&#039; in the root folder of the server that PHP installed on (e.g. C:\).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;freetds.conf&#039;&#039;&#039; should have the following structure:&lt;br /&gt;
&lt;br /&gt;
  [global]&lt;br /&gt;
      host = xxx.xxx.xxx.xxx (host name or ip of the MSSQL server)&lt;br /&gt;
      port = 1433&lt;br /&gt;
      client charset = UTF-8&lt;br /&gt;
      tds version = 8.0&lt;br /&gt;
      text size = 20971520&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want to connect to a particular [http://msdn.microsoft.com/en-us/library/aa174516(SQL.80).aspx instance] of MSSQL you should specify the instance name:&lt;br /&gt;
&lt;br /&gt;
  [global]&lt;br /&gt;
      host = xxx.xxx.xxx.xxx (host name or ip of the MSSQL server)&lt;br /&gt;
      instance = xxx (instance name, e.g. INST2)&lt;br /&gt;
      port = 1433&lt;br /&gt;
      client charset = UTF-8&lt;br /&gt;
      tds version = 8.0&lt;br /&gt;
      text size = 20971520&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
*You can configure FreeTDS to look for the freetds.conf file in any directory that you want - you don&#039;t have to use C:\. To do this create a SYSTEM environment variable called &#039;&#039;&#039;FREETDS&#039;&#039;&#039; and point it to the directory where you have installed the freetds.conf file. If you do not set this environment variable FreeTDS will look for the freetds.conf file in the C:\ folder, which is the default. One possible benefit of setting the FREETDS environment variable and using a different installation directory for freetds.conf is that C:\ is very predictable to a hacker that knows anything about FreeTDS and that is the first place that he would look if he wanted to compromise your system. So, using a different installation directory would just make your system stronger. See the FreeTDS [http://www.freetds.org/userguide/envvar.htm Setting the environment variables] documentation for more information about this FREETDS environment variable.&lt;br /&gt;
&lt;br /&gt;
*Alternatively, you can [[Development:Compiling FreeTDS under Windows|recompile]] the FreeTDS extension yourself and change the default location to your preferred location at compile time. Then it is not necessary to create any environment variable. You must just ensure that freetds.conf is in the same folder that you specify when you compile php_dblib.dll.&lt;br /&gt;
&lt;br /&gt;
*MSSQL is usually installed with port 1433 as the default. However, if the port was changed on your server when you installed MSSQL then you need to specify the correct port number.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5. Your Moodle &#039;&#039;&#039;config.php&#039;&#039;&#039; should include lines like these:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
$CFG-&amp;gt;dbtype    = &#039;mssql&#039;;        // Required&lt;br /&gt;
$CFG-&amp;gt;dbhost    = &#039;localhost&#039;;      // assuming MS SQL is on the same server, otherwise use an IP&lt;br /&gt;
$CFG-&amp;gt;dbname    = &#039;moodle&#039;;         // or whatever you called the database you created&lt;br /&gt;
$CFG-&amp;gt;dbuser    = &#039;yourusername&#039;;   // I usually use the &#039;sa&#039; account (dbowner perms are enough)&lt;br /&gt;
$CFG-&amp;gt;dbpass    = &#039;yourpassword&#039;;&lt;br /&gt;
$CFG-&amp;gt;dbpersist =  false;&lt;br /&gt;
$CFG-&amp;gt;prefix    = &#039;mdl_&#039;;            //Prefix, you can change it, but NEVER leave it blank.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t have a config.php file yet, it can be generated as normal from the Moodle installer. Alternatively you can use the config-dist.php file that comes with the Moodle package to create your own config.php file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6. Restart or start your web server.  If Moodle still cannot communicate with the database server, please turn display_startup_errors to &amp;quot;On&amp;quot; in your /PHP/php.ini file, then restart the web server and check for any errors that may indicate incorrect DLL versions or missing dependencies.  These error reports, turned off by default in PHP, can be vital in locating a problem with new extension installations.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
7. Database conection test, try this PHP script, just put in a text file called test.php change (&#039;localhost&#039;, &#039;db_user&#039;, &#039;db_password&#039;) to suite your setup, and load from local host (http://localhost/test.php)...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
	$link = mssql_connect(&#039;localhost&#039;, &#039;db_user&#039;, &#039;db_password&#039;);&lt;br /&gt;
	if(!$link) {&lt;br /&gt;
		echo&#039;Could not connect&#039;;&lt;br /&gt;
		die(&#039;Could not connect: &#039; . mssql_error());&lt;br /&gt;
	}&lt;br /&gt;
	echo&#039;Successful connection&#039;;&lt;br /&gt;
	mssql_close($link);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
8. Install Moodle as usual.  Good luck!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Troubleshooting ===&lt;br /&gt;
If you encounter some problems you can try:&lt;br /&gt;
*check that you have DotNet framework 1.1 installed (later version are installed on Vista, but you could need this specific one)&amp;lt;br /&amp;gt;&lt;br /&gt;
*enable TCP/IP for MSSQL: SQL Server 2005 Network Configuration -&amp;gt; Protocols for MSSQLSERVER -&amp;gt; TCP/IP (Enable) -&amp;gt; Properties -&amp;gt; Ip Addresses -&amp;gt; 127.0.0.1 (Active+Enable)&amp;lt;br /&amp;gt;&lt;br /&gt;
*make sure the SQL Server Browser service is running SQL Server 2005 Network Configuration -&amp;gt; SQL Server Services&amp;lt;br /&amp;gt;&lt;br /&gt;
*if you are using SQL Server 2005 and you have the error &#039;&#039;4004: Unicode data in a Unicode-only collation or ntext data cannot be sent to clients using DB-Library (such as ISQL) or ODBC version 3.7 or earlier&#039;&#039;, try the ODBTP method (next chapter). The SQL Server complaining that it doesn&#039;t support pure Unicode via TDS or older versions of ODBC. Microsoft has deprecated DB-Library a long ago, in favor of ODBC, OLE DB, or SQL Native Client. Many new features of SQL 2005 aren&#039;t accessible via DB-Library so if you need them, you could have to switch away from tools based on TDS and DB-Library :(&lt;br /&gt;
&lt;br /&gt;
== FreeTDS on Linux (on Ubuntu by compiling an mssql.so extension) ==&lt;br /&gt;
This is a good read to [http://www.robert-gonzalez.com/2009/02/18/building-the-php-ms-sql-server-extension-from-source-on-ubuntu-810/ building a FreeTDS based mssql extension for apache on Ubuntu]. Do note that [http://www.freetds.org/news.html freeTDS] 0.91 was recently released, you can find latest versions [http://freetds.sourceforge.net/ here]. &lt;br /&gt;
&lt;br /&gt;
Note: the freetds.conf file you use should have &amp;quot;text size = 20971520&amp;quot; as mentioned in the FreeTDS on Windows section otherwise you might see sessions logging out or worse apache segmentation faults. Also see [[FreeTDS]].&lt;br /&gt;
&lt;br /&gt;
Note2: Please note that updating php tends to remove the freetds configurations. You might need to reconfigure freetds after an upgrade&lt;br /&gt;
&lt;br /&gt;
== Using FreeTDS on Debian Lenny ==&lt;br /&gt;
I found the following solution using:&lt;br /&gt;
* PHP Version 5.2.6-1+lenny9&lt;br /&gt;
* Microsoft SQL Server Enterprise Edition, version: 9.00.4053.00&lt;br /&gt;
&amp;lt;pre&amp;gt;apt-get install libsybdb5 freetds-common php5-sybase&lt;br /&gt;
/etc/init.d/apache2 restart&amp;lt;/pre&amp;gt;&lt;br /&gt;
At the end of the process, if all goes fine, you will find in the mssql section of phpinfo();&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;nicetable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! MSSQL Support&lt;br /&gt;
! enabled&lt;br /&gt;
|-&lt;br /&gt;
| Library version &lt;br /&gt;
| FreeTDS &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Once FreeTDS is correctly installed, don not forget to set it up following explanations in https://docs.moodle.org/en/FreeTDS&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Errors FAQ]]&lt;br /&gt;
* Using Moodle [http://moodle.org/mod/forum/view.php?id=28 Installation problems forum]&lt;br /&gt;
&lt;br /&gt;
[[Category:XMLDB]]&lt;br /&gt;
[[Category:DB]]&lt;br /&gt;
[[Category:SQL databases]]&lt;/div&gt;</summary>
		<author><name>Stronk7</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/2x/pl/index.php?title=Installing_MSSQL_for_PHP&amp;diff=108373</id>
		<title>Installing MSSQL for PHP</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/2x/pl/index.php?title=Installing_MSSQL_for_PHP&amp;diff=108373"/>
		<updated>2013-12-13T18:40:45Z</updated>

		<summary type="html">&lt;p&gt;Stronk7: /* Using FreeTDS on Windows */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Installing Moodle}}== Introduction ==&lt;br /&gt;
&lt;br /&gt;
This short manual is suitable if you are trying to run Moodle using the SQL*Server (MSSQL) RDBMS. Steps detailed below must be performed &#039;&#039;&#039;before&#039;&#039;&#039; installing Moodle itself.&lt;br /&gt;
&lt;br /&gt;
Some of this may also apply if you wish to access an MSSQL server for external db authentication/enrollment. &lt;br /&gt;
&lt;br /&gt;
First of all, minimum required version of MSSQL has been stabilised to MSSQL 2005 (v.9).&lt;br /&gt;
&lt;br /&gt;
While PHP comes with one, more or less, standard extension (mssql) that provides access to MSSQL databases, early we found some hard limits on it. Basically such default extension has some limits that prevent us to use it at all (you can find more info about these problems [[Development:XMLDB problems#MSSQL, PHP, UTF-8 and UCS-2|here]]).&lt;br /&gt;
&lt;br /&gt;
So, in order to allow PHP (i.e. Moodle) to access to MSSQL DBs properly we have to install a &#039;&#039;&#039;mssql extension alternative&#039;&#039;&#039; to save us from the problems related above. See the sections below for details about the various options.&lt;br /&gt;
&lt;br /&gt;
== Installation overview ==&lt;br /&gt;
&lt;br /&gt;
1. Get MSSQL Server installed and running. ([http://www.microsoft.com/sql/editions/express/default.mspx A free limited version, SQL Server Express Edition] is available for testing.)&lt;br /&gt;
:Make sure that you choose mixed authentication (Windows and local accounts) to keep things simpler later.  You&#039;ll be asked to define the  &amp;quot;sa&amp;quot; account password (it&#039;s the default System Administrator account which has full access to all databases by default).&lt;br /&gt;
&lt;br /&gt;
2. Make sure MS SQL Server can accept incoming TCP/IP connections on port 1433 (the standard one).&lt;br /&gt;
:You might need to explicitly allow this in your Windows firewall (see the Control Panel).  You may also need to edit options in the :&#039;&#039;&#039;SQL Server Configuration Manager&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Network Configuration&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Protocols&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;TCP/IP enabled&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
3. Open the &amp;quot;SQL Server Management Studio&amp;quot; and create a new empty database.  If you are using the &amp;quot;sa&amp;quot; account then you don&#039;t need to do anything else here.&lt;br /&gt;
&lt;br /&gt;
4. Configure these settings in your created (and still empty) database:&lt;br /&gt;
Configure these settings in your created (and still empty) database:&lt;br /&gt;
:*Use a case sensitive collation, such as Latin1_General_CS_AS.&lt;br /&gt;
:*ANSI NULLS Enabled = True (ALTER DATABASE xxxx SET ANSI_NULLS ON)&lt;br /&gt;
:*Quoted Identifiers Enabled = True (ALTER DATABASE xxxx SET QUOTED_IDENTIFIER ON)&lt;br /&gt;
:*Is Read Committed transaction ON = True (ALTER DATABASE xxxx SET READ_COMMITTED_SNAPSHOT ON)&lt;br /&gt;
:** In older versions this is not settable via the DB properties. To set READ_COMMITTED_SNAPSHOT, there must be no active connections to the database except for the connection executing the ALTER command. If you are viewing the DB in the Server Management Studio, disconnect from any servers in the &amp;quot;Object Explorer&amp;quot; (right-click &amp;gt; Disconnect), then create a &amp;quot;New Query&amp;quot; and run the ALTER command. See http://msdn.microsoft.com/en-us/library/bb522682.aspx for details.&lt;br /&gt;
:** If your DB name starts with a number, you may need to put quotes around the DB name in the query.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5. Get PHP installed with a web server.   Unless you want to do it under IIS or some other way, the packages on the [http://download.moodle.org Moodle download page] are a good solution.&lt;br /&gt;
&lt;br /&gt;
6. Choose one of the following specific sections for your server to install the &#039;&#039;&#039;mssql extension alternative&#039;&#039;&#039; installed and running properly on your PHP box.&lt;br /&gt;
&lt;br /&gt;
7. Set the following settings in your php.ini file&lt;br /&gt;
:* mssql.textlimit = 20971520&lt;br /&gt;
:* mssql.textsize = 20971520&lt;br /&gt;
&lt;br /&gt;
8. With all this properly configured, you can continue with a [[Installing Moodle|standard Moodle installation]].&lt;br /&gt;
&lt;br /&gt;
== Microsoft Drivers for SQL Server for PHP ==&lt;br /&gt;
&lt;br /&gt;
In July 2008 Microsoft [http://social.msdn.microsoft.com/forums/en-US/sqldriverforphp/thread/a10e5202-9e41-4ff8-a33e-fbcc7b951be2/ released] a new SQL Server Driver for PHP. This is a PHP extension that allows PHP scripts to read and write data on Microsoft SQL Server databases and it overcomes the problems with the native SQL Server extension that was previously bundled with PHP.&lt;br /&gt;
&lt;br /&gt;
When using [[IIS]] it is strongly recommended to use the official Microsoft PHP installer from http://php.iis.net/, it should include the latest version of necessary drivers and it also simplifies future upgrades and configuration.&lt;br /&gt;
&lt;br /&gt;
For Windows servers with [[Apache]] see http://www.microsoft.com/en-us/download/details.aspx?id=20098.&lt;br /&gt;
&lt;br /&gt;
To know more about how to run Moodle with these drivers go to [[Using the Microsoft SQL Server Driver for PHP]].&lt;br /&gt;
&lt;br /&gt;
== Using FreeTDS on Windows ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&#039;&#039;&#039;Important Note 1:&#039;&#039;&#039; Due to some previous bugs it&#039;s highly recommendable to use PHP &amp;gt;= 5.2.6 and FreeTDS 0.82 + post-release patches ([http://tracker.moodle.org/browse/MDL-14725 more info]).&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If your web server is on Windows, use &#039;&#039;&#039;php_dblib.dll&#039;&#039;&#039;. Despite the name, it&#039;s FreeTDS compiled for Windows. (Go to this page for information on [https://docs.moodle.org/en/FreeTDS Using FreeTDS for Unix].) &lt;br /&gt;
&lt;br /&gt;
Originally we were using the DLLs available at [http://kromann.info/article.php?Id=11062598797760000 Frank Kromann&#039;s site], but they are outdated (using old versions of FreeTDS) and that has caused [http://tracker.moodle.org/browse/MDL-14725 some problems] in the past.&lt;br /&gt;
&lt;br /&gt;
So, right now, the recommended way to use FreeTDS under Windows is to use PHP 5.2.x following the following instructions:&lt;br /&gt;
&lt;br /&gt;
1. Download the appropriate copy of php_dblib.dll from the list below, and save it into your /PHP/ext directory.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; align=&amp;quot;center&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! PHP version !! [http://www.iis-aid.com/articles/my_word/difference_between_php_thread_safe_and_non_thread_safe_binaries Thread Safe]  !! FreeTDS version !! Download URL&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | PHP 5.2.x (vc6) || Yes || 0.82 + 20090302 patches || [http://download.moodle.org/download.php/dblib/php52/DBLIB_TS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| No || 0.82 + 20090302 patches || [http://download.moodle.org/download.php/dblib/php52/DBLIB_NOTS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | PHP 5.3.x (vc9) || Yes || 0.82 + 20090904 patches || [http://download.moodle.org/download.php/dblib/php53_vc9/DBLIB_TS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| No || 0.82 + 20090904 patches || [http://download.moodle.org/download.php/dblib/php53_vc9/DBLIB_NOTS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | PHP 5.4.x (vc9) || Yes || 0.82 + 20110906 patches || [http://download.moodle.org/download.php/dblib/php54_vc9/DBLIB_TS.zip Download!] Mirrors: [http://inethub.olvi.net.ua/ftp/pub/soft/programming/php/ms%20sql%20driver%20for%20%20php%205.4.10/dblib_ts.zip 1] [ftp://inethub.olvi.net.ua/pub/soft/programming/php/ms%20sql%20driver%20for%20%20php%205.4.10/DBLIB_TS.zip 2 (ftp)] [http://www.sendspace.com/file/vtger3 3]&lt;br /&gt;
|-&lt;br /&gt;
| No || 0.82 + 20110906 patches || [http://download.moodle.org/download.php/dblib/php54_vc9/DBLIB_TS.zip Download!] Mirrors: [http://inethub.olvi.net.ua/ftp/pub/soft/programming/php/ms%20sql%20driver%20for%20%20php%205.4.10/dblib_nts.zip 1] [ftp://inethub.olvi.net.ua/pub/soft/programming/php/ms%20sql%20driver%20for%20%20php%205.4.10/DBLIB_NTS.zip 2 (ftp)] [http://www.sendspace.com/file/nkg2j4 3]&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | PHP 5.5.x (vc11-x86) || Yes || 0.91.89 || [http://download.moodle.org/download.php/dblib/php55_vc11_x86/DBLIB_TS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| No || 0.91.89 || [http://download.moodle.org/download.php/dblib/php55_vc11_x86/DBLIB_NOTS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |  Thanks to [http://remote-learner.net/ Remote-Learner]] (Moodle [http://moodle.com/partners/ Partner]) and specially to Bryan Williams, donating one Visual C++ 6.0 Pro license to Moodle. Thanks to Trevor Johnson and his builds of the dblib extensions. Thanks to Daniele, Doug, Luis, Sean and many others by their collaboration in MDL-14725. Thanks to Frediano Ziglio and James K. Lowden from [http://freetds.org freetds.org] by their support. Thanks to [[User:Alastair Hole|Alastair Hole]] for providing the PHP 5.3 builds of the libraries. Thanks to Enyby by providing the PHP 5.4 builds of the libraries. Thanks to David Aylmer for providing the PHP 5.5 builds of the libraries. Thanks!&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
(alternatively here you can find some [[Development:Compiling FreeTDS under Windows|instructions to build those freetds extensions under win32]] yourself)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. FreeTDS requires the .NET Framework v1.1 to be installed.  You can [http://www.microsoft.com/downloads/details.aspx?FamilyID=262d25e3-f589-4842-8157-034d1e7cf3a3&amp;amp;DisplayLang=en download it from the Microsoft website] along with its [http://www.microsoft.com/downloads/details.aspx?FamilyID=a8f5654f-088e-40b2-bbdb-a83353618b38&amp;amp;DisplayLang=en service pack].  Alternatively, if you do not wish to install this framework, you can [http://kromann.info/ms-libs/msvcr71.dll download the required DLL] from Frank&#039;s site, and save it into your /PHP root directory.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. Edit your /PHP/php.ini file and add this line:&lt;br /&gt;
&lt;br /&gt;
  extension=php_dblib.dll &lt;br /&gt;
&lt;br /&gt;
Make sure that any lines referring to the php_mssql.dll extension are DISABLED (commented out).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. When the PHP engine loads the FreeTDS extension it needs to be passed certain infiormation in order to be able to connect to your Moodle database. To retrieve this information FreeTDS looks for a file called &#039;&#039;&#039;freetds.conf&#039;&#039;&#039; in the root folder of the server that PHP installed on (e.g. C:\).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;freetds.conf&#039;&#039;&#039; should have the following structure:&lt;br /&gt;
&lt;br /&gt;
  [global]&lt;br /&gt;
      host = xxx.xxx.xxx.xxx (host name or ip of the MSSQL server)&lt;br /&gt;
      port = 1433&lt;br /&gt;
      client charset = UTF-8&lt;br /&gt;
      tds version = 8.0&lt;br /&gt;
      text size = 20971520&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want to connect to a particular [http://msdn.microsoft.com/en-us/library/aa174516(SQL.80).aspx instance] of MSSQL you should specify the instance name:&lt;br /&gt;
&lt;br /&gt;
  [global]&lt;br /&gt;
      host = xxx.xxx.xxx.xxx (host name or ip of the MSSQL server)&lt;br /&gt;
      instance = xxx (instance name, e.g. INST2)&lt;br /&gt;
      port = 1433&lt;br /&gt;
      client charset = UTF-8&lt;br /&gt;
      tds version = 8.0&lt;br /&gt;
      text size = 20971520&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
*You can configure FreeTDS to look for the freetds.conf file in any directory that you want - you don&#039;t have to use C:\. To do this create a SYSTEM environment variable called &#039;&#039;&#039;FREETDS&#039;&#039;&#039; and point it to the directory where you have installed the freetds.conf file. If you do not set this environment variable FreeTDS will look for the freetds.conf file in the C:\ folder, which is the default. One possible benefit of setting the FREETDS environment variable and using a different installation directory for freetds.conf is that C:\ is very predictable to a hacker that knows anything about FreeTDS and that is the first place that he would look if he wanted to compromise your system. So, using a different installation directory would just make your system stronger. See the FreeTDS [http://www.freetds.org/userguide/envvar.htm Setting the environment variables] documentation for more information about this FREETDS environment variable.&lt;br /&gt;
&lt;br /&gt;
*Alternatively, you can [[Development:Compiling FreeTDS under Windows|recompile]] the FreeTDS extension yourself and change the default location to your preferred location at compile time. Then it is not necessary to create any environment variable. You must just ensure that freetds.conf is in the same folder that you specify when you compile php_dblib.dll.&lt;br /&gt;
&lt;br /&gt;
*MSSQL is usually installed with port 1433 as the default. However, if the port was changed on your server when you installed MSSQL then you need to specify the correct port number.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5. Your Moodle &#039;&#039;&#039;config.php&#039;&#039;&#039; should include lines like these:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
$CFG-&amp;gt;dbtype    = &#039;mssql&#039;;        // Required&lt;br /&gt;
$CFG-&amp;gt;dbhost    = &#039;localhost&#039;;      // assuming MS SQL is on the same server, otherwise use an IP&lt;br /&gt;
$CFG-&amp;gt;dbname    = &#039;moodle&#039;;         // or whatever you called the database you created&lt;br /&gt;
$CFG-&amp;gt;dbuser    = &#039;yourusername&#039;;   // I usually use the &#039;sa&#039; account (dbowner perms are enough)&lt;br /&gt;
$CFG-&amp;gt;dbpass    = &#039;yourpassword&#039;;&lt;br /&gt;
$CFG-&amp;gt;dbpersist =  false;&lt;br /&gt;
$CFG-&amp;gt;prefix    = &#039;mdl_&#039;;            //Prefix, you can change it, but NEVER leave it blank.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t have a config.php file yet, it can be generated as normal from the Moodle installer. Alternatively you can use the config-dist.php file that comes with the Moodle package to create your own config.php file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6. Restart or start your web server.  If Moodle still cannot communicate with the database server, please turn display_startup_errors to &amp;quot;On&amp;quot; in your /PHP/php.ini file, then restart the web server and check for any errors that may indicate incorrect DLL versions or missing dependencies.  These error reports, turned off by default in PHP, can be vital in locating a problem with new extension installations.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
7. Database conection test, try this PHP script, just put in a text file called test.php change (&#039;localhost&#039;, &#039;db_user&#039;, &#039;db_password&#039;) to suite your setup, and load from local host (http://localhost/test.php)...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
	$link = mssql_connect(&#039;localhost&#039;, &#039;db_user&#039;, &#039;db_password&#039;);&lt;br /&gt;
	if(!$link) {&lt;br /&gt;
		echo&#039;Could not connect&#039;;&lt;br /&gt;
		die(&#039;Could not connect: &#039; . mssql_error());&lt;br /&gt;
	}&lt;br /&gt;
	echo&#039;Successful connection&#039;;&lt;br /&gt;
	mssql_close($link);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
8. Install Moodle as usual.  Good luck!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Troubleshooting ===&lt;br /&gt;
If you encounter some problems you can try:&lt;br /&gt;
*check that you have DotNet framework 1.1 installed (later version are installed on Vista, but you could need this specific one)&amp;lt;br /&amp;gt;&lt;br /&gt;
*enable TCP/IP for MSSQL: SQL Server 2005 Network Configuration -&amp;gt; Protocols for MSSQLSERVER -&amp;gt; TCP/IP (Enable) -&amp;gt; Properties -&amp;gt; Ip Addresses -&amp;gt; 127.0.0.1 (Active+Enable)&amp;lt;br /&amp;gt;&lt;br /&gt;
*make sure the SQL Server Browser service is running SQL Server 2005 Network Configuration -&amp;gt; SQL Server Services&amp;lt;br /&amp;gt;&lt;br /&gt;
*if you are using SQL Server 2005 and you have the error &#039;&#039;4004: Unicode data in a Unicode-only collation or ntext data cannot be sent to clients using DB-Library (such as ISQL) or ODBC version 3.7 or earlier&#039;&#039;, try the ODBTP method (next chapter). The SQL Server complaining that it doesn&#039;t support pure Unicode via TDS or older versions of ODBC. Microsoft has deprecated DB-Library a long ago, in favor of ODBC, OLE DB, or SQL Native Client. Many new features of SQL 2005 aren&#039;t accessible via DB-Library so if you need them, you could have to switch away from tools based on TDS and DB-Library :(&lt;br /&gt;
&lt;br /&gt;
== FreeTDS on Linux (on Ubuntu by compiling an mssql.so extension) ==&lt;br /&gt;
This is a good read to [http://www.robert-gonzalez.com/2009/02/18/building-the-php-ms-sql-server-extension-from-source-on-ubuntu-810/ building a FreeTDS based mssql extension for apache on Ubuntu]. Do note that [http://www.freetds.org/news.html freeTDS] 0.91 was recently released, you can find latest versions [http://freetds.sourceforge.net/ here]. &lt;br /&gt;
&lt;br /&gt;
Note: the freetds.conf file you use should have &amp;quot;text size = 20971520&amp;quot; as mentioned in the FreeTDS on Windows section otherwise you might see sessions logging out or worse apache segmentation faults. Also see [[FreeTDS]].&lt;br /&gt;
&lt;br /&gt;
Note2: Please note that updating php tends to remove the freetds configurations. You might need to reconfigure freetds after an upgrade&lt;br /&gt;
&lt;br /&gt;
== Using FreeTDS on Debian Lenny ==&lt;br /&gt;
I found the following solution using:&lt;br /&gt;
* PHP Version 5.2.6-1+lenny9&lt;br /&gt;
* Microsoft SQL Server Enterprise Edition, version: 9.00.4053.00&lt;br /&gt;
&amp;lt;pre&amp;gt;apt-get install libsybdb5 freetds-common php5-sybase&lt;br /&gt;
/etc/init.d/apache2 restart&amp;lt;/pre&amp;gt;&lt;br /&gt;
At the end of the process, if all goes fine, you will find in the mssql section of phpinfo();&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;nicetable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! MSSQL Support&lt;br /&gt;
! enabled&lt;br /&gt;
|-&lt;br /&gt;
| Library version &lt;br /&gt;
| FreeTDS &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Once FreeTDS is correctly installed, don not forget to set it up following explanations in https://docs.moodle.org/en/FreeTDS&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Errors FAQ]]&lt;br /&gt;
* Using Moodle [http://moodle.org/mod/forum/view.php?id=28 Installation problems forum]&lt;br /&gt;
&lt;br /&gt;
[[Category:XMLDB]]&lt;br /&gt;
[[Category:DB]]&lt;br /&gt;
[[Category:SQL databases]]&lt;/div&gt;</summary>
		<author><name>Stronk7</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/2x/pl/index.php?title=Installing_MSSQL_for_PHP&amp;diff=108372</id>
		<title>Installing MSSQL for PHP</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/2x/pl/index.php?title=Installing_MSSQL_for_PHP&amp;diff=108372"/>
		<updated>2013-12-13T18:40:01Z</updated>

		<summary type="html">&lt;p&gt;Stronk7: Adding links to download.moodle.org php55_vc11_x86&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Installing Moodle}}== Introduction ==&lt;br /&gt;
&lt;br /&gt;
This short manual is suitable if you are trying to run Moodle using the SQL*Server (MSSQL) RDBMS. Steps detailed below must be performed &#039;&#039;&#039;before&#039;&#039;&#039; installing Moodle itself.&lt;br /&gt;
&lt;br /&gt;
Some of this may also apply if you wish to access an MSSQL server for external db authentication/enrollment. &lt;br /&gt;
&lt;br /&gt;
First of all, minimum required version of MSSQL has been stabilised to MSSQL 2005 (v.9).&lt;br /&gt;
&lt;br /&gt;
While PHP comes with one, more or less, standard extension (mssql) that provides access to MSSQL databases, early we found some hard limits on it. Basically such default extension has some limits that prevent us to use it at all (you can find more info about these problems [[Development:XMLDB problems#MSSQL, PHP, UTF-8 and UCS-2|here]]).&lt;br /&gt;
&lt;br /&gt;
So, in order to allow PHP (i.e. Moodle) to access to MSSQL DBs properly we have to install a &#039;&#039;&#039;mssql extension alternative&#039;&#039;&#039; to save us from the problems related above. See the sections below for details about the various options.&lt;br /&gt;
&lt;br /&gt;
== Installation overview ==&lt;br /&gt;
&lt;br /&gt;
1. Get MSSQL Server installed and running. ([http://www.microsoft.com/sql/editions/express/default.mspx A free limited version, SQL Server Express Edition] is available for testing.)&lt;br /&gt;
:Make sure that you choose mixed authentication (Windows and local accounts) to keep things simpler later.  You&#039;ll be asked to define the  &amp;quot;sa&amp;quot; account password (it&#039;s the default System Administrator account which has full access to all databases by default).&lt;br /&gt;
&lt;br /&gt;
2. Make sure MS SQL Server can accept incoming TCP/IP connections on port 1433 (the standard one).&lt;br /&gt;
:You might need to explicitly allow this in your Windows firewall (see the Control Panel).  You may also need to edit options in the :&#039;&#039;&#039;SQL Server Configuration Manager&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Network Configuration&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Protocols&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;TCP/IP enabled&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
3. Open the &amp;quot;SQL Server Management Studio&amp;quot; and create a new empty database.  If you are using the &amp;quot;sa&amp;quot; account then you don&#039;t need to do anything else here.&lt;br /&gt;
&lt;br /&gt;
4. Configure these settings in your created (and still empty) database:&lt;br /&gt;
Configure these settings in your created (and still empty) database:&lt;br /&gt;
:*Use a case sensitive collation, such as Latin1_General_CS_AS.&lt;br /&gt;
:*ANSI NULLS Enabled = True (ALTER DATABASE xxxx SET ANSI_NULLS ON)&lt;br /&gt;
:*Quoted Identifiers Enabled = True (ALTER DATABASE xxxx SET QUOTED_IDENTIFIER ON)&lt;br /&gt;
:*Is Read Committed transaction ON = True (ALTER DATABASE xxxx SET READ_COMMITTED_SNAPSHOT ON)&lt;br /&gt;
:** In older versions this is not settable via the DB properties. To set READ_COMMITTED_SNAPSHOT, there must be no active connections to the database except for the connection executing the ALTER command. If you are viewing the DB in the Server Management Studio, disconnect from any servers in the &amp;quot;Object Explorer&amp;quot; (right-click &amp;gt; Disconnect), then create a &amp;quot;New Query&amp;quot; and run the ALTER command. See http://msdn.microsoft.com/en-us/library/bb522682.aspx for details.&lt;br /&gt;
:** If your DB name starts with a number, you may need to put quotes around the DB name in the query.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5. Get PHP installed with a web server.   Unless you want to do it under IIS or some other way, the packages on the [http://download.moodle.org Moodle download page] are a good solution.&lt;br /&gt;
&lt;br /&gt;
6. Choose one of the following specific sections for your server to install the &#039;&#039;&#039;mssql extension alternative&#039;&#039;&#039; installed and running properly on your PHP box.&lt;br /&gt;
&lt;br /&gt;
7. Set the following settings in your php.ini file&lt;br /&gt;
:* mssql.textlimit = 20971520&lt;br /&gt;
:* mssql.textsize = 20971520&lt;br /&gt;
&lt;br /&gt;
8. With all this properly configured, you can continue with a [[Installing Moodle|standard Moodle installation]].&lt;br /&gt;
&lt;br /&gt;
== Microsoft Drivers for SQL Server for PHP ==&lt;br /&gt;
&lt;br /&gt;
In July 2008 Microsoft [http://social.msdn.microsoft.com/forums/en-US/sqldriverforphp/thread/a10e5202-9e41-4ff8-a33e-fbcc7b951be2/ released] a new SQL Server Driver for PHP. This is a PHP extension that allows PHP scripts to read and write data on Microsoft SQL Server databases and it overcomes the problems with the native SQL Server extension that was previously bundled with PHP.&lt;br /&gt;
&lt;br /&gt;
When using [[IIS]] it is strongly recommended to use the official Microsoft PHP installer from http://php.iis.net/, it should include the latest version of necessary drivers and it also simplifies future upgrades and configuration.&lt;br /&gt;
&lt;br /&gt;
For Windows servers with [[Apache]] see http://www.microsoft.com/en-us/download/details.aspx?id=20098.&lt;br /&gt;
&lt;br /&gt;
To know more about how to run Moodle with these drivers go to [[Using the Microsoft SQL Server Driver for PHP]].&lt;br /&gt;
&lt;br /&gt;
== Using FreeTDS on Windows ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&#039;&#039;&#039;Important Note 1:&#039;&#039;&#039; Due to some previous bugs it&#039;s highly recommendable to use PHP &amp;gt;= 5.2.6 and FreeTDS 0.82 + post-release patches ([http://tracker.moodle.org/browse/MDL-14725 more info]).&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If your web server is on Windows, use &#039;&#039;&#039;php_dblib.dll&#039;&#039;&#039;. Despite the name, it&#039;s FreeTDS compiled for Windows. (Go to this page for information on [https://docs.moodle.org/en/FreeTDS Using FreeTDS for Unix].) &lt;br /&gt;
&lt;br /&gt;
Originally we were using the DLLs available at [http://kromann.info/article.php?Id=11062598797760000 Frank Kromann&#039;s site], but they are outdated (using old versions of FreeTDS) and that has caused [http://tracker.moodle.org/browse/MDL-14725 some problems] in the past.&lt;br /&gt;
&lt;br /&gt;
So, right now, the recommended way to use FreeTDS under Windows is to use PHP 5.2.x following the following instructions:&lt;br /&gt;
&lt;br /&gt;
1. Download the appropriate copy of php_dblib.dll from the list below, and save it into your /PHP/ext directory.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; align=&amp;quot;center&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! PHP version !! [http://www.iis-aid.com/articles/my_word/difference_between_php_thread_safe_and_non_thread_safe_binaries Thread Safe]  !! FreeTDS version !! Download URL&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | PHP 5.2.x (vc6) || Yes || 0.82 + 20090302 patches || [http://download.moodle.org/download.php/dblib/php52/DBLIB_TS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| No || 0.82 + 20090302 patches || [http://download.moodle.org/download.php/dblib/php52/DBLIB_NOTS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | PHP 5.3.x (vc9) || Yes || 0.82 + 20090904 patches || [http://download.moodle.org/download.php/dblib/php53_vc9/DBLIB_TS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| No || 0.82 + 20090904 patches || [http://download.moodle.org/download.php/dblib/php53_vc9/DBLIB_NOTS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | PHP 5.4.x (vc9) || Yes || 0.82 + 20110906 patches || [http://download.moodle.org/download.php/dblib/php54_vc9/DBLIB_TS.zip Download!] Mirrors: [http://inethub.olvi.net.ua/ftp/pub/soft/programming/php/ms%20sql%20driver%20for%20%20php%205.4.10/dblib_ts.zip 1] [ftp://inethub.olvi.net.ua/pub/soft/programming/php/ms%20sql%20driver%20for%20%20php%205.4.10/DBLIB_TS.zip 2 (ftp)] [http://www.sendspace.com/file/vtger3 3]&lt;br /&gt;
|-&lt;br /&gt;
| No || 0.82 + 20110906 patches || [http://download.moodle.org/download.php/dblib/php54_vc9/DBLIB_TS.zip Download!] Mirrors: [http://inethub.olvi.net.ua/ftp/pub/soft/programming/php/ms%20sql%20driver%20for%20%20php%205.4.10/dblib_nts.zip 1] [ftp://inethub.olvi.net.ua/pub/soft/programming/php/ms%20sql%20driver%20for%20%20php%205.4.10/DBLIB_NTS.zip 2 (ftp)] [http://www.sendspace.com/file/nkg2j4 3]&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | PHP 5.5.x (vc11-x86) || Yes || 0.91.89 || [http://download.moodle.org/download.php/dblib/php55_vc11_x86/DBLIB_TS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| No || 0.91.89 || [http://download.moodle.org/download.php/dblib/php55_vc11_x86/DBLIB_TS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |  Thanks to [http://remote-learner.net/ Remote-Learner]] (Moodle [http://moodle.com/partners/ Partner]) and specially to Bryan Williams, donating one Visual C++ 6.0 Pro license to Moodle. Thanks to Trevor Johnson and his builds of the dblib extensions. Thanks to Daniele, Doug, Luis, Sean and many others by their collaboration in MDL-14725. Thanks to Frediano Ziglio and James K. Lowden from [http://freetds.org freetds.org] by their support. Thanks to [[User:Alastair Hole|Alastair Hole]] for providing the PHP 5.3 builds of the libraries. Thanks to Enyby by providing the PHP 5.4 builds of the libraries. Thanks to David Aylmer for providing the PHP 5.5 builds of the libraries. Thanks!&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
(alternatively here you can find some [[Development:Compiling FreeTDS under Windows|instructions to build those freetds extensions under win32]] yourself)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. FreeTDS requires the .NET Framework v1.1 to be installed.  You can [http://www.microsoft.com/downloads/details.aspx?FamilyID=262d25e3-f589-4842-8157-034d1e7cf3a3&amp;amp;DisplayLang=en download it from the Microsoft website] along with its [http://www.microsoft.com/downloads/details.aspx?FamilyID=a8f5654f-088e-40b2-bbdb-a83353618b38&amp;amp;DisplayLang=en service pack].  Alternatively, if you do not wish to install this framework, you can [http://kromann.info/ms-libs/msvcr71.dll download the required DLL] from Frank&#039;s site, and save it into your /PHP root directory.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. Edit your /PHP/php.ini file and add this line:&lt;br /&gt;
&lt;br /&gt;
  extension=php_dblib.dll &lt;br /&gt;
&lt;br /&gt;
Make sure that any lines referring to the php_mssql.dll extension are DISABLED (commented out).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. When the PHP engine loads the FreeTDS extension it needs to be passed certain infiormation in order to be able to connect to your Moodle database. To retrieve this information FreeTDS looks for a file called &#039;&#039;&#039;freetds.conf&#039;&#039;&#039; in the root folder of the server that PHP installed on (e.g. C:\).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;freetds.conf&#039;&#039;&#039; should have the following structure:&lt;br /&gt;
&lt;br /&gt;
  [global]&lt;br /&gt;
      host = xxx.xxx.xxx.xxx (host name or ip of the MSSQL server)&lt;br /&gt;
      port = 1433&lt;br /&gt;
      client charset = UTF-8&lt;br /&gt;
      tds version = 8.0&lt;br /&gt;
      text size = 20971520&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want to connect to a particular [http://msdn.microsoft.com/en-us/library/aa174516(SQL.80).aspx instance] of MSSQL you should specify the instance name:&lt;br /&gt;
&lt;br /&gt;
  [global]&lt;br /&gt;
      host = xxx.xxx.xxx.xxx (host name or ip of the MSSQL server)&lt;br /&gt;
      instance = xxx (instance name, e.g. INST2)&lt;br /&gt;
      port = 1433&lt;br /&gt;
      client charset = UTF-8&lt;br /&gt;
      tds version = 8.0&lt;br /&gt;
      text size = 20971520&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
*You can configure FreeTDS to look for the freetds.conf file in any directory that you want - you don&#039;t have to use C:\. To do this create a SYSTEM environment variable called &#039;&#039;&#039;FREETDS&#039;&#039;&#039; and point it to the directory where you have installed the freetds.conf file. If you do not set this environment variable FreeTDS will look for the freetds.conf file in the C:\ folder, which is the default. One possible benefit of setting the FREETDS environment variable and using a different installation directory for freetds.conf is that C:\ is very predictable to a hacker that knows anything about FreeTDS and that is the first place that he would look if he wanted to compromise your system. So, using a different installation directory would just make your system stronger. See the FreeTDS [http://www.freetds.org/userguide/envvar.htm Setting the environment variables] documentation for more information about this FREETDS environment variable.&lt;br /&gt;
&lt;br /&gt;
*Alternatively, you can [[Development:Compiling FreeTDS under Windows|recompile]] the FreeTDS extension yourself and change the default location to your preferred location at compile time. Then it is not necessary to create any environment variable. You must just ensure that freetds.conf is in the same folder that you specify when you compile php_dblib.dll.&lt;br /&gt;
&lt;br /&gt;
*MSSQL is usually installed with port 1433 as the default. However, if the port was changed on your server when you installed MSSQL then you need to specify the correct port number.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5. Your Moodle &#039;&#039;&#039;config.php&#039;&#039;&#039; should include lines like these:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
$CFG-&amp;gt;dbtype    = &#039;mssql&#039;;        // Required&lt;br /&gt;
$CFG-&amp;gt;dbhost    = &#039;localhost&#039;;      // assuming MS SQL is on the same server, otherwise use an IP&lt;br /&gt;
$CFG-&amp;gt;dbname    = &#039;moodle&#039;;         // or whatever you called the database you created&lt;br /&gt;
$CFG-&amp;gt;dbuser    = &#039;yourusername&#039;;   // I usually use the &#039;sa&#039; account (dbowner perms are enough)&lt;br /&gt;
$CFG-&amp;gt;dbpass    = &#039;yourpassword&#039;;&lt;br /&gt;
$CFG-&amp;gt;dbpersist =  false;&lt;br /&gt;
$CFG-&amp;gt;prefix    = &#039;mdl_&#039;;            //Prefix, you can change it, but NEVER leave it blank.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t have a config.php file yet, it can be generated as normal from the Moodle installer. Alternatively you can use the config-dist.php file that comes with the Moodle package to create your own config.php file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6. Restart or start your web server.  If Moodle still cannot communicate with the database server, please turn display_startup_errors to &amp;quot;On&amp;quot; in your /PHP/php.ini file, then restart the web server and check for any errors that may indicate incorrect DLL versions or missing dependencies.  These error reports, turned off by default in PHP, can be vital in locating a problem with new extension installations.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
7. Database conection test, try this PHP script, just put in a text file called test.php change (&#039;localhost&#039;, &#039;db_user&#039;, &#039;db_password&#039;) to suite your setup, and load from local host (http://localhost/test.php)...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
	$link = mssql_connect(&#039;localhost&#039;, &#039;db_user&#039;, &#039;db_password&#039;);&lt;br /&gt;
	if(!$link) {&lt;br /&gt;
		echo&#039;Could not connect&#039;;&lt;br /&gt;
		die(&#039;Could not connect: &#039; . mssql_error());&lt;br /&gt;
	}&lt;br /&gt;
	echo&#039;Successful connection&#039;;&lt;br /&gt;
	mssql_close($link);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
8. Install Moodle as usual.  Good luck!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Troubleshooting ===&lt;br /&gt;
If you encounter some problems you can try:&lt;br /&gt;
*check that you have DotNet framework 1.1 installed (later version are installed on Vista, but you could need this specific one)&amp;lt;br /&amp;gt;&lt;br /&gt;
*enable TCP/IP for MSSQL: SQL Server 2005 Network Configuration -&amp;gt; Protocols for MSSQLSERVER -&amp;gt; TCP/IP (Enable) -&amp;gt; Properties -&amp;gt; Ip Addresses -&amp;gt; 127.0.0.1 (Active+Enable)&amp;lt;br /&amp;gt;&lt;br /&gt;
*make sure the SQL Server Browser service is running SQL Server 2005 Network Configuration -&amp;gt; SQL Server Services&amp;lt;br /&amp;gt;&lt;br /&gt;
*if you are using SQL Server 2005 and you have the error &#039;&#039;4004: Unicode data in a Unicode-only collation or ntext data cannot be sent to clients using DB-Library (such as ISQL) or ODBC version 3.7 or earlier&#039;&#039;, try the ODBTP method (next chapter). The SQL Server complaining that it doesn&#039;t support pure Unicode via TDS or older versions of ODBC. Microsoft has deprecated DB-Library a long ago, in favor of ODBC, OLE DB, or SQL Native Client. Many new features of SQL 2005 aren&#039;t accessible via DB-Library so if you need them, you could have to switch away from tools based on TDS and DB-Library :(&lt;br /&gt;
&lt;br /&gt;
== FreeTDS on Linux (on Ubuntu by compiling an mssql.so extension) ==&lt;br /&gt;
This is a good read to [http://www.robert-gonzalez.com/2009/02/18/building-the-php-ms-sql-server-extension-from-source-on-ubuntu-810/ building a FreeTDS based mssql extension for apache on Ubuntu]. Do note that [http://www.freetds.org/news.html freeTDS] 0.91 was recently released, you can find latest versions [http://freetds.sourceforge.net/ here]. &lt;br /&gt;
&lt;br /&gt;
Note: the freetds.conf file you use should have &amp;quot;text size = 20971520&amp;quot; as mentioned in the FreeTDS on Windows section otherwise you might see sessions logging out or worse apache segmentation faults. Also see [[FreeTDS]].&lt;br /&gt;
&lt;br /&gt;
Note2: Please note that updating php tends to remove the freetds configurations. You might need to reconfigure freetds after an upgrade&lt;br /&gt;
&lt;br /&gt;
== Using FreeTDS on Debian Lenny ==&lt;br /&gt;
I found the following solution using:&lt;br /&gt;
* PHP Version 5.2.6-1+lenny9&lt;br /&gt;
* Microsoft SQL Server Enterprise Edition, version: 9.00.4053.00&lt;br /&gt;
&amp;lt;pre&amp;gt;apt-get install libsybdb5 freetds-common php5-sybase&lt;br /&gt;
/etc/init.d/apache2 restart&amp;lt;/pre&amp;gt;&lt;br /&gt;
At the end of the process, if all goes fine, you will find in the mssql section of phpinfo();&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;nicetable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! MSSQL Support&lt;br /&gt;
! enabled&lt;br /&gt;
|-&lt;br /&gt;
| Library version &lt;br /&gt;
| FreeTDS &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Once FreeTDS is correctly installed, don not forget to set it up following explanations in https://docs.moodle.org/en/FreeTDS&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Errors FAQ]]&lt;br /&gt;
* Using Moodle [http://moodle.org/mod/forum/view.php?id=28 Installation problems forum]&lt;br /&gt;
&lt;br /&gt;
[[Category:XMLDB]]&lt;br /&gt;
[[Category:DB]]&lt;br /&gt;
[[Category:SQL databases]]&lt;/div&gt;</summary>
		<author><name>Stronk7</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/2x/pl/index.php?title=Installing_MSSQL_for_PHP&amp;diff=108371</id>
		<title>Installing MSSQL for PHP</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/2x/pl/index.php?title=Installing_MSSQL_for_PHP&amp;diff=108371"/>
		<updated>2013-12-13T18:21:21Z</updated>

		<summary type="html">&lt;p&gt;Stronk7: Adding links to download.moodle.org php53_vc9&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Installing Moodle}}== Introduction ==&lt;br /&gt;
&lt;br /&gt;
This short manual is suitable if you are trying to run Moodle using the SQL*Server (MSSQL) RDBMS. Steps detailed below must be performed &#039;&#039;&#039;before&#039;&#039;&#039; installing Moodle itself.&lt;br /&gt;
&lt;br /&gt;
Some of this may also apply if you wish to access an MSSQL server for external db authentication/enrollment. &lt;br /&gt;
&lt;br /&gt;
First of all, minimum required version of MSSQL has been stabilised to MSSQL 2005 (v.9).&lt;br /&gt;
&lt;br /&gt;
While PHP comes with one, more or less, standard extension (mssql) that provides access to MSSQL databases, early we found some hard limits on it. Basically such default extension has some limits that prevent us to use it at all (you can find more info about these problems [[Development:XMLDB problems#MSSQL, PHP, UTF-8 and UCS-2|here]]).&lt;br /&gt;
&lt;br /&gt;
So, in order to allow PHP (i.e. Moodle) to access to MSSQL DBs properly we have to install a &#039;&#039;&#039;mssql extension alternative&#039;&#039;&#039; to save us from the problems related above. See the sections below for details about the various options.&lt;br /&gt;
&lt;br /&gt;
== Installation overview ==&lt;br /&gt;
&lt;br /&gt;
1. Get MSSQL Server installed and running. ([http://www.microsoft.com/sql/editions/express/default.mspx A free limited version, SQL Server Express Edition] is available for testing.)&lt;br /&gt;
:Make sure that you choose mixed authentication (Windows and local accounts) to keep things simpler later.  You&#039;ll be asked to define the  &amp;quot;sa&amp;quot; account password (it&#039;s the default System Administrator account which has full access to all databases by default).&lt;br /&gt;
&lt;br /&gt;
2. Make sure MS SQL Server can accept incoming TCP/IP connections on port 1433 (the standard one).&lt;br /&gt;
:You might need to explicitly allow this in your Windows firewall (see the Control Panel).  You may also need to edit options in the :&#039;&#039;&#039;SQL Server Configuration Manager&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Network Configuration&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Protocols&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;TCP/IP enabled&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
3. Open the &amp;quot;SQL Server Management Studio&amp;quot; and create a new empty database.  If you are using the &amp;quot;sa&amp;quot; account then you don&#039;t need to do anything else here.&lt;br /&gt;
&lt;br /&gt;
4. Configure these settings in your created (and still empty) database:&lt;br /&gt;
Configure these settings in your created (and still empty) database:&lt;br /&gt;
:*Use a case sensitive collation, such as Latin1_General_CS_AS.&lt;br /&gt;
:*ANSI NULLS Enabled = True (ALTER DATABASE xxxx SET ANSI_NULLS ON)&lt;br /&gt;
:*Quoted Identifiers Enabled = True (ALTER DATABASE xxxx SET QUOTED_IDENTIFIER ON)&lt;br /&gt;
:*Is Read Committed transaction ON = True (ALTER DATABASE xxxx SET READ_COMMITTED_SNAPSHOT ON)&lt;br /&gt;
:** In older versions this is not settable via the DB properties. To set READ_COMMITTED_SNAPSHOT, there must be no active connections to the database except for the connection executing the ALTER command. If you are viewing the DB in the Server Management Studio, disconnect from any servers in the &amp;quot;Object Explorer&amp;quot; (right-click &amp;gt; Disconnect), then create a &amp;quot;New Query&amp;quot; and run the ALTER command. See http://msdn.microsoft.com/en-us/library/bb522682.aspx for details.&lt;br /&gt;
:** If your DB name starts with a number, you may need to put quotes around the DB name in the query.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5. Get PHP installed with a web server.   Unless you want to do it under IIS or some other way, the packages on the [http://download.moodle.org Moodle download page] are a good solution.&lt;br /&gt;
&lt;br /&gt;
6. Choose one of the following specific sections for your server to install the &#039;&#039;&#039;mssql extension alternative&#039;&#039;&#039; installed and running properly on your PHP box.&lt;br /&gt;
&lt;br /&gt;
7. Set the following settings in your php.ini file&lt;br /&gt;
:* mssql.textlimit = 20971520&lt;br /&gt;
:* mssql.textsize = 20971520&lt;br /&gt;
&lt;br /&gt;
8. With all this properly configured, you can continue with a [[Installing Moodle|standard Moodle installation]].&lt;br /&gt;
&lt;br /&gt;
== Microsoft Drivers for SQL Server for PHP ==&lt;br /&gt;
&lt;br /&gt;
In July 2008 Microsoft [http://social.msdn.microsoft.com/forums/en-US/sqldriverforphp/thread/a10e5202-9e41-4ff8-a33e-fbcc7b951be2/ released] a new SQL Server Driver for PHP. This is a PHP extension that allows PHP scripts to read and write data on Microsoft SQL Server databases and it overcomes the problems with the native SQL Server extension that was previously bundled with PHP.&lt;br /&gt;
&lt;br /&gt;
When using [[IIS]] it is strongly recommended to use the official Microsoft PHP installer from http://php.iis.net/, it should include the latest version of necessary drivers and it also simplifies future upgrades and configuration.&lt;br /&gt;
&lt;br /&gt;
For Windows servers with [[Apache]] see http://www.microsoft.com/en-us/download/details.aspx?id=20098.&lt;br /&gt;
&lt;br /&gt;
To know more about how to run Moodle with these drivers go to [[Using the Microsoft SQL Server Driver for PHP]].&lt;br /&gt;
&lt;br /&gt;
== Using FreeTDS on Windows ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&#039;&#039;&#039;Important Note 1:&#039;&#039;&#039; Due to some previous bugs it&#039;s highly recommendable to use PHP &amp;gt;= 5.2.6 and FreeTDS 0.82 + post-release patches ([http://tracker.moodle.org/browse/MDL-14725 more info]).&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If your web server is on Windows, use &#039;&#039;&#039;php_dblib.dll&#039;&#039;&#039;. Despite the name, it&#039;s FreeTDS compiled for Windows. (Go to this page for information on [https://docs.moodle.org/en/FreeTDS Using FreeTDS for Unix].) &lt;br /&gt;
&lt;br /&gt;
Originally we were using the DLLs available at [http://kromann.info/article.php?Id=11062598797760000 Frank Kromann&#039;s site], but they are outdated (using old versions of FreeTDS) and that has caused [http://tracker.moodle.org/browse/MDL-14725 some problems] in the past.&lt;br /&gt;
&lt;br /&gt;
So, right now, the recommended way to use FreeTDS under Windows is to use PHP 5.2.x following the following instructions:&lt;br /&gt;
&lt;br /&gt;
1. Download the appropriate copy of php_dblib.dll from the list below, and save it into your /PHP/ext directory.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; align=&amp;quot;center&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! PHP version !! [http://www.iis-aid.com/articles/my_word/difference_between_php_thread_safe_and_non_thread_safe_binaries Thread Safe]  !! FreeTDS version !! Download URL&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | PHP 5.2.x (vc6) || Yes || 0.82 + 20090302 patches || [http://download.moodle.org/download.php/dblib/php52/DBLIB_TS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| No || 0.82 + 20090302 patches || [http://download.moodle.org/download.php/dblib/php52/DBLIB_NOTS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | PHP 5.3.x (vc9) || Yes || 0.82 + 20090904 patches || [http://download.moodle.org/download.php/dblib/php53_vc9/DBLIB_TS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| No || 0.82 + 20090904 patches || [http://download.moodle.org/download.php/dblib/php53_vc9/DBLIB_NOTS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | PHP 5.4.x (vc9) || Yes || 0.82 + 20110906 patches || [http://download.moodle.org/download.php/dblib/php54_vc9/DBLIB_TS.zip Download!] Mirrors: [http://inethub.olvi.net.ua/ftp/pub/soft/programming/php/ms%20sql%20driver%20for%20%20php%205.4.10/dblib_ts.zip 1] [ftp://inethub.olvi.net.ua/pub/soft/programming/php/ms%20sql%20driver%20for%20%20php%205.4.10/DBLIB_TS.zip 2 (ftp)] [http://www.sendspace.com/file/vtger3 3]&lt;br /&gt;
|-&lt;br /&gt;
| No || 0.82 + 20110906 patches || [http://download.moodle.org/download.php/dblib/php54_vc9/DBLIB_TS.zip Download!] Mirrors: [http://inethub.olvi.net.ua/ftp/pub/soft/programming/php/ms%20sql%20driver%20for%20%20php%205.4.10/dblib_nts.zip 1] [ftp://inethub.olvi.net.ua/pub/soft/programming/php/ms%20sql%20driver%20for%20%20php%205.4.10/DBLIB_NTS.zip 2 (ftp)] [http://www.sendspace.com/file/nkg2j4 3]&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | PHP 5.5.x (vc11) || Yes || 0.91.89 || [https://moodle.org/pluginfile.php/133/mod_forum/attachment/1012945/FreeTDS_0.91.89_PHP_5.5.x_%28vc11_ts_dblib%29.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| No || 0.91.89 || [https://moodle.org/pluginfile.php/133/mod_forum/attachment/1012945/FreeTDS_0.91.89_PHP_5.5.x_%28vc11_nts_dblib%29.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |  Thanks to [http://remote-learner.net/ Remote-Learner]] (Moodle [http://moodle.com/partners/ Partner]) and specially to Bryan Williams, donating one Visual C++ 6.0 Pro license to Moodle. Thanks to Trevor Johnson and his builds of the dblib extensions. Thanks to Daniele, Doug, Luis, Sean and many others by their collaboration in MDL-14725. Thanks to Frediano Ziglio and James K. Lowden from [http://freetds.org freetds.org] by their support. Thanks to [[User:Alastair Hole|Alastair Hole]] for providing the PHP 5.3 builds of the libraries. Thanks to Enyby by providing the PHP 5.4 builds of the libraries. Thanks to David Aylmer for providing the PHP 5.5 builds of the libraries. Thanks!&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
(alternatively here you can find some [[Development:Compiling FreeTDS under Windows|instructions to build those freetds extensions under win32]] yourself)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. FreeTDS requires the .NET Framework v1.1 to be installed.  You can [http://www.microsoft.com/downloads/details.aspx?FamilyID=262d25e3-f589-4842-8157-034d1e7cf3a3&amp;amp;DisplayLang=en download it from the Microsoft website] along with its [http://www.microsoft.com/downloads/details.aspx?FamilyID=a8f5654f-088e-40b2-bbdb-a83353618b38&amp;amp;DisplayLang=en service pack].  Alternatively, if you do not wish to install this framework, you can [http://kromann.info/ms-libs/msvcr71.dll download the required DLL] from Frank&#039;s site, and save it into your /PHP root directory.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. Edit your /PHP/php.ini file and add this line:&lt;br /&gt;
&lt;br /&gt;
  extension=php_dblib.dll &lt;br /&gt;
&lt;br /&gt;
Make sure that any lines referring to the php_mssql.dll extension are DISABLED (commented out).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. When the PHP engine loads the FreeTDS extension it needs to be passed certain infiormation in order to be able to connect to your Moodle database. To retrieve this information FreeTDS looks for a file called &#039;&#039;&#039;freetds.conf&#039;&#039;&#039; in the root folder of the server that PHP installed on (e.g. C:\).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;freetds.conf&#039;&#039;&#039; should have the following structure:&lt;br /&gt;
&lt;br /&gt;
  [global]&lt;br /&gt;
      host = xxx.xxx.xxx.xxx (host name or ip of the MSSQL server)&lt;br /&gt;
      port = 1433&lt;br /&gt;
      client charset = UTF-8&lt;br /&gt;
      tds version = 8.0&lt;br /&gt;
      text size = 20971520&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want to connect to a particular [http://msdn.microsoft.com/en-us/library/aa174516(SQL.80).aspx instance] of MSSQL you should specify the instance name:&lt;br /&gt;
&lt;br /&gt;
  [global]&lt;br /&gt;
      host = xxx.xxx.xxx.xxx (host name or ip of the MSSQL server)&lt;br /&gt;
      instance = xxx (instance name, e.g. INST2)&lt;br /&gt;
      port = 1433&lt;br /&gt;
      client charset = UTF-8&lt;br /&gt;
      tds version = 8.0&lt;br /&gt;
      text size = 20971520&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
*You can configure FreeTDS to look for the freetds.conf file in any directory that you want - you don&#039;t have to use C:\. To do this create a SYSTEM environment variable called &#039;&#039;&#039;FREETDS&#039;&#039;&#039; and point it to the directory where you have installed the freetds.conf file. If you do not set this environment variable FreeTDS will look for the freetds.conf file in the C:\ folder, which is the default. One possible benefit of setting the FREETDS environment variable and using a different installation directory for freetds.conf is that C:\ is very predictable to a hacker that knows anything about FreeTDS and that is the first place that he would look if he wanted to compromise your system. So, using a different installation directory would just make your system stronger. See the FreeTDS [http://www.freetds.org/userguide/envvar.htm Setting the environment variables] documentation for more information about this FREETDS environment variable.&lt;br /&gt;
&lt;br /&gt;
*Alternatively, you can [[Development:Compiling FreeTDS under Windows|recompile]] the FreeTDS extension yourself and change the default location to your preferred location at compile time. Then it is not necessary to create any environment variable. You must just ensure that freetds.conf is in the same folder that you specify when you compile php_dblib.dll.&lt;br /&gt;
&lt;br /&gt;
*MSSQL is usually installed with port 1433 as the default. However, if the port was changed on your server when you installed MSSQL then you need to specify the correct port number.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5. Your Moodle &#039;&#039;&#039;config.php&#039;&#039;&#039; should include lines like these:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
$CFG-&amp;gt;dbtype    = &#039;mssql&#039;;        // Required&lt;br /&gt;
$CFG-&amp;gt;dbhost    = &#039;localhost&#039;;      // assuming MS SQL is on the same server, otherwise use an IP&lt;br /&gt;
$CFG-&amp;gt;dbname    = &#039;moodle&#039;;         // or whatever you called the database you created&lt;br /&gt;
$CFG-&amp;gt;dbuser    = &#039;yourusername&#039;;   // I usually use the &#039;sa&#039; account (dbowner perms are enough)&lt;br /&gt;
$CFG-&amp;gt;dbpass    = &#039;yourpassword&#039;;&lt;br /&gt;
$CFG-&amp;gt;dbpersist =  false;&lt;br /&gt;
$CFG-&amp;gt;prefix    = &#039;mdl_&#039;;            //Prefix, you can change it, but NEVER leave it blank.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t have a config.php file yet, it can be generated as normal from the Moodle installer. Alternatively you can use the config-dist.php file that comes with the Moodle package to create your own config.php file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6. Restart or start your web server.  If Moodle still cannot communicate with the database server, please turn display_startup_errors to &amp;quot;On&amp;quot; in your /PHP/php.ini file, then restart the web server and check for any errors that may indicate incorrect DLL versions or missing dependencies.  These error reports, turned off by default in PHP, can be vital in locating a problem with new extension installations.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
7. Database conection test, try this PHP script, just put in a text file called test.php change (&#039;localhost&#039;, &#039;db_user&#039;, &#039;db_password&#039;) to suite your setup, and load from local host (http://localhost/test.php)...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
	$link = mssql_connect(&#039;localhost&#039;, &#039;db_user&#039;, &#039;db_password&#039;);&lt;br /&gt;
	if(!$link) {&lt;br /&gt;
		echo&#039;Could not connect&#039;;&lt;br /&gt;
		die(&#039;Could not connect: &#039; . mssql_error());&lt;br /&gt;
	}&lt;br /&gt;
	echo&#039;Successful connection&#039;;&lt;br /&gt;
	mssql_close($link);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
8. Install Moodle as usual.  Good luck!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Troubleshooting ===&lt;br /&gt;
If you encounter some problems you can try:&lt;br /&gt;
*check that you have DotNet framework 1.1 installed (later version are installed on Vista, but you could need this specific one)&amp;lt;br /&amp;gt;&lt;br /&gt;
*enable TCP/IP for MSSQL: SQL Server 2005 Network Configuration -&amp;gt; Protocols for MSSQLSERVER -&amp;gt; TCP/IP (Enable) -&amp;gt; Properties -&amp;gt; Ip Addresses -&amp;gt; 127.0.0.1 (Active+Enable)&amp;lt;br /&amp;gt;&lt;br /&gt;
*make sure the SQL Server Browser service is running SQL Server 2005 Network Configuration -&amp;gt; SQL Server Services&amp;lt;br /&amp;gt;&lt;br /&gt;
*if you are using SQL Server 2005 and you have the error &#039;&#039;4004: Unicode data in a Unicode-only collation or ntext data cannot be sent to clients using DB-Library (such as ISQL) or ODBC version 3.7 or earlier&#039;&#039;, try the ODBTP method (next chapter). The SQL Server complaining that it doesn&#039;t support pure Unicode via TDS or older versions of ODBC. Microsoft has deprecated DB-Library a long ago, in favor of ODBC, OLE DB, or SQL Native Client. Many new features of SQL 2005 aren&#039;t accessible via DB-Library so if you need them, you could have to switch away from tools based on TDS and DB-Library :(&lt;br /&gt;
&lt;br /&gt;
== FreeTDS on Linux (on Ubuntu by compiling an mssql.so extension) ==&lt;br /&gt;
This is a good read to [http://www.robert-gonzalez.com/2009/02/18/building-the-php-ms-sql-server-extension-from-source-on-ubuntu-810/ building a FreeTDS based mssql extension for apache on Ubuntu]. Do note that [http://www.freetds.org/news.html freeTDS] 0.91 was recently released, you can find latest versions [http://freetds.sourceforge.net/ here]. &lt;br /&gt;
&lt;br /&gt;
Note: the freetds.conf file you use should have &amp;quot;text size = 20971520&amp;quot; as mentioned in the FreeTDS on Windows section otherwise you might see sessions logging out or worse apache segmentation faults. Also see [[FreeTDS]].&lt;br /&gt;
&lt;br /&gt;
Note2: Please note that updating php tends to remove the freetds configurations. You might need to reconfigure freetds after an upgrade&lt;br /&gt;
&lt;br /&gt;
== Using FreeTDS on Debian Lenny ==&lt;br /&gt;
I found the following solution using:&lt;br /&gt;
* PHP Version 5.2.6-1+lenny9&lt;br /&gt;
* Microsoft SQL Server Enterprise Edition, version: 9.00.4053.00&lt;br /&gt;
&amp;lt;pre&amp;gt;apt-get install libsybdb5 freetds-common php5-sybase&lt;br /&gt;
/etc/init.d/apache2 restart&amp;lt;/pre&amp;gt;&lt;br /&gt;
At the end of the process, if all goes fine, you will find in the mssql section of phpinfo();&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;nicetable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! MSSQL Support&lt;br /&gt;
! enabled&lt;br /&gt;
|-&lt;br /&gt;
| Library version &lt;br /&gt;
| FreeTDS &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Once FreeTDS is correctly installed, don not forget to set it up following explanations in https://docs.moodle.org/en/FreeTDS&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Errors FAQ]]&lt;br /&gt;
* Using Moodle [http://moodle.org/mod/forum/view.php?id=28 Installation problems forum]&lt;br /&gt;
&lt;br /&gt;
[[Category:XMLDB]]&lt;br /&gt;
[[Category:DB]]&lt;br /&gt;
[[Category:SQL databases]]&lt;/div&gt;</summary>
		<author><name>Stronk7</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/2x/pl/index.php?title=Installing_MSSQL_for_PHP&amp;diff=108370</id>
		<title>Installing MSSQL for PHP</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/2x/pl/index.php?title=Installing_MSSQL_for_PHP&amp;diff=108370"/>
		<updated>2013-12-13T18:20:14Z</updated>

		<summary type="html">&lt;p&gt;Stronk7: Adding links to download.moodle.org php4_vc9&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Installing Moodle}}== Introduction ==&lt;br /&gt;
&lt;br /&gt;
This short manual is suitable if you are trying to run Moodle using the SQL*Server (MSSQL) RDBMS. Steps detailed below must be performed &#039;&#039;&#039;before&#039;&#039;&#039; installing Moodle itself.&lt;br /&gt;
&lt;br /&gt;
Some of this may also apply if you wish to access an MSSQL server for external db authentication/enrollment. &lt;br /&gt;
&lt;br /&gt;
First of all, minimum required version of MSSQL has been stabilised to MSSQL 2005 (v.9).&lt;br /&gt;
&lt;br /&gt;
While PHP comes with one, more or less, standard extension (mssql) that provides access to MSSQL databases, early we found some hard limits on it. Basically such default extension has some limits that prevent us to use it at all (you can find more info about these problems [[Development:XMLDB problems#MSSQL, PHP, UTF-8 and UCS-2|here]]).&lt;br /&gt;
&lt;br /&gt;
So, in order to allow PHP (i.e. Moodle) to access to MSSQL DBs properly we have to install a &#039;&#039;&#039;mssql extension alternative&#039;&#039;&#039; to save us from the problems related above. See the sections below for details about the various options.&lt;br /&gt;
&lt;br /&gt;
== Installation overview ==&lt;br /&gt;
&lt;br /&gt;
1. Get MSSQL Server installed and running. ([http://www.microsoft.com/sql/editions/express/default.mspx A free limited version, SQL Server Express Edition] is available for testing.)&lt;br /&gt;
:Make sure that you choose mixed authentication (Windows and local accounts) to keep things simpler later.  You&#039;ll be asked to define the  &amp;quot;sa&amp;quot; account password (it&#039;s the default System Administrator account which has full access to all databases by default).&lt;br /&gt;
&lt;br /&gt;
2. Make sure MS SQL Server can accept incoming TCP/IP connections on port 1433 (the standard one).&lt;br /&gt;
:You might need to explicitly allow this in your Windows firewall (see the Control Panel).  You may also need to edit options in the :&#039;&#039;&#039;SQL Server Configuration Manager&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Network Configuration&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Protocols&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;TCP/IP enabled&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
3. Open the &amp;quot;SQL Server Management Studio&amp;quot; and create a new empty database.  If you are using the &amp;quot;sa&amp;quot; account then you don&#039;t need to do anything else here.&lt;br /&gt;
&lt;br /&gt;
4. Configure these settings in your created (and still empty) database:&lt;br /&gt;
Configure these settings in your created (and still empty) database:&lt;br /&gt;
:*Use a case sensitive collation, such as Latin1_General_CS_AS.&lt;br /&gt;
:*ANSI NULLS Enabled = True (ALTER DATABASE xxxx SET ANSI_NULLS ON)&lt;br /&gt;
:*Quoted Identifiers Enabled = True (ALTER DATABASE xxxx SET QUOTED_IDENTIFIER ON)&lt;br /&gt;
:*Is Read Committed transaction ON = True (ALTER DATABASE xxxx SET READ_COMMITTED_SNAPSHOT ON)&lt;br /&gt;
:** In older versions this is not settable via the DB properties. To set READ_COMMITTED_SNAPSHOT, there must be no active connections to the database except for the connection executing the ALTER command. If you are viewing the DB in the Server Management Studio, disconnect from any servers in the &amp;quot;Object Explorer&amp;quot; (right-click &amp;gt; Disconnect), then create a &amp;quot;New Query&amp;quot; and run the ALTER command. See http://msdn.microsoft.com/en-us/library/bb522682.aspx for details.&lt;br /&gt;
:** If your DB name starts with a number, you may need to put quotes around the DB name in the query.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5. Get PHP installed with a web server.   Unless you want to do it under IIS or some other way, the packages on the [http://download.moodle.org Moodle download page] are a good solution.&lt;br /&gt;
&lt;br /&gt;
6. Choose one of the following specific sections for your server to install the &#039;&#039;&#039;mssql extension alternative&#039;&#039;&#039; installed and running properly on your PHP box.&lt;br /&gt;
&lt;br /&gt;
7. Set the following settings in your php.ini file&lt;br /&gt;
:* mssql.textlimit = 20971520&lt;br /&gt;
:* mssql.textsize = 20971520&lt;br /&gt;
&lt;br /&gt;
8. With all this properly configured, you can continue with a [[Installing Moodle|standard Moodle installation]].&lt;br /&gt;
&lt;br /&gt;
== Microsoft Drivers for SQL Server for PHP ==&lt;br /&gt;
&lt;br /&gt;
In July 2008 Microsoft [http://social.msdn.microsoft.com/forums/en-US/sqldriverforphp/thread/a10e5202-9e41-4ff8-a33e-fbcc7b951be2/ released] a new SQL Server Driver for PHP. This is a PHP extension that allows PHP scripts to read and write data on Microsoft SQL Server databases and it overcomes the problems with the native SQL Server extension that was previously bundled with PHP.&lt;br /&gt;
&lt;br /&gt;
When using [[IIS]] it is strongly recommended to use the official Microsoft PHP installer from http://php.iis.net/, it should include the latest version of necessary drivers and it also simplifies future upgrades and configuration.&lt;br /&gt;
&lt;br /&gt;
For Windows servers with [[Apache]] see http://www.microsoft.com/en-us/download/details.aspx?id=20098.&lt;br /&gt;
&lt;br /&gt;
To know more about how to run Moodle with these drivers go to [[Using the Microsoft SQL Server Driver for PHP]].&lt;br /&gt;
&lt;br /&gt;
== Using FreeTDS on Windows ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&#039;&#039;&#039;Important Note 1:&#039;&#039;&#039; Due to some previous bugs it&#039;s highly recommendable to use PHP &amp;gt;= 5.2.6 and FreeTDS 0.82 + post-release patches ([http://tracker.moodle.org/browse/MDL-14725 more info]).&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If your web server is on Windows, use &#039;&#039;&#039;php_dblib.dll&#039;&#039;&#039;. Despite the name, it&#039;s FreeTDS compiled for Windows. (Go to this page for information on [https://docs.moodle.org/en/FreeTDS Using FreeTDS for Unix].) &lt;br /&gt;
&lt;br /&gt;
Originally we were using the DLLs available at [http://kromann.info/article.php?Id=11062598797760000 Frank Kromann&#039;s site], but they are outdated (using old versions of FreeTDS) and that has caused [http://tracker.moodle.org/browse/MDL-14725 some problems] in the past.&lt;br /&gt;
&lt;br /&gt;
So, right now, the recommended way to use FreeTDS under Windows is to use PHP 5.2.x following the following instructions:&lt;br /&gt;
&lt;br /&gt;
1. Download the appropriate copy of php_dblib.dll from the list below, and save it into your /PHP/ext directory.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; align=&amp;quot;center&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! PHP version !! [http://www.iis-aid.com/articles/my_word/difference_between_php_thread_safe_and_non_thread_safe_binaries Thread Safe]  !! FreeTDS version !! Download URL&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | PHP 5.2.x (vc6) || Yes || 0.82 + 20090302 patches || [http://download.moodle.org/download.php/dblib/php52/DBLIB_TS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| No || 0.82 + 20090302 patches || [http://download.moodle.org/download.php/dblib/php52/DBLIB_NOTS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | PHP 5.3.x (vc9) || Yes || 0.82 + 20090904 patches || [http://download.moodle.org/download.php/dblib/php53/DBLIB_TS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| No || 0.82 + 20090904 patches || [http://download.moodle.org/download.php/dblib/php53/DBLIB_NOTS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | PHP 5.4.x (vc9) || Yes || 0.82 + 20110906 patches || [http://download.moodle.org/download.php/dblib/php54_vc9/DBLIB_TS.zip Download!] Mirrors: [http://inethub.olvi.net.ua/ftp/pub/soft/programming/php/ms%20sql%20driver%20for%20%20php%205.4.10/dblib_ts.zip 1] [ftp://inethub.olvi.net.ua/pub/soft/programming/php/ms%20sql%20driver%20for%20%20php%205.4.10/DBLIB_TS.zip 2 (ftp)] [http://www.sendspace.com/file/vtger3 3]&lt;br /&gt;
|-&lt;br /&gt;
| No || 0.82 + 20110906 patches || [http://download.moodle.org/download.php/dblib/php54_vc9/DBLIB_TS.zip Download!] Mirrors: [http://inethub.olvi.net.ua/ftp/pub/soft/programming/php/ms%20sql%20driver%20for%20%20php%205.4.10/dblib_nts.zip 1] [ftp://inethub.olvi.net.ua/pub/soft/programming/php/ms%20sql%20driver%20for%20%20php%205.4.10/DBLIB_NTS.zip 2 (ftp)] [http://www.sendspace.com/file/nkg2j4 3]&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | PHP 5.5.x (vc11) || Yes || 0.91.89 || [https://moodle.org/pluginfile.php/133/mod_forum/attachment/1012945/FreeTDS_0.91.89_PHP_5.5.x_%28vc11_ts_dblib%29.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| No || 0.91.89 || [https://moodle.org/pluginfile.php/133/mod_forum/attachment/1012945/FreeTDS_0.91.89_PHP_5.5.x_%28vc11_nts_dblib%29.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |  Thanks to [http://remote-learner.net/ Remote-Learner]] (Moodle [http://moodle.com/partners/ Partner]) and specially to Bryan Williams, donating one Visual C++ 6.0 Pro license to Moodle. Thanks to Trevor Johnson and his builds of the dblib extensions. Thanks to Daniele, Doug, Luis, Sean and many others by their collaboration in MDL-14725. Thanks to Frediano Ziglio and James K. Lowden from [http://freetds.org freetds.org] by their support. Thanks to [[User:Alastair Hole|Alastair Hole]] for providing the PHP 5.3 builds of the libraries. Thanks to Enyby by providing the PHP 5.4 builds of the libraries. Thanks to David Aylmer for providing the PHP 5.5 builds of the libraries. Thanks!&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
(alternatively here you can find some [[Development:Compiling FreeTDS under Windows|instructions to build those freetds extensions under win32]] yourself)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. FreeTDS requires the .NET Framework v1.1 to be installed.  You can [http://www.microsoft.com/downloads/details.aspx?FamilyID=262d25e3-f589-4842-8157-034d1e7cf3a3&amp;amp;DisplayLang=en download it from the Microsoft website] along with its [http://www.microsoft.com/downloads/details.aspx?FamilyID=a8f5654f-088e-40b2-bbdb-a83353618b38&amp;amp;DisplayLang=en service pack].  Alternatively, if you do not wish to install this framework, you can [http://kromann.info/ms-libs/msvcr71.dll download the required DLL] from Frank&#039;s site, and save it into your /PHP root directory.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. Edit your /PHP/php.ini file and add this line:&lt;br /&gt;
&lt;br /&gt;
  extension=php_dblib.dll &lt;br /&gt;
&lt;br /&gt;
Make sure that any lines referring to the php_mssql.dll extension are DISABLED (commented out).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. When the PHP engine loads the FreeTDS extension it needs to be passed certain infiormation in order to be able to connect to your Moodle database. To retrieve this information FreeTDS looks for a file called &#039;&#039;&#039;freetds.conf&#039;&#039;&#039; in the root folder of the server that PHP installed on (e.g. C:\).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;freetds.conf&#039;&#039;&#039; should have the following structure:&lt;br /&gt;
&lt;br /&gt;
  [global]&lt;br /&gt;
      host = xxx.xxx.xxx.xxx (host name or ip of the MSSQL server)&lt;br /&gt;
      port = 1433&lt;br /&gt;
      client charset = UTF-8&lt;br /&gt;
      tds version = 8.0&lt;br /&gt;
      text size = 20971520&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want to connect to a particular [http://msdn.microsoft.com/en-us/library/aa174516(SQL.80).aspx instance] of MSSQL you should specify the instance name:&lt;br /&gt;
&lt;br /&gt;
  [global]&lt;br /&gt;
      host = xxx.xxx.xxx.xxx (host name or ip of the MSSQL server)&lt;br /&gt;
      instance = xxx (instance name, e.g. INST2)&lt;br /&gt;
      port = 1433&lt;br /&gt;
      client charset = UTF-8&lt;br /&gt;
      tds version = 8.0&lt;br /&gt;
      text size = 20971520&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
*You can configure FreeTDS to look for the freetds.conf file in any directory that you want - you don&#039;t have to use C:\. To do this create a SYSTEM environment variable called &#039;&#039;&#039;FREETDS&#039;&#039;&#039; and point it to the directory where you have installed the freetds.conf file. If you do not set this environment variable FreeTDS will look for the freetds.conf file in the C:\ folder, which is the default. One possible benefit of setting the FREETDS environment variable and using a different installation directory for freetds.conf is that C:\ is very predictable to a hacker that knows anything about FreeTDS and that is the first place that he would look if he wanted to compromise your system. So, using a different installation directory would just make your system stronger. See the FreeTDS [http://www.freetds.org/userguide/envvar.htm Setting the environment variables] documentation for more information about this FREETDS environment variable.&lt;br /&gt;
&lt;br /&gt;
*Alternatively, you can [[Development:Compiling FreeTDS under Windows|recompile]] the FreeTDS extension yourself and change the default location to your preferred location at compile time. Then it is not necessary to create any environment variable. You must just ensure that freetds.conf is in the same folder that you specify when you compile php_dblib.dll.&lt;br /&gt;
&lt;br /&gt;
*MSSQL is usually installed with port 1433 as the default. However, if the port was changed on your server when you installed MSSQL then you need to specify the correct port number.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5. Your Moodle &#039;&#039;&#039;config.php&#039;&#039;&#039; should include lines like these:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
$CFG-&amp;gt;dbtype    = &#039;mssql&#039;;        // Required&lt;br /&gt;
$CFG-&amp;gt;dbhost    = &#039;localhost&#039;;      // assuming MS SQL is on the same server, otherwise use an IP&lt;br /&gt;
$CFG-&amp;gt;dbname    = &#039;moodle&#039;;         // or whatever you called the database you created&lt;br /&gt;
$CFG-&amp;gt;dbuser    = &#039;yourusername&#039;;   // I usually use the &#039;sa&#039; account (dbowner perms are enough)&lt;br /&gt;
$CFG-&amp;gt;dbpass    = &#039;yourpassword&#039;;&lt;br /&gt;
$CFG-&amp;gt;dbpersist =  false;&lt;br /&gt;
$CFG-&amp;gt;prefix    = &#039;mdl_&#039;;            //Prefix, you can change it, but NEVER leave it blank.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t have a config.php file yet, it can be generated as normal from the Moodle installer. Alternatively you can use the config-dist.php file that comes with the Moodle package to create your own config.php file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6. Restart or start your web server.  If Moodle still cannot communicate with the database server, please turn display_startup_errors to &amp;quot;On&amp;quot; in your /PHP/php.ini file, then restart the web server and check for any errors that may indicate incorrect DLL versions or missing dependencies.  These error reports, turned off by default in PHP, can be vital in locating a problem with new extension installations.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
7. Database conection test, try this PHP script, just put in a text file called test.php change (&#039;localhost&#039;, &#039;db_user&#039;, &#039;db_password&#039;) to suite your setup, and load from local host (http://localhost/test.php)...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
	$link = mssql_connect(&#039;localhost&#039;, &#039;db_user&#039;, &#039;db_password&#039;);&lt;br /&gt;
	if(!$link) {&lt;br /&gt;
		echo&#039;Could not connect&#039;;&lt;br /&gt;
		die(&#039;Could not connect: &#039; . mssql_error());&lt;br /&gt;
	}&lt;br /&gt;
	echo&#039;Successful connection&#039;;&lt;br /&gt;
	mssql_close($link);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
8. Install Moodle as usual.  Good luck!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Troubleshooting ===&lt;br /&gt;
If you encounter some problems you can try:&lt;br /&gt;
*check that you have DotNet framework 1.1 installed (later version are installed on Vista, but you could need this specific one)&amp;lt;br /&amp;gt;&lt;br /&gt;
*enable TCP/IP for MSSQL: SQL Server 2005 Network Configuration -&amp;gt; Protocols for MSSQLSERVER -&amp;gt; TCP/IP (Enable) -&amp;gt; Properties -&amp;gt; Ip Addresses -&amp;gt; 127.0.0.1 (Active+Enable)&amp;lt;br /&amp;gt;&lt;br /&gt;
*make sure the SQL Server Browser service is running SQL Server 2005 Network Configuration -&amp;gt; SQL Server Services&amp;lt;br /&amp;gt;&lt;br /&gt;
*if you are using SQL Server 2005 and you have the error &#039;&#039;4004: Unicode data in a Unicode-only collation or ntext data cannot be sent to clients using DB-Library (such as ISQL) or ODBC version 3.7 or earlier&#039;&#039;, try the ODBTP method (next chapter). The SQL Server complaining that it doesn&#039;t support pure Unicode via TDS or older versions of ODBC. Microsoft has deprecated DB-Library a long ago, in favor of ODBC, OLE DB, or SQL Native Client. Many new features of SQL 2005 aren&#039;t accessible via DB-Library so if you need them, you could have to switch away from tools based on TDS and DB-Library :(&lt;br /&gt;
&lt;br /&gt;
== FreeTDS on Linux (on Ubuntu by compiling an mssql.so extension) ==&lt;br /&gt;
This is a good read to [http://www.robert-gonzalez.com/2009/02/18/building-the-php-ms-sql-server-extension-from-source-on-ubuntu-810/ building a FreeTDS based mssql extension for apache on Ubuntu]. Do note that [http://www.freetds.org/news.html freeTDS] 0.91 was recently released, you can find latest versions [http://freetds.sourceforge.net/ here]. &lt;br /&gt;
&lt;br /&gt;
Note: the freetds.conf file you use should have &amp;quot;text size = 20971520&amp;quot; as mentioned in the FreeTDS on Windows section otherwise you might see sessions logging out or worse apache segmentation faults. Also see [[FreeTDS]].&lt;br /&gt;
&lt;br /&gt;
Note2: Please note that updating php tends to remove the freetds configurations. You might need to reconfigure freetds after an upgrade&lt;br /&gt;
&lt;br /&gt;
== Using FreeTDS on Debian Lenny ==&lt;br /&gt;
I found the following solution using:&lt;br /&gt;
* PHP Version 5.2.6-1+lenny9&lt;br /&gt;
* Microsoft SQL Server Enterprise Edition, version: 9.00.4053.00&lt;br /&gt;
&amp;lt;pre&amp;gt;apt-get install libsybdb5 freetds-common php5-sybase&lt;br /&gt;
/etc/init.d/apache2 restart&amp;lt;/pre&amp;gt;&lt;br /&gt;
At the end of the process, if all goes fine, you will find in the mssql section of phpinfo();&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;nicetable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! MSSQL Support&lt;br /&gt;
! enabled&lt;br /&gt;
|-&lt;br /&gt;
| Library version &lt;br /&gt;
| FreeTDS &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Once FreeTDS is correctly installed, don not forget to set it up following explanations in https://docs.moodle.org/en/FreeTDS&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Errors FAQ]]&lt;br /&gt;
* Using Moodle [http://moodle.org/mod/forum/view.php?id=28 Installation problems forum]&lt;br /&gt;
&lt;br /&gt;
[[Category:XMLDB]]&lt;br /&gt;
[[Category:DB]]&lt;br /&gt;
[[Category:SQL databases]]&lt;/div&gt;</summary>
		<author><name>Stronk7</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/2x/pl/index.php?title=Using_the_Microsoft_SQL_Server_Driver_for_PHP&amp;diff=108368</id>
		<title>Using the Microsoft SQL Server Driver for PHP</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/2x/pl/index.php?title=Using_the_Microsoft_SQL_Server_Driver_for_PHP&amp;diff=108368"/>
		<updated>2013-12-13T16:58:40Z</updated>

		<summary type="html">&lt;p&gt;Stronk7: /* See Also */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Installing Moodle}}&lt;br /&gt;
== Using the SQL Server Driver for PHP from Microsoft ==&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
This short manual is for running Moodle 2.0 (and upwards) using the Microsoft SQL Server (MSSQL) RDBMS. The steps detailed below must be performed &#039;&#039;&#039;before&#039;&#039;&#039; installing Moodle itself.&lt;br /&gt;
&lt;br /&gt;
First of all, the minimum required version of MSSQL has been stabilized to MSSQL 2005 (v.9).&lt;br /&gt;
&lt;br /&gt;
== Installation overview ==&lt;br /&gt;
1. Install Microsoft SQL Server including SQL Server Management Studio. ([http://www.microsoft.com/sql/editions/express/default.mspx A free version, SQL Server Express Edition] is available for testing.)&lt;br /&gt;
:Make sure to choose mixed authentication (Windows and local accounts) to keep things simpler later.  Define the &amp;quot;sa&amp;quot; account password when requested (it&#039;s the default System Administrator account which has full access to all databases by default).&lt;br /&gt;
&lt;br /&gt;
2. Configure Windows for MSSQL.&lt;br /&gt;
:By default, MSSQL listens to port 1433 for incoming TCP/IP connections and this port needs to be opened in the firewall. This is explicitly configured in the firewall installed (either Windows Firewall in the Control Panel or the configuration interface for other firewalls). If the port was changed when MSSQL was installed, then specify the correct port number to open in the firewall.&lt;br /&gt;
:Confirm the TCP/IP protocol is enabled in: &#039;&#039;&#039;SQL Server Configuration Manager&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Network Configuration&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Protocols&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;TCP/IP enabled&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
3. Create and configure a new database.&lt;br /&gt;
:Open &amp;quot;SQL Server Management Studio&amp;quot; and create a new empty database.&lt;br /&gt;
*Execute the following command to enable Row Versioning:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 USE MASTER&lt;br /&gt;
 GO&lt;br /&gt;
 ALTER DATABASE &amp;amp;lt;your-database-name&amp;amp;gt; SET READ_COMMITTED_SNAPSHOT ON&lt;br /&gt;
 GO&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Install PHP and a web server.&lt;br /&gt;
*PHP can be downloaded from [http://www.php.net/downloads.php www.php.net]&lt;br /&gt;
*If IIS is used as the web server, IIS 7.0 or later is recommended with [http://www.iis.net/download FastCGI and WinCache]. &lt;br /&gt;
&lt;br /&gt;
5. Install the SQL Server Driver for PHP.&lt;br /&gt;
:On the web server, install [http://www.microsoft.com/download/en/details.aspx?displaylang=en&amp;amp;id=20098 SQL Server Driver for PHP] including all the pre-requisites listed on the download page. Note: it is critical to install the SQL Server Native Access Client version documented on the download page of the SQL Server Driver for PHP.&lt;br /&gt;
:Configure PHP to use the appropriate SQLSRV driver. In php.ini, set the following:&lt;br /&gt;
&lt;br /&gt;
For PHP 5.2.4 (or later)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 [PHP_SQLSRV]&lt;br /&gt;
 extension=php_sqlsrv_52_nts_vc9.dll&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For PHP 5.3.2 (or later)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 [PHP_SQLSRV]&lt;br /&gt;
 extension=php_sqlsrv_53_nts_vc9.dll&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Microsoft documentation for the SQL Server Driver for PHP is available at: http://msdn.microsoft.com/en-us/library/ee229548(v=SQL.10).aspx &lt;br /&gt;
&lt;br /&gt;
6. Install and configure Moodle.&lt;br /&gt;
:Continue with the [[Installing Moodle|standard Moodle installation]].&lt;br /&gt;
&lt;br /&gt;
7. The Moodle &#039;&#039;&#039;config.php&#039;&#039;&#039; should include lines like these:&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
$CFG-&amp;gt;dbtype    = &#039;sqlsrv&#039;;         // Required&lt;br /&gt;
$CFG-&amp;gt;dbhost    = &#039;localhost&#039;;      // Assuming that MSSQL is on the same server, otherwise &lt;br /&gt;
                                    // use the actual name or IP address of your database server&lt;br /&gt;
$CFG-&amp;gt;dbname    = &#039;moodle&#039;;         // The name of the newly created Moodle database&lt;br /&gt;
$CFG-&amp;gt;dbuser    = &#039;yourusername&#039;;   // Usually the &#039;sa&#039; account (dbowner perms are enough)&lt;br /&gt;
$CFG-&amp;gt;dbpass    = &#039;yourpassword&#039;;&lt;br /&gt;
$CFG-&amp;gt;dbpersist =  true;&lt;br /&gt;
$CFG-&amp;gt;prefix    = &#039;mdl_&#039;;           // The prefix can be changed per individual preferences, &lt;br /&gt;
                                    // but NEVER leave this blank!&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:If the config.php file doesn&#039;t exist, it will be generated as normal from the Moodle installer. Alternatively, use the config-dist.php file that comes with the Moodle package to create a custom config.php file.&lt;br /&gt;
&lt;br /&gt;
8. Restart or start your web server.&lt;br /&gt;
:If Moodle still cannot communicate with the database server, turn &#039;&#039;&#039;display_startup_errors&#039;&#039;&#039; to &amp;quot;On&amp;quot; in the /PHP/php.ini file, then restart the web server and check for any errors that may indicate incorrect DLL versions or missing dependencies.  These error reports, turned off by default in PHP, can be vital in locating a problem with new extension installations.&lt;br /&gt;
&lt;br /&gt;
9. Test the database connection.&lt;br /&gt;
:Try this PHP script, just add a text file called test.php from the example below and change (&#039;localhost&#039;, &#039;db_user&#039;, &#039;db_password&#039;) to align with the config.php settings, and load from local host (http://localhost/test.php).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$link = sqlsrv_connect($this-&amp;gt;dbhost, array(&#039;UID&#039; =&amp;gt; &#039;db_user&#039;, &#039;PWD&#039; =&amp;gt; &#039;db_password&#039;));&lt;br /&gt;
if($link === FALSE) {&lt;br /&gt;
    echo &#039;Could not connect&#039;;&lt;br /&gt;
    die(&#039;Could not connect: &#039; . sqlsrv_errors(SQLSRV_ERR_ALL));&lt;br /&gt;
}&lt;br /&gt;
echo &#039;Successful connection&#039;;&lt;br /&gt;
sqlsrv_close($link);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
10. Complete the rest of the Moodle installation as usual.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* [[Errors FAQ]]&lt;br /&gt;
* [[Installing MSSQL for PHP]], about how to install Moodle on SQL*Server using the FreeTDS drivers.&lt;br /&gt;
* Using Moodle [http://moodle.org/mod/forum/view.php?id=28 Installation problems forum]&lt;br /&gt;
* Microsoft SQL Server Driver for PHP solves major Moodle performance problems. See: [http://moodle.org/mod/forum/discuss.php?d=183987 Hardware and Performance Forum]&lt;br /&gt;
&lt;br /&gt;
[[Category:XMLDB]]&lt;/div&gt;</summary>
		<author><name>Stronk7</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/2x/pl/index.php?title=Installing_MSSQL_for_PHP&amp;diff=108367</id>
		<title>Installing MSSQL for PHP</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/2x/pl/index.php?title=Installing_MSSQL_for_PHP&amp;diff=108367"/>
		<updated>2013-12-13T16:56:27Z</updated>

		<summary type="html">&lt;p&gt;Stronk7: /* Microsoft Drivers for SQL Server for PHP */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Installing Moodle}}== Introduction ==&lt;br /&gt;
&lt;br /&gt;
This short manual is suitable if you are trying to run Moodle using the SQL*Server (MSSQL) RDBMS. Steps detailed below must be performed &#039;&#039;&#039;before&#039;&#039;&#039; installing Moodle itself.&lt;br /&gt;
&lt;br /&gt;
Some of this may also apply if you wish to access an MSSQL server for external db authentication/enrollment. &lt;br /&gt;
&lt;br /&gt;
First of all, minimum required version of MSSQL has been stabilised to MSSQL 2005 (v.9).&lt;br /&gt;
&lt;br /&gt;
While PHP comes with one, more or less, standard extension (mssql) that provides access to MSSQL databases, early we found some hard limits on it. Basically such default extension has some limits that prevent us to use it at all (you can find more info about these problems [[Development:XMLDB problems#MSSQL, PHP, UTF-8 and UCS-2|here]]).&lt;br /&gt;
&lt;br /&gt;
So, in order to allow PHP (i.e. Moodle) to access to MSSQL DBs properly we have to install a &#039;&#039;&#039;mssql extension alternative&#039;&#039;&#039; to save us from the problems related above. See the sections below for details about the various options.&lt;br /&gt;
&lt;br /&gt;
== Installation overview ==&lt;br /&gt;
&lt;br /&gt;
1. Get MSSQL Server installed and running. ([http://www.microsoft.com/sql/editions/express/default.mspx A free limited version, SQL Server Express Edition] is available for testing.)&lt;br /&gt;
:Make sure that you choose mixed authentication (Windows and local accounts) to keep things simpler later.  You&#039;ll be asked to define the  &amp;quot;sa&amp;quot; account password (it&#039;s the default System Administrator account which has full access to all databases by default).&lt;br /&gt;
&lt;br /&gt;
2. Make sure MS SQL Server can accept incoming TCP/IP connections on port 1433 (the standard one).&lt;br /&gt;
:You might need to explicitly allow this in your Windows firewall (see the Control Panel).  You may also need to edit options in the :&#039;&#039;&#039;SQL Server Configuration Manager&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Network Configuration&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Protocols&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;TCP/IP enabled&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
3. Open the &amp;quot;SQL Server Management Studio&amp;quot; and create a new empty database.  If you are using the &amp;quot;sa&amp;quot; account then you don&#039;t need to do anything else here.&lt;br /&gt;
&lt;br /&gt;
4. Configure these settings in your created (and still empty) database:&lt;br /&gt;
Configure these settings in your created (and still empty) database:&lt;br /&gt;
:*Use a case sensitive collation, such as Latin1_General_CS_AS.&lt;br /&gt;
:*ANSI NULLS Enabled = True (ALTER DATABASE xxxx SET ANSI_NULLS ON)&lt;br /&gt;
:*Quoted Identifiers Enabled = True (ALTER DATABASE xxxx SET QUOTED_IDENTIFIER ON)&lt;br /&gt;
:*Is Read Committed transaction ON = True (ALTER DATABASE xxxx SET READ_COMMITTED_SNAPSHOT ON)&lt;br /&gt;
:** In older versions this is not settable via the DB properties. To set READ_COMMITTED_SNAPSHOT, there must be no active connections to the database except for the connection executing the ALTER command. If you are viewing the DB in the Server Management Studio, disconnect from any servers in the &amp;quot;Object Explorer&amp;quot; (right-click &amp;gt; Disconnect), then create a &amp;quot;New Query&amp;quot; and run the ALTER command. See http://msdn.microsoft.com/en-us/library/bb522682.aspx for details.&lt;br /&gt;
:** If your DB name starts with a number, you may need to put quotes around the DB name in the query.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5. Get PHP installed with a web server.   Unless you want to do it under IIS or some other way, the packages on the [http://download.moodle.org Moodle download page] are a good solution.&lt;br /&gt;
&lt;br /&gt;
6. Choose one of the following specific sections for your server to install the &#039;&#039;&#039;mssql extension alternative&#039;&#039;&#039; installed and running properly on your PHP box.&lt;br /&gt;
&lt;br /&gt;
7. Set the following settings in your php.ini file&lt;br /&gt;
:* mssql.textlimit = 20971520&lt;br /&gt;
:* mssql.textsize = 20971520&lt;br /&gt;
&lt;br /&gt;
8. With all this properly configured, you can continue with a [[Installing Moodle|standard Moodle installation]].&lt;br /&gt;
&lt;br /&gt;
== Microsoft Drivers for SQL Server for PHP ==&lt;br /&gt;
&lt;br /&gt;
In July 2008 Microsoft [http://social.msdn.microsoft.com/forums/en-US/sqldriverforphp/thread/a10e5202-9e41-4ff8-a33e-fbcc7b951be2/ released] a new SQL Server Driver for PHP. This is a PHP extension that allows PHP scripts to read and write data on Microsoft SQL Server databases and it overcomes the problems with the native SQL Server extension that was previously bundled with PHP.&lt;br /&gt;
&lt;br /&gt;
When using [[IIS]] it is strongly recommended to use the official Microsoft PHP installer from http://php.iis.net/, it should include the latest version of necessary drivers and it also simplifies future upgrades and configuration.&lt;br /&gt;
&lt;br /&gt;
For Windows servers with [[Apache]] see http://www.microsoft.com/en-us/download/details.aspx?id=20098.&lt;br /&gt;
&lt;br /&gt;
To know more about how to run Moodle with these drivers go to [[Using the Microsoft SQL Server Driver for PHP]].&lt;br /&gt;
&lt;br /&gt;
== Using FreeTDS on Windows ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&#039;&#039;&#039;Important Note 1:&#039;&#039;&#039; Due to some previous bugs it&#039;s highly recommendable to use PHP &amp;gt;= 5.2.6 and FreeTDS 0.82 + post-release patches ([http://tracker.moodle.org/browse/MDL-14725 more info]).&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If your web server is on Windows, use &#039;&#039;&#039;php_dblib.dll&#039;&#039;&#039;. Despite the name, it&#039;s FreeTDS compiled for Windows. (Go to this page for information on [https://docs.moodle.org/en/FreeTDS Using FreeTDS for Unix].) &lt;br /&gt;
&lt;br /&gt;
Originally we were using the DLLs available at [http://kromann.info/article.php?Id=11062598797760000 Frank Kromann&#039;s site], but they are outdated (using old versions of FreeTDS) and that has caused [http://tracker.moodle.org/browse/MDL-14725 some problems] in the past.&lt;br /&gt;
&lt;br /&gt;
So, right now, the recommended way to use FreeTDS under Windows is to use PHP 5.2.x following the following instructions:&lt;br /&gt;
&lt;br /&gt;
1. Download the appropriate copy of php_dblib.dll from the list below, and save it into your /PHP/ext directory.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; align=&amp;quot;center&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! PHP version !! [http://www.iis-aid.com/articles/my_word/difference_between_php_thread_safe_and_non_thread_safe_binaries Thread Safe]  !! FreeTDS version !! Download URL&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | PHP 5.2.x (vc6) || Yes || 0.82 + 20090302 patches || [http://download.moodle.org/download.php/dblib/php52/DBLIB_TS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| No || 0.82 + 20090302 patches || [http://download.moodle.org/download.php/dblib/php52/DBLIB_NOTS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | PHP 5.3.x (vc9) || Yes || 0.82 + 20090904 patches || [http://download.moodle.org/download.php/dblib/php53/DBLIB_TS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| No || 0.82 + 20090904 patches || [http://download.moodle.org/download.php/dblib/php53/DBLIB_NOTS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | PHP 5.4.x (vc9) || Yes || 0.82 + 20110906 patches || [http://inethub.olvi.net.ua/ftp/pub/soft/programming/php/ms%20sql%20driver%20for%20%20php%205.4.10/dblib_ts.zip Download!] [ftp://inethub.olvi.net.ua/pub/soft/programming/php/ms%20sql%20driver%20for%20%20php%205.4.10/DBLIB_TS.zip FTP Download!] [http://www.sendspace.com/file/vtger3 Mirror]&lt;br /&gt;
|-&lt;br /&gt;
| No || 0.82 + 20110906 patches || [http://inethub.olvi.net.ua/ftp/pub/soft/programming/php/ms%20sql%20driver%20for%20%20php%205.4.10/dblib_nts.zip Download!] [ftp://inethub.olvi.net.ua/pub/soft/programming/php/ms%20sql%20driver%20for%20%20php%205.4.10/DBLIB_NTS.zip FTP Download!] [http://www.sendspace.com/file/nkg2j4 Mirror]&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | PHP 5.5.x (vc11) || Yes || 0.91.89 || [https://moodle.org/pluginfile.php/133/mod_forum/attachment/1012945/FreeTDS_0.91.89_PHP_5.5.x_%28vc11_ts_dblib%29.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| No || 0.91.89 || [https://moodle.org/pluginfile.php/133/mod_forum/attachment/1012945/FreeTDS_0.91.89_PHP_5.5.x_%28vc11_nts_dblib%29.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |  Thanks to [http://remote-learner.net/ Remote-Learner]] (Moodle [http://moodle.com/partners/ Partner]) and specially to Bryan Williams, donating one Visual C++ 6.0 Pro license to Moodle. Thanks to Trevor Johnson and his builds of the dblib extensions. Thanks to Daniele, Doug, Luis, Sean and many others by their collaboration in MDL-14725. Thanks to Frediano Ziglio and James K. Lowden from [http://freetds.org freetds.org] by their support. Thanks to [[User:Alastair Hole|Alastair Hole]] for providing the PHP 5.3 builds of the libraries. Thanks to Enyby by providing the PHP 5.4 builds of the libraries. Thanks to David Aylmer for providing the PHP 5.5 builds of the libraries. Thanks!&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
(alternatively here you can find some [[Development:Compiling FreeTDS under Windows|instructions to build those freetds extensions under win32]] yourself)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. FreeTDS requires the .NET Framework v1.1 to be installed.  You can [http://www.microsoft.com/downloads/details.aspx?FamilyID=262d25e3-f589-4842-8157-034d1e7cf3a3&amp;amp;DisplayLang=en download it from the Microsoft website] along with its [http://www.microsoft.com/downloads/details.aspx?FamilyID=a8f5654f-088e-40b2-bbdb-a83353618b38&amp;amp;DisplayLang=en service pack].  Alternatively, if you do not wish to install this framework, you can [http://kromann.info/ms-libs/msvcr71.dll download the required DLL] from Frank&#039;s site, and save it into your /PHP root directory.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. Edit your /PHP/php.ini file and add this line:&lt;br /&gt;
&lt;br /&gt;
  extension=php_dblib.dll &lt;br /&gt;
&lt;br /&gt;
Make sure that any lines referring to the php_mssql.dll extension are DISABLED (commented out).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. When the PHP engine loads the FreeTDS extension it needs to be passed certain infiormation in order to be able to connect to your Moodle database. To retrieve this information FreeTDS looks for a file called &#039;&#039;&#039;freetds.conf&#039;&#039;&#039; in the root folder of the server that PHP installed on (e.g. C:\).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;freetds.conf&#039;&#039;&#039; should have the following structure:&lt;br /&gt;
&lt;br /&gt;
  [global]&lt;br /&gt;
      host = xxx.xxx.xxx.xxx (host name or ip of the MSSQL server)&lt;br /&gt;
      port = 1433&lt;br /&gt;
      client charset = UTF-8&lt;br /&gt;
      tds version = 8.0&lt;br /&gt;
      text size = 20971520&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want to connect to a particular [http://msdn.microsoft.com/en-us/library/aa174516(SQL.80).aspx instance] of MSSQL you should specify the instance name:&lt;br /&gt;
&lt;br /&gt;
  [global]&lt;br /&gt;
      host = xxx.xxx.xxx.xxx (host name or ip of the MSSQL server)&lt;br /&gt;
      instance = xxx (instance name, e.g. INST2)&lt;br /&gt;
      port = 1433&lt;br /&gt;
      client charset = UTF-8&lt;br /&gt;
      tds version = 8.0&lt;br /&gt;
      text size = 20971520&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
*You can configure FreeTDS to look for the freetds.conf file in any directory that you want - you don&#039;t have to use C:\. To do this create a SYSTEM environment variable called &#039;&#039;&#039;FREETDS&#039;&#039;&#039; and point it to the directory where you have installed the freetds.conf file. If you do not set this environment variable FreeTDS will look for the freetds.conf file in the C:\ folder, which is the default. One possible benefit of setting the FREETDS environment variable and using a different installation directory for freetds.conf is that C:\ is very predictable to a hacker that knows anything about FreeTDS and that is the first place that he would look if he wanted to compromise your system. So, using a different installation directory would just make your system stronger. See the FreeTDS [http://www.freetds.org/userguide/envvar.htm Setting the environment variables] documentation for more information about this FREETDS environment variable.&lt;br /&gt;
&lt;br /&gt;
*Alternatively, you can [[Development:Compiling FreeTDS under Windows|recompile]] the FreeTDS extension yourself and change the default location to your preferred location at compile time. Then it is not necessary to create any environment variable. You must just ensure that freetds.conf is in the same folder that you specify when you compile php_dblib.dll.&lt;br /&gt;
&lt;br /&gt;
*MSSQL is usually installed with port 1433 as the default. However, if the port was changed on your server when you installed MSSQL then you need to specify the correct port number.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5. Your Moodle &#039;&#039;&#039;config.php&#039;&#039;&#039; should include lines like these:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
$CFG-&amp;gt;dbtype    = &#039;mssql&#039;;        // Required&lt;br /&gt;
$CFG-&amp;gt;dbhost    = &#039;localhost&#039;;      // assuming MS SQL is on the same server, otherwise use an IP&lt;br /&gt;
$CFG-&amp;gt;dbname    = &#039;moodle&#039;;         // or whatever you called the database you created&lt;br /&gt;
$CFG-&amp;gt;dbuser    = &#039;yourusername&#039;;   // I usually use the &#039;sa&#039; account (dbowner perms are enough)&lt;br /&gt;
$CFG-&amp;gt;dbpass    = &#039;yourpassword&#039;;&lt;br /&gt;
$CFG-&amp;gt;dbpersist =  false;&lt;br /&gt;
$CFG-&amp;gt;prefix    = &#039;mdl_&#039;;            //Prefix, you can change it, but NEVER leave it blank.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t have a config.php file yet, it can be generated as normal from the Moodle installer. Alternatively you can use the config-dist.php file that comes with the Moodle package to create your own config.php file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6. Restart or start your web server.  If Moodle still cannot communicate with the database server, please turn display_startup_errors to &amp;quot;On&amp;quot; in your /PHP/php.ini file, then restart the web server and check for any errors that may indicate incorrect DLL versions or missing dependencies.  These error reports, turned off by default in PHP, can be vital in locating a problem with new extension installations.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
7. Database conection test, try this PHP script, just put in a text file called test.php change (&#039;localhost&#039;, &#039;db_user&#039;, &#039;db_password&#039;) to suite your setup, and load from local host (http://localhost/test.php)...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
	$link = mssql_connect(&#039;localhost&#039;, &#039;db_user&#039;, &#039;db_password&#039;);&lt;br /&gt;
	if(!$link) {&lt;br /&gt;
		echo&#039;Could not connect&#039;;&lt;br /&gt;
		die(&#039;Could not connect: &#039; . mssql_error());&lt;br /&gt;
	}&lt;br /&gt;
	echo&#039;Successful connection&#039;;&lt;br /&gt;
	mssql_close($link);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
8. Install Moodle as usual.  Good luck!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Troubleshooting ===&lt;br /&gt;
If you encounter some problems you can try:&lt;br /&gt;
*check that you have DotNet framework 1.1 installed (later version are installed on Vista, but you could need this specific one)&amp;lt;br /&amp;gt;&lt;br /&gt;
*enable TCP/IP for MSSQL: SQL Server 2005 Network Configuration -&amp;gt; Protocols for MSSQLSERVER -&amp;gt; TCP/IP (Enable) -&amp;gt; Properties -&amp;gt; Ip Addresses -&amp;gt; 127.0.0.1 (Active+Enable)&amp;lt;br /&amp;gt;&lt;br /&gt;
*make sure the SQL Server Browser service is running SQL Server 2005 Network Configuration -&amp;gt; SQL Server Services&amp;lt;br /&amp;gt;&lt;br /&gt;
*if you are using SQL Server 2005 and you have the error &#039;&#039;4004: Unicode data in a Unicode-only collation or ntext data cannot be sent to clients using DB-Library (such as ISQL) or ODBC version 3.7 or earlier&#039;&#039;, try the ODBTP method (next chapter). The SQL Server complaining that it doesn&#039;t support pure Unicode via TDS or older versions of ODBC. Microsoft has deprecated DB-Library a long ago, in favor of ODBC, OLE DB, or SQL Native Client. Many new features of SQL 2005 aren&#039;t accessible via DB-Library so if you need them, you could have to switch away from tools based on TDS and DB-Library :(&lt;br /&gt;
&lt;br /&gt;
== FreeTDS on Linux (on Ubuntu by compiling an mssql.so extension) ==&lt;br /&gt;
This is a good read to [http://www.robert-gonzalez.com/2009/02/18/building-the-php-ms-sql-server-extension-from-source-on-ubuntu-810/ building a FreeTDS based mssql extension for apache on Ubuntu]. Do note that [http://www.freetds.org/news.html freeTDS] 0.91 was recently released, you can find latest versions [http://freetds.sourceforge.net/ here]. &lt;br /&gt;
&lt;br /&gt;
Note: the freetds.conf file you use should have &amp;quot;text size = 20971520&amp;quot; as mentioned in the FreeTDS on Windows section otherwise you might see sessions logging out or worse apache segmentation faults. Also see [[FreeTDS]].&lt;br /&gt;
&lt;br /&gt;
Note2: Please note that updating php tends to remove the freetds configurations. You might need to reconfigure freetds after an upgrade&lt;br /&gt;
&lt;br /&gt;
== Using FreeTDS on Debian Lenny ==&lt;br /&gt;
I found the following solution using:&lt;br /&gt;
* PHP Version 5.2.6-1+lenny9&lt;br /&gt;
* Microsoft SQL Server Enterprise Edition, version: 9.00.4053.00&lt;br /&gt;
&amp;lt;pre&amp;gt;apt-get install libsybdb5 freetds-common php5-sybase&lt;br /&gt;
/etc/init.d/apache2 restart&amp;lt;/pre&amp;gt;&lt;br /&gt;
At the end of the process, if all goes fine, you will find in the mssql section of phpinfo();&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;nicetable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! MSSQL Support&lt;br /&gt;
! enabled&lt;br /&gt;
|-&lt;br /&gt;
| Library version &lt;br /&gt;
| FreeTDS &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Once FreeTDS is correctly installed, don not forget to set it up following explanations in https://docs.moodle.org/en/FreeTDS&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Errors FAQ]]&lt;br /&gt;
* Using Moodle [http://moodle.org/mod/forum/view.php?id=28 Installation problems forum]&lt;br /&gt;
&lt;br /&gt;
[[Category:XMLDB]]&lt;br /&gt;
[[Category:DB]]&lt;br /&gt;
[[Category:SQL databases]]&lt;/div&gt;</summary>
		<author><name>Stronk7</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/2x/pl/index.php?title=Installing_MSSQL_for_PHP&amp;diff=108366</id>
		<title>Installing MSSQL for PHP</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/2x/pl/index.php?title=Installing_MSSQL_for_PHP&amp;diff=108366"/>
		<updated>2013-12-13T16:54:51Z</updated>

		<summary type="html">&lt;p&gt;Stronk7: Moving link to sqlsrv own section so people interested on it avoids reading all the freetds stuff&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Installing Moodle}}== Introduction ==&lt;br /&gt;
&lt;br /&gt;
This short manual is suitable if you are trying to run Moodle using the SQL*Server (MSSQL) RDBMS. Steps detailed below must be performed &#039;&#039;&#039;before&#039;&#039;&#039; installing Moodle itself.&lt;br /&gt;
&lt;br /&gt;
Some of this may also apply if you wish to access an MSSQL server for external db authentication/enrollment. &lt;br /&gt;
&lt;br /&gt;
First of all, minimum required version of MSSQL has been stabilised to MSSQL 2005 (v.9).&lt;br /&gt;
&lt;br /&gt;
While PHP comes with one, more or less, standard extension (mssql) that provides access to MSSQL databases, early we found some hard limits on it. Basically such default extension has some limits that prevent us to use it at all (you can find more info about these problems [[Development:XMLDB problems#MSSQL, PHP, UTF-8 and UCS-2|here]]).&lt;br /&gt;
&lt;br /&gt;
So, in order to allow PHP (i.e. Moodle) to access to MSSQL DBs properly we have to install a &#039;&#039;&#039;mssql extension alternative&#039;&#039;&#039; to save us from the problems related above. See the sections below for details about the various options.&lt;br /&gt;
&lt;br /&gt;
== Installation overview ==&lt;br /&gt;
&lt;br /&gt;
1. Get MSSQL Server installed and running. ([http://www.microsoft.com/sql/editions/express/default.mspx A free limited version, SQL Server Express Edition] is available for testing.)&lt;br /&gt;
:Make sure that you choose mixed authentication (Windows and local accounts) to keep things simpler later.  You&#039;ll be asked to define the  &amp;quot;sa&amp;quot; account password (it&#039;s the default System Administrator account which has full access to all databases by default).&lt;br /&gt;
&lt;br /&gt;
2. Make sure MS SQL Server can accept incoming TCP/IP connections on port 1433 (the standard one).&lt;br /&gt;
:You might need to explicitly allow this in your Windows firewall (see the Control Panel).  You may also need to edit options in the :&#039;&#039;&#039;SQL Server Configuration Manager&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Network Configuration&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Protocols&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;TCP/IP enabled&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
3. Open the &amp;quot;SQL Server Management Studio&amp;quot; and create a new empty database.  If you are using the &amp;quot;sa&amp;quot; account then you don&#039;t need to do anything else here.&lt;br /&gt;
&lt;br /&gt;
4. Configure these settings in your created (and still empty) database:&lt;br /&gt;
Configure these settings in your created (and still empty) database:&lt;br /&gt;
:*Use a case sensitive collation, such as Latin1_General_CS_AS.&lt;br /&gt;
:*ANSI NULLS Enabled = True (ALTER DATABASE xxxx SET ANSI_NULLS ON)&lt;br /&gt;
:*Quoted Identifiers Enabled = True (ALTER DATABASE xxxx SET QUOTED_IDENTIFIER ON)&lt;br /&gt;
:*Is Read Committed transaction ON = True (ALTER DATABASE xxxx SET READ_COMMITTED_SNAPSHOT ON)&lt;br /&gt;
:** In older versions this is not settable via the DB properties. To set READ_COMMITTED_SNAPSHOT, there must be no active connections to the database except for the connection executing the ALTER command. If you are viewing the DB in the Server Management Studio, disconnect from any servers in the &amp;quot;Object Explorer&amp;quot; (right-click &amp;gt; Disconnect), then create a &amp;quot;New Query&amp;quot; and run the ALTER command. See http://msdn.microsoft.com/en-us/library/bb522682.aspx for details.&lt;br /&gt;
:** If your DB name starts with a number, you may need to put quotes around the DB name in the query.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5. Get PHP installed with a web server.   Unless you want to do it under IIS or some other way, the packages on the [http://download.moodle.org Moodle download page] are a good solution.&lt;br /&gt;
&lt;br /&gt;
6. Choose one of the following specific sections for your server to install the &#039;&#039;&#039;mssql extension alternative&#039;&#039;&#039; installed and running properly on your PHP box.&lt;br /&gt;
&lt;br /&gt;
7. Set the following settings in your php.ini file&lt;br /&gt;
:* mssql.textlimit = 20971520&lt;br /&gt;
:* mssql.textsize = 20971520&lt;br /&gt;
&lt;br /&gt;
8. With all this properly configured, you can continue with a [[Installing Moodle|standard Moodle installation]].&lt;br /&gt;
&lt;br /&gt;
== Microsoft Drivers for SQL Server for PHP ==&lt;br /&gt;
&lt;br /&gt;
In July 2008 Microsoft [http://social.msdn.microsoft.com/forums/en-US/sqldriverforphp/thread/a10e5202-9e41-4ff8-a33e-fbcc7b951be2/ released] a new SQL Server Driver for PHP. This is a PHP extension that allows PHP scripts to read and write data on Microsoft SQL Server databases and it overcomes the problems with the native SQL Server extension that was previously bundled with PHP.&lt;br /&gt;
&lt;br /&gt;
When using [[IIS]] it is strongly recommended to use the official Microsoft PHP installer from http://php.iis.net/, it should include the latest version of necessary drivers and it also simplifies future upgrades and configuration.&lt;br /&gt;
&lt;br /&gt;
For Windows servers with [[Apache]] see http://www.microsoft.com/en-us/download/details.aspx?id=20098.&lt;br /&gt;
&lt;br /&gt;
== Using FreeTDS on Windows ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&#039;&#039;&#039;Important Note 1:&#039;&#039;&#039; Due to some previous bugs it&#039;s highly recommendable to use PHP &amp;gt;= 5.2.6 and FreeTDS 0.82 + post-release patches ([http://tracker.moodle.org/browse/MDL-14725 more info]).&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If your web server is on Windows, use &#039;&#039;&#039;php_dblib.dll&#039;&#039;&#039;. Despite the name, it&#039;s FreeTDS compiled for Windows. (Go to this page for information on [https://docs.moodle.org/en/FreeTDS Using FreeTDS for Unix].) &lt;br /&gt;
&lt;br /&gt;
Originally we were using the DLLs available at [http://kromann.info/article.php?Id=11062598797760000 Frank Kromann&#039;s site], but they are outdated (using old versions of FreeTDS) and that has caused [http://tracker.moodle.org/browse/MDL-14725 some problems] in the past.&lt;br /&gt;
&lt;br /&gt;
So, right now, the recommended way to use FreeTDS under Windows is to use PHP 5.2.x following the following instructions:&lt;br /&gt;
&lt;br /&gt;
1. Download the appropriate copy of php_dblib.dll from the list below, and save it into your /PHP/ext directory.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; align=&amp;quot;center&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! PHP version !! [http://www.iis-aid.com/articles/my_word/difference_between_php_thread_safe_and_non_thread_safe_binaries Thread Safe]  !! FreeTDS version !! Download URL&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | PHP 5.2.x (vc6) || Yes || 0.82 + 20090302 patches || [http://download.moodle.org/download.php/dblib/php52/DBLIB_TS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| No || 0.82 + 20090302 patches || [http://download.moodle.org/download.php/dblib/php52/DBLIB_NOTS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | PHP 5.3.x (vc9) || Yes || 0.82 + 20090904 patches || [http://download.moodle.org/download.php/dblib/php53/DBLIB_TS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| No || 0.82 + 20090904 patches || [http://download.moodle.org/download.php/dblib/php53/DBLIB_NOTS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | PHP 5.4.x (vc9) || Yes || 0.82 + 20110906 patches || [http://inethub.olvi.net.ua/ftp/pub/soft/programming/php/ms%20sql%20driver%20for%20%20php%205.4.10/dblib_ts.zip Download!] [ftp://inethub.olvi.net.ua/pub/soft/programming/php/ms%20sql%20driver%20for%20%20php%205.4.10/DBLIB_TS.zip FTP Download!] [http://www.sendspace.com/file/vtger3 Mirror]&lt;br /&gt;
|-&lt;br /&gt;
| No || 0.82 + 20110906 patches || [http://inethub.olvi.net.ua/ftp/pub/soft/programming/php/ms%20sql%20driver%20for%20%20php%205.4.10/dblib_nts.zip Download!] [ftp://inethub.olvi.net.ua/pub/soft/programming/php/ms%20sql%20driver%20for%20%20php%205.4.10/DBLIB_NTS.zip FTP Download!] [http://www.sendspace.com/file/nkg2j4 Mirror]&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | PHP 5.5.x (vc11) || Yes || 0.91.89 || [https://moodle.org/pluginfile.php/133/mod_forum/attachment/1012945/FreeTDS_0.91.89_PHP_5.5.x_%28vc11_ts_dblib%29.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| No || 0.91.89 || [https://moodle.org/pluginfile.php/133/mod_forum/attachment/1012945/FreeTDS_0.91.89_PHP_5.5.x_%28vc11_nts_dblib%29.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |  Thanks to [http://remote-learner.net/ Remote-Learner]] (Moodle [http://moodle.com/partners/ Partner]) and specially to Bryan Williams, donating one Visual C++ 6.0 Pro license to Moodle. Thanks to Trevor Johnson and his builds of the dblib extensions. Thanks to Daniele, Doug, Luis, Sean and many others by their collaboration in MDL-14725. Thanks to Frediano Ziglio and James K. Lowden from [http://freetds.org freetds.org] by their support. Thanks to [[User:Alastair Hole|Alastair Hole]] for providing the PHP 5.3 builds of the libraries. Thanks to Enyby by providing the PHP 5.4 builds of the libraries. Thanks to David Aylmer for providing the PHP 5.5 builds of the libraries. Thanks!&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
(alternatively here you can find some [[Development:Compiling FreeTDS under Windows|instructions to build those freetds extensions under win32]] yourself)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. FreeTDS requires the .NET Framework v1.1 to be installed.  You can [http://www.microsoft.com/downloads/details.aspx?FamilyID=262d25e3-f589-4842-8157-034d1e7cf3a3&amp;amp;DisplayLang=en download it from the Microsoft website] along with its [http://www.microsoft.com/downloads/details.aspx?FamilyID=a8f5654f-088e-40b2-bbdb-a83353618b38&amp;amp;DisplayLang=en service pack].  Alternatively, if you do not wish to install this framework, you can [http://kromann.info/ms-libs/msvcr71.dll download the required DLL] from Frank&#039;s site, and save it into your /PHP root directory.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. Edit your /PHP/php.ini file and add this line:&lt;br /&gt;
&lt;br /&gt;
  extension=php_dblib.dll &lt;br /&gt;
&lt;br /&gt;
Make sure that any lines referring to the php_mssql.dll extension are DISABLED (commented out).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. When the PHP engine loads the FreeTDS extension it needs to be passed certain infiormation in order to be able to connect to your Moodle database. To retrieve this information FreeTDS looks for a file called &#039;&#039;&#039;freetds.conf&#039;&#039;&#039; in the root folder of the server that PHP installed on (e.g. C:\).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;freetds.conf&#039;&#039;&#039; should have the following structure:&lt;br /&gt;
&lt;br /&gt;
  [global]&lt;br /&gt;
      host = xxx.xxx.xxx.xxx (host name or ip of the MSSQL server)&lt;br /&gt;
      port = 1433&lt;br /&gt;
      client charset = UTF-8&lt;br /&gt;
      tds version = 8.0&lt;br /&gt;
      text size = 20971520&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want to connect to a particular [http://msdn.microsoft.com/en-us/library/aa174516(SQL.80).aspx instance] of MSSQL you should specify the instance name:&lt;br /&gt;
&lt;br /&gt;
  [global]&lt;br /&gt;
      host = xxx.xxx.xxx.xxx (host name or ip of the MSSQL server)&lt;br /&gt;
      instance = xxx (instance name, e.g. INST2)&lt;br /&gt;
      port = 1433&lt;br /&gt;
      client charset = UTF-8&lt;br /&gt;
      tds version = 8.0&lt;br /&gt;
      text size = 20971520&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
*You can configure FreeTDS to look for the freetds.conf file in any directory that you want - you don&#039;t have to use C:\. To do this create a SYSTEM environment variable called &#039;&#039;&#039;FREETDS&#039;&#039;&#039; and point it to the directory where you have installed the freetds.conf file. If you do not set this environment variable FreeTDS will look for the freetds.conf file in the C:\ folder, which is the default. One possible benefit of setting the FREETDS environment variable and using a different installation directory for freetds.conf is that C:\ is very predictable to a hacker that knows anything about FreeTDS and that is the first place that he would look if he wanted to compromise your system. So, using a different installation directory would just make your system stronger. See the FreeTDS [http://www.freetds.org/userguide/envvar.htm Setting the environment variables] documentation for more information about this FREETDS environment variable.&lt;br /&gt;
&lt;br /&gt;
*Alternatively, you can [[Development:Compiling FreeTDS under Windows|recompile]] the FreeTDS extension yourself and change the default location to your preferred location at compile time. Then it is not necessary to create any environment variable. You must just ensure that freetds.conf is in the same folder that you specify when you compile php_dblib.dll.&lt;br /&gt;
&lt;br /&gt;
*MSSQL is usually installed with port 1433 as the default. However, if the port was changed on your server when you installed MSSQL then you need to specify the correct port number.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5. Your Moodle &#039;&#039;&#039;config.php&#039;&#039;&#039; should include lines like these:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
$CFG-&amp;gt;dbtype    = &#039;mssql&#039;;        // Required&lt;br /&gt;
$CFG-&amp;gt;dbhost    = &#039;localhost&#039;;      // assuming MS SQL is on the same server, otherwise use an IP&lt;br /&gt;
$CFG-&amp;gt;dbname    = &#039;moodle&#039;;         // or whatever you called the database you created&lt;br /&gt;
$CFG-&amp;gt;dbuser    = &#039;yourusername&#039;;   // I usually use the &#039;sa&#039; account (dbowner perms are enough)&lt;br /&gt;
$CFG-&amp;gt;dbpass    = &#039;yourpassword&#039;;&lt;br /&gt;
$CFG-&amp;gt;dbpersist =  false;&lt;br /&gt;
$CFG-&amp;gt;prefix    = &#039;mdl_&#039;;            //Prefix, you can change it, but NEVER leave it blank.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t have a config.php file yet, it can be generated as normal from the Moodle installer. Alternatively you can use the config-dist.php file that comes with the Moodle package to create your own config.php file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6. Restart or start your web server.  If Moodle still cannot communicate with the database server, please turn display_startup_errors to &amp;quot;On&amp;quot; in your /PHP/php.ini file, then restart the web server and check for any errors that may indicate incorrect DLL versions or missing dependencies.  These error reports, turned off by default in PHP, can be vital in locating a problem with new extension installations.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
7. Database conection test, try this PHP script, just put in a text file called test.php change (&#039;localhost&#039;, &#039;db_user&#039;, &#039;db_password&#039;) to suite your setup, and load from local host (http://localhost/test.php)...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
	$link = mssql_connect(&#039;localhost&#039;, &#039;db_user&#039;, &#039;db_password&#039;);&lt;br /&gt;
	if(!$link) {&lt;br /&gt;
		echo&#039;Could not connect&#039;;&lt;br /&gt;
		die(&#039;Could not connect: &#039; . mssql_error());&lt;br /&gt;
	}&lt;br /&gt;
	echo&#039;Successful connection&#039;;&lt;br /&gt;
	mssql_close($link);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
8. Install Moodle as usual.  Good luck!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Troubleshooting ===&lt;br /&gt;
If you encounter some problems you can try:&lt;br /&gt;
*check that you have DotNet framework 1.1 installed (later version are installed on Vista, but you could need this specific one)&amp;lt;br /&amp;gt;&lt;br /&gt;
*enable TCP/IP for MSSQL: SQL Server 2005 Network Configuration -&amp;gt; Protocols for MSSQLSERVER -&amp;gt; TCP/IP (Enable) -&amp;gt; Properties -&amp;gt; Ip Addresses -&amp;gt; 127.0.0.1 (Active+Enable)&amp;lt;br /&amp;gt;&lt;br /&gt;
*make sure the SQL Server Browser service is running SQL Server 2005 Network Configuration -&amp;gt; SQL Server Services&amp;lt;br /&amp;gt;&lt;br /&gt;
*if you are using SQL Server 2005 and you have the error &#039;&#039;4004: Unicode data in a Unicode-only collation or ntext data cannot be sent to clients using DB-Library (such as ISQL) or ODBC version 3.7 or earlier&#039;&#039;, try the ODBTP method (next chapter). The SQL Server complaining that it doesn&#039;t support pure Unicode via TDS or older versions of ODBC. Microsoft has deprecated DB-Library a long ago, in favor of ODBC, OLE DB, or SQL Native Client. Many new features of SQL 2005 aren&#039;t accessible via DB-Library so if you need them, you could have to switch away from tools based on TDS and DB-Library :(&lt;br /&gt;
&lt;br /&gt;
== FreeTDS on Linux (on Ubuntu by compiling an mssql.so extension) ==&lt;br /&gt;
This is a good read to [http://www.robert-gonzalez.com/2009/02/18/building-the-php-ms-sql-server-extension-from-source-on-ubuntu-810/ building a FreeTDS based mssql extension for apache on Ubuntu]. Do note that [http://www.freetds.org/news.html freeTDS] 0.91 was recently released, you can find latest versions [http://freetds.sourceforge.net/ here]. &lt;br /&gt;
&lt;br /&gt;
Note: the freetds.conf file you use should have &amp;quot;text size = 20971520&amp;quot; as mentioned in the FreeTDS on Windows section otherwise you might see sessions logging out or worse apache segmentation faults. Also see [[FreeTDS]].&lt;br /&gt;
&lt;br /&gt;
Note2: Please note that updating php tends to remove the freetds configurations. You might need to reconfigure freetds after an upgrade&lt;br /&gt;
&lt;br /&gt;
== Using FreeTDS on Debian Lenny ==&lt;br /&gt;
I found the following solution using:&lt;br /&gt;
* PHP Version 5.2.6-1+lenny9&lt;br /&gt;
* Microsoft SQL Server Enterprise Edition, version: 9.00.4053.00&lt;br /&gt;
&amp;lt;pre&amp;gt;apt-get install libsybdb5 freetds-common php5-sybase&lt;br /&gt;
/etc/init.d/apache2 restart&amp;lt;/pre&amp;gt;&lt;br /&gt;
At the end of the process, if all goes fine, you will find in the mssql section of phpinfo();&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;nicetable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! MSSQL Support&lt;br /&gt;
! enabled&lt;br /&gt;
|-&lt;br /&gt;
| Library version &lt;br /&gt;
| FreeTDS &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Once FreeTDS is correctly installed, don not forget to set it up following explanations in https://docs.moodle.org/en/FreeTDS&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Errors FAQ]]&lt;br /&gt;
* Using Moodle [http://moodle.org/mod/forum/view.php?id=28 Installation problems forum]&lt;br /&gt;
&lt;br /&gt;
[[Category:XMLDB]]&lt;br /&gt;
[[Category:DB]]&lt;br /&gt;
[[Category:SQL databases]]&lt;/div&gt;</summary>
		<author><name>Stronk7</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/2x/pl/index.php?title=Installing_MSSQL_for_PHP&amp;diff=108365</id>
		<title>Installing MSSQL for PHP</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/2x/pl/index.php?title=Installing_MSSQL_for_PHP&amp;diff=108365"/>
		<updated>2013-12-13T16:37:55Z</updated>

		<summary type="html">&lt;p&gt;Stronk7: Undo revision 107709 by Tsala (talk) - FreeTDS for windows, the binaries and the building instructions have interest enough to keep them here. Commented @ HQ chat and with Helen.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Installing Moodle}}== Introduction ==&lt;br /&gt;
&lt;br /&gt;
This short manual is suitable if you are trying to run Moodle using the SQL*Server (MSSQL) RDBMS. Steps detailed below must be performed &#039;&#039;&#039;before&#039;&#039;&#039; installing Moodle itself.&lt;br /&gt;
&lt;br /&gt;
Some of this may also apply if you wish to access an MSSQL server for external db authentication/enrollment. &lt;br /&gt;
&lt;br /&gt;
First of all, minimum required version of MSSQL has been stabilised to MSSQL 2005 (v.9).&lt;br /&gt;
&lt;br /&gt;
While PHP comes with one, more or less, standard extension (mssql) that provides access to MSSQL databases, early we found some hard limits on it. Basically such default extension has some limits that prevent us to use it at all (you can find more info about these problems [[Development:XMLDB problems#MSSQL, PHP, UTF-8 and UCS-2|here]]).&lt;br /&gt;
&lt;br /&gt;
So, in order to allow PHP (i.e. Moodle) to access to MSSQL DBs properly we have to install a &#039;&#039;&#039;mssql extension alternative&#039;&#039;&#039; to save us from the problems related above. See the sections below for details about the various options.&lt;br /&gt;
&lt;br /&gt;
== Installation overview ==&lt;br /&gt;
&lt;br /&gt;
1. Get MSSQL Server installed and running. ([http://www.microsoft.com/sql/editions/express/default.mspx A free limited version, SQL Server Express Edition] is available for testing.)&lt;br /&gt;
:Make sure that you choose mixed authentication (Windows and local accounts) to keep things simpler later.  You&#039;ll be asked to define the  &amp;quot;sa&amp;quot; account password (it&#039;s the default System Administrator account which has full access to all databases by default).&lt;br /&gt;
&lt;br /&gt;
2. Make sure MS SQL Server can accept incoming TCP/IP connections on port 1433 (the standard one).&lt;br /&gt;
:You might need to explicitly allow this in your Windows firewall (see the Control Panel).  You may also need to edit options in the :&#039;&#039;&#039;SQL Server Configuration Manager&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Network Configuration&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Protocols&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;TCP/IP enabled&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
3. Open the &amp;quot;SQL Server Management Studio&amp;quot; and create a new empty database.  If you are using the &amp;quot;sa&amp;quot; account then you don&#039;t need to do anything else here.&lt;br /&gt;
&lt;br /&gt;
4. Configure these settings in your created (and still empty) database:&lt;br /&gt;
Configure these settings in your created (and still empty) database:&lt;br /&gt;
:*Use a case sensitive collation, such as Latin1_General_CS_AS.&lt;br /&gt;
:*ANSI NULLS Enabled = True (ALTER DATABASE xxxx SET ANSI_NULLS ON)&lt;br /&gt;
:*Quoted Identifiers Enabled = True (ALTER DATABASE xxxx SET QUOTED_IDENTIFIER ON)&lt;br /&gt;
:*Is Read Committed transaction ON = True (ALTER DATABASE xxxx SET READ_COMMITTED_SNAPSHOT ON)&lt;br /&gt;
:** In older versions this is not settable via the DB properties. To set READ_COMMITTED_SNAPSHOT, there must be no active connections to the database except for the connection executing the ALTER command. If you are viewing the DB in the Server Management Studio, disconnect from any servers in the &amp;quot;Object Explorer&amp;quot; (right-click &amp;gt; Disconnect), then create a &amp;quot;New Query&amp;quot; and run the ALTER command. See http://msdn.microsoft.com/en-us/library/bb522682.aspx for details.&lt;br /&gt;
:** If your DB name starts with a number, you may need to put quotes around the DB name in the query.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5. Get PHP installed with a web server.   Unless you want to do it under IIS or some other way, the packages on the [http://download.moodle.org Moodle download page] are a good solution.&lt;br /&gt;
&lt;br /&gt;
6. Choose one of the following specific sections for your server to install the &#039;&#039;&#039;mssql extension alternative&#039;&#039;&#039; installed and running properly on your PHP box.&lt;br /&gt;
&lt;br /&gt;
7. Set the following settings in your php.ini file&lt;br /&gt;
:* mssql.textlimit = 20971520&lt;br /&gt;
:* mssql.textsize = 20971520&lt;br /&gt;
&lt;br /&gt;
8. With all this properly configured, you can continue with a [[Installing Moodle|standard Moodle installation]].&lt;br /&gt;
&lt;br /&gt;
== Microsoft Drivers for SQL Server for PHP ==&lt;br /&gt;
&lt;br /&gt;
In July 2008 Microsoft [http://social.msdn.microsoft.com/forums/en-US/sqldriverforphp/thread/a10e5202-9e41-4ff8-a33e-fbcc7b951be2/ released] a new SQL Server Driver for PHP. This is a PHP extension that allows PHP scripts to read and write data on Microsoft SQL Server databases and it overcomes the problems with the native SQL Server extension that was previously bundled with PHP.&lt;br /&gt;
&lt;br /&gt;
When using [[IIS]] it is strongly recommended to use the official Microsoft PHP installer from http://php.iis.net/, it should include the latest version of necessary drivers and it also simplifies future upgrades and configuration.&lt;br /&gt;
&lt;br /&gt;
For Windows servers with [[Apache]] see http://www.microsoft.com/en-us/download/details.aspx?id=20098.&lt;br /&gt;
&lt;br /&gt;
== Using FreeTDS on Windows ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&#039;&#039;&#039;Important Note 1:&#039;&#039;&#039; Due to some previous bugs it&#039;s highly recommendable to use PHP &amp;gt;= 5.2.6 and FreeTDS 0.82 + post-release patches ([http://tracker.moodle.org/browse/MDL-14725 more info]).&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If your web server is on Windows, use &#039;&#039;&#039;php_dblib.dll&#039;&#039;&#039;. Despite the name, it&#039;s FreeTDS compiled for Windows. (Go to this page for information on [https://docs.moodle.org/en/FreeTDS Using FreeTDS for Unix].) &lt;br /&gt;
&lt;br /&gt;
Originally we were using the DLLs available at [http://kromann.info/article.php?Id=11062598797760000 Frank Kromann&#039;s site], but they are outdated (using old versions of FreeTDS) and that has caused [http://tracker.moodle.org/browse/MDL-14725 some problems] in the past.&lt;br /&gt;
&lt;br /&gt;
So, right now, the recommended way to use FreeTDS under Windows is to use PHP 5.2.x following the following instructions:&lt;br /&gt;
&lt;br /&gt;
1. Download the appropriate copy of php_dblib.dll from the list below, and save it into your /PHP/ext directory.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; align=&amp;quot;center&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! PHP version !! [http://www.iis-aid.com/articles/my_word/difference_between_php_thread_safe_and_non_thread_safe_binaries Thread Safe]  !! FreeTDS version !! Download URL&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | PHP 5.2.x (vc6) || Yes || 0.82 + 20090302 patches || [http://download.moodle.org/download.php/dblib/php52/DBLIB_TS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| No || 0.82 + 20090302 patches || [http://download.moodle.org/download.php/dblib/php52/DBLIB_NOTS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | PHP 5.3.x (vc9) || Yes || 0.82 + 20090904 patches || [http://download.moodle.org/download.php/dblib/php53/DBLIB_TS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| No || 0.82 + 20090904 patches || [http://download.moodle.org/download.php/dblib/php53/DBLIB_NOTS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | PHP 5.4.x (vc9) || Yes || 0.82 + 20110906 patches || [http://inethub.olvi.net.ua/ftp/pub/soft/programming/php/ms%20sql%20driver%20for%20%20php%205.4.10/dblib_ts.zip Download!] [ftp://inethub.olvi.net.ua/pub/soft/programming/php/ms%20sql%20driver%20for%20%20php%205.4.10/DBLIB_TS.zip FTP Download!] [http://www.sendspace.com/file/vtger3 Mirror]&lt;br /&gt;
|-&lt;br /&gt;
| No || 0.82 + 20110906 patches || [http://inethub.olvi.net.ua/ftp/pub/soft/programming/php/ms%20sql%20driver%20for%20%20php%205.4.10/dblib_nts.zip Download!] [ftp://inethub.olvi.net.ua/pub/soft/programming/php/ms%20sql%20driver%20for%20%20php%205.4.10/DBLIB_NTS.zip FTP Download!] [http://www.sendspace.com/file/nkg2j4 Mirror]&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | PHP 5.5.x (vc11) || Yes || 0.91.89 || [https://moodle.org/pluginfile.php/133/mod_forum/attachment/1012945/FreeTDS_0.91.89_PHP_5.5.x_%28vc11_ts_dblib%29.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| No || 0.91.89 || [https://moodle.org/pluginfile.php/133/mod_forum/attachment/1012945/FreeTDS_0.91.89_PHP_5.5.x_%28vc11_nts_dblib%29.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |  Thanks to [http://remote-learner.net/ Remote-Learner]] (Moodle [http://moodle.com/partners/ Partner]) and specially to Bryan Williams, donating one Visual C++ 6.0 Pro license to Moodle. Thanks to Trevor Johnson and his builds of the dblib extensions. Thanks to Daniele, Doug, Luis, Sean and many others by their collaboration in MDL-14725. Thanks to Frediano Ziglio and James K. Lowden from [http://freetds.org freetds.org] by their support. Thanks to [[User:Alastair Hole|Alastair Hole]] for providing the PHP 5.3 builds of the libraries. Thanks to Enyby by providing the PHP 5.4 builds of the libraries. Thanks to David Aylmer for providing the PHP 5.5 builds of the libraries. Thanks!&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
(alternatively here you can find some [[Development:Compiling FreeTDS under Windows|instructions to build those freetds extensions under win32]] yourself)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. FreeTDS requires the .NET Framework v1.1 to be installed.  You can [http://www.microsoft.com/downloads/details.aspx?FamilyID=262d25e3-f589-4842-8157-034d1e7cf3a3&amp;amp;DisplayLang=en download it from the Microsoft website] along with its [http://www.microsoft.com/downloads/details.aspx?FamilyID=a8f5654f-088e-40b2-bbdb-a83353618b38&amp;amp;DisplayLang=en service pack].  Alternatively, if you do not wish to install this framework, you can [http://kromann.info/ms-libs/msvcr71.dll download the required DLL] from Frank&#039;s site, and save it into your /PHP root directory.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. Edit your /PHP/php.ini file and add this line:&lt;br /&gt;
&lt;br /&gt;
  extension=php_dblib.dll &lt;br /&gt;
&lt;br /&gt;
Make sure that any lines referring to the php_mssql.dll extension are DISABLED (commented out).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. When the PHP engine loads the FreeTDS extension it needs to be passed certain infiormation in order to be able to connect to your Moodle database. To retrieve this information FreeTDS looks for a file called &#039;&#039;&#039;freetds.conf&#039;&#039;&#039; in the root folder of the server that PHP installed on (e.g. C:\).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;freetds.conf&#039;&#039;&#039; should have the following structure:&lt;br /&gt;
&lt;br /&gt;
  [global]&lt;br /&gt;
      host = xxx.xxx.xxx.xxx (host name or ip of the MSSQL server)&lt;br /&gt;
      port = 1433&lt;br /&gt;
      client charset = UTF-8&lt;br /&gt;
      tds version = 8.0&lt;br /&gt;
      text size = 20971520&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want to connect to a particular [http://msdn.microsoft.com/en-us/library/aa174516(SQL.80).aspx instance] of MSSQL you should specify the instance name:&lt;br /&gt;
&lt;br /&gt;
  [global]&lt;br /&gt;
      host = xxx.xxx.xxx.xxx (host name or ip of the MSSQL server)&lt;br /&gt;
      instance = xxx (instance name, e.g. INST2)&lt;br /&gt;
      port = 1433&lt;br /&gt;
      client charset = UTF-8&lt;br /&gt;
      tds version = 8.0&lt;br /&gt;
      text size = 20971520&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
*You can configure FreeTDS to look for the freetds.conf file in any directory that you want - you don&#039;t have to use C:\. To do this create a SYSTEM environment variable called &#039;&#039;&#039;FREETDS&#039;&#039;&#039; and point it to the directory where you have installed the freetds.conf file. If you do not set this environment variable FreeTDS will look for the freetds.conf file in the C:\ folder, which is the default. One possible benefit of setting the FREETDS environment variable and using a different installation directory for freetds.conf is that C:\ is very predictable to a hacker that knows anything about FreeTDS and that is the first place that he would look if he wanted to compromise your system. So, using a different installation directory would just make your system stronger. See the FreeTDS [http://www.freetds.org/userguide/envvar.htm Setting the environment variables] documentation for more information about this FREETDS environment variable.&lt;br /&gt;
&lt;br /&gt;
*Alternatively, you can [[Development:Compiling FreeTDS under Windows|recompile]] the FreeTDS extension yourself and change the default location to your preferred location at compile time. Then it is not necessary to create any environment variable. You must just ensure that freetds.conf is in the same folder that you specify when you compile php_dblib.dll.&lt;br /&gt;
&lt;br /&gt;
*MSSQL is usually installed with port 1433 as the default. However, if the port was changed on your server when you installed MSSQL then you need to specify the correct port number.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5. Your Moodle &#039;&#039;&#039;config.php&#039;&#039;&#039; should include lines like these:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
$CFG-&amp;gt;dbtype    = &#039;mssql&#039;;        // Required&lt;br /&gt;
$CFG-&amp;gt;dbhost    = &#039;localhost&#039;;      // assuming MS SQL is on the same server, otherwise use an IP&lt;br /&gt;
$CFG-&amp;gt;dbname    = &#039;moodle&#039;;         // or whatever you called the database you created&lt;br /&gt;
$CFG-&amp;gt;dbuser    = &#039;yourusername&#039;;   // I usually use the &#039;sa&#039; account (dbowner perms are enough)&lt;br /&gt;
$CFG-&amp;gt;dbpass    = &#039;yourpassword&#039;;&lt;br /&gt;
$CFG-&amp;gt;dbpersist =  false;&lt;br /&gt;
$CFG-&amp;gt;prefix    = &#039;mdl_&#039;;            //Prefix, you can change it, but NEVER leave it blank.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t have a config.php file yet, it can be generated as normal from the Moodle installer. Alternatively you can use the config-dist.php file that comes with the Moodle package to create your own config.php file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6. Restart or start your web server.  If Moodle still cannot communicate with the database server, please turn display_startup_errors to &amp;quot;On&amp;quot; in your /PHP/php.ini file, then restart the web server and check for any errors that may indicate incorrect DLL versions or missing dependencies.  These error reports, turned off by default in PHP, can be vital in locating a problem with new extension installations.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
7. Database conection test, try this PHP script, just put in a text file called test.php change (&#039;localhost&#039;, &#039;db_user&#039;, &#039;db_password&#039;) to suite your setup, and load from local host (http://localhost/test.php)...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
	$link = mssql_connect(&#039;localhost&#039;, &#039;db_user&#039;, &#039;db_password&#039;);&lt;br /&gt;
	if(!$link) {&lt;br /&gt;
		echo&#039;Could not connect&#039;;&lt;br /&gt;
		die(&#039;Could not connect: &#039; . mssql_error());&lt;br /&gt;
	}&lt;br /&gt;
	echo&#039;Successful connection&#039;;&lt;br /&gt;
	mssql_close($link);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
8. Install Moodle as usual.  Good luck!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Troubleshooting ===&lt;br /&gt;
If you encounter some problems you can try:&lt;br /&gt;
*check that you have DotNet framework 1.1 installed (later version are installed on Vista, but you could need this specific one)&amp;lt;br /&amp;gt;&lt;br /&gt;
*enable TCP/IP for MSSQL: SQL Server 2005 Network Configuration -&amp;gt; Protocols for MSSQLSERVER -&amp;gt; TCP/IP (Enable) -&amp;gt; Properties -&amp;gt; Ip Addresses -&amp;gt; 127.0.0.1 (Active+Enable)&amp;lt;br /&amp;gt;&lt;br /&gt;
*make sure the SQL Server Browser service is running SQL Server 2005 Network Configuration -&amp;gt; SQL Server Services&amp;lt;br /&amp;gt;&lt;br /&gt;
*if you are using SQL Server 2005 and you have the error &#039;&#039;4004: Unicode data in a Unicode-only collation or ntext data cannot be sent to clients using DB-Library (such as ISQL) or ODBC version 3.7 or earlier&#039;&#039;, try the ODBTP method (next chapter). The SQL Server complaining that it doesn&#039;t support pure Unicode via TDS or older versions of ODBC. Microsoft has deprecated DB-Library a long ago, in favor of ODBC, OLE DB, or SQL Native Client. Many new features of SQL 2005 aren&#039;t accessible via DB-Library so if you need them, you could have to switch away from tools based on TDS and DB-Library :(&lt;br /&gt;
&lt;br /&gt;
== FreeTDS on Linux (on Ubuntu by compiling an mssql.so extension) ==&lt;br /&gt;
This is a good read to [http://www.robert-gonzalez.com/2009/02/18/building-the-php-ms-sql-server-extension-from-source-on-ubuntu-810/ building a FreeTDS based mssql extension for apache on Ubuntu]. Do note that [http://www.freetds.org/news.html freeTDS] 0.91 was recently released, you can find latest versions [http://freetds.sourceforge.net/ here]. &lt;br /&gt;
&lt;br /&gt;
Note: the freetds.conf file you use should have &amp;quot;text size = 20971520&amp;quot; as mentioned in the FreeTDS on Windows section otherwise you might see sessions logging out or worse apache segmentation faults. Also see [[FreeTDS]].&lt;br /&gt;
&lt;br /&gt;
Note2: Please note that updating php tends to remove the freetds configurations. You might need to reconfigure freetds after an upgrade&lt;br /&gt;
&lt;br /&gt;
== Using FreeTDS on Debian Lenny ==&lt;br /&gt;
I found the following solution using:&lt;br /&gt;
* PHP Version 5.2.6-1+lenny9&lt;br /&gt;
* Microsoft SQL Server Enterprise Edition, version: 9.00.4053.00&lt;br /&gt;
&amp;lt;pre&amp;gt;apt-get install libsybdb5 freetds-common php5-sybase&lt;br /&gt;
/etc/init.d/apache2 restart&amp;lt;/pre&amp;gt;&lt;br /&gt;
At the end of the process, if all goes fine, you will find in the mssql section of phpinfo();&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;nicetable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! MSSQL Support&lt;br /&gt;
! enabled&lt;br /&gt;
|-&lt;br /&gt;
| Library version &lt;br /&gt;
| FreeTDS &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Once FreeTDS is correctly installed, don not forget to set it up following explanations in https://docs.moodle.org/en/FreeTDS&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Errors FAQ]]&lt;br /&gt;
* Using Moodle [http://moodle.org/mod/forum/view.php?id=28 Installation problems forum]&lt;br /&gt;
* [[Using the Microsoft SQL Server Driver for PHP]]&lt;br /&gt;
&lt;br /&gt;
[[Category:XMLDB]]&lt;br /&gt;
[[Category:DB]]&lt;br /&gt;
[[Category:SQL databases]]&lt;/div&gt;</summary>
		<author><name>Stronk7</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/2x/pl/index.php?title=Installing_MSSQL_for_PHP&amp;diff=106185</id>
		<title>Installing MSSQL for PHP</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/2x/pl/index.php?title=Installing_MSSQL_for_PHP&amp;diff=106185"/>
		<updated>2013-07-26T12:08:14Z</updated>

		<summary type="html">&lt;p&gt;Stronk7: Taking rid of warning caused by MDL-37734&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Installing Moodle}}== Introduction ==&lt;br /&gt;
&lt;br /&gt;
This short manual is suitable if you are trying to run Moodle using the SQL*Server (MSSQL) RDBMS. Steps detailed below must be performed &#039;&#039;&#039;before&#039;&#039;&#039; installing Moodle itself.&lt;br /&gt;
&lt;br /&gt;
Some of this may also apply if you wish to access an MSSQL server for external db authentication/enrollment. &lt;br /&gt;
&lt;br /&gt;
First of all, minimum required version of MSSQL has been stabilised to MSSQL 2005 (v.9), although it &#039;&#039;&#039;might work with MSSQL 2000 (v.8) or newer&#039;&#039;&#039;. All the development process has been performed using MSSQL 2005 and there could be some &#039;&#039;&#039;unknown problems&#039;&#039;&#039; with previous releases.&lt;br /&gt;
&lt;br /&gt;
While PHP comes with one, more or less, standard extension (mssql) that provides access to MSSQL databases, early we found some hard limits on it. Basically such default extension has some limits that prevent us to use it at all (you can find more info about these problems [[Development:XMLDB problems#MSSQL, PHP, UTF-8 and UCS-2|here]]).&lt;br /&gt;
&lt;br /&gt;
So, in order to allow PHP (i.e. Moodle) to access to MSSQL DBs properly we have to install a &#039;&#039;&#039;mssql extension alternative&#039;&#039;&#039; to save us from the problems related above. See the sections below for details about the various options.&lt;br /&gt;
&lt;br /&gt;
== Installation overview ==&lt;br /&gt;
&lt;br /&gt;
1. Get MSSQL Server installed and running. ([http://www.microsoft.com/sql/editions/express/default.mspx A free limited version, SQL Server Express Edition] is available for testing.)&lt;br /&gt;
:Make sure that you choose mixed authentication (Windows and local accounts) to keep things simpler later.  You&#039;ll be asked to define the  &amp;quot;sa&amp;quot; account password (it&#039;s the default System Administrator account which has full access to all databases by default).&lt;br /&gt;
&lt;br /&gt;
2. Make sure MS SQL Server can accept incoming TCP/IP connections on port 1433 (the standard one).&lt;br /&gt;
:You might need to explicitly allow this in your Windows firewall (see the Control Panel).  You may also need to edit options in the :&#039;&#039;&#039;SQL Server Configuration Manager&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Network Configuration&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Protocols&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;TCP/IP enabled&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
3. Open the &amp;quot;SQL Server Management Studio&amp;quot; and create a new empty database.  If you are using the &amp;quot;sa&amp;quot; account then you don&#039;t need to do anything else here.&lt;br /&gt;
&lt;br /&gt;
4. Configure these settings in your created (and still empty) database:&lt;br /&gt;
Configure these settings in your created (and still empty) database:&lt;br /&gt;
:*Use a case sensitive collation, such as Latin1_General_CS_AS.&lt;br /&gt;
:*ANSI NULLS Enabled = true (ALTER DATABASE xxxx SET ANSI_NULLS ON)&lt;br /&gt;
:*Quoted Identifiers Enabled = true (ALTER DATABASE xxxx SET QUOTED_IDENTIFIER ON)&lt;br /&gt;
:* (Moodle 2.x only) Row Versioning Enabled (ALTER DATABASE xxxx SET READ_COMMITTED_SNAPSHOT ON)&lt;br /&gt;
:** This is not settable via the DB properties. To set READ_COMMITTED_SNAPSHOT, there must be no active connections to the database except for the connection executing the ALTER command. If you are viewing the DB in the Server Management Studio, disconnect from any servers in the &amp;quot;Object Explorer&amp;quot; (right-click &amp;gt; Disconnect), then create a &amp;quot;New Query&amp;quot; and run the ALTER command. See http://msdn.microsoft.com/en-us/library/bb522682.aspx for details.&lt;br /&gt;
:** If your DB name starts with a number, you may need to put quotes around the DB name in the query.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5. Get PHP installed with a web server.   Unless you want to do it under IIS or some other way, the packages on the [http://download.moodle.org Moodle download page] are a good solution.&lt;br /&gt;
&lt;br /&gt;
6. Choose one of the following specific sections for your server to install the &#039;&#039;&#039;mssql extension alternative&#039;&#039;&#039; installed and running properly on your PHP box.&lt;br /&gt;
&lt;br /&gt;
7. Set the following settings in your php.ini file&lt;br /&gt;
:* mssql.textlimit = 20971520&lt;br /&gt;
:* mssql.textsize = 20971520&lt;br /&gt;
&lt;br /&gt;
8. With all this properly configured, you can continue with a [[Installing Moodle|standard Moodle installation]].&lt;br /&gt;
&lt;br /&gt;
== Microsoft Drivers for SQL Server for PHP ==&lt;br /&gt;
&lt;br /&gt;
In July 2008 Microsoft [http://social.msdn.microsoft.com/forums/en-US/sqldriverforphp/thread/a10e5202-9e41-4ff8-a33e-fbcc7b951be2/ released] a new SQL Server Driver for PHP. This is a PHP extension that allows PHP scripts to read and write data on Microsoft SQL Server databases and it overcomes the problems with the native SQL Server extension that was previously bundled with PHP.&lt;br /&gt;
&lt;br /&gt;
When using [[IIS]] it is strongly recommended to use the official Microsoft PHP installer from http://php.iis.net/, it should include the latest version of necessary drivers and it also simplifies future upgrades and configuration.&lt;br /&gt;
&lt;br /&gt;
For Windows servers with [[Apache]] see http://www.microsoft.com/en-us/download/details.aspx?id=20098.&lt;br /&gt;
&lt;br /&gt;
== Using FreeTDS on Windows ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&#039;&#039;&#039;Important Note 1:&#039;&#039;&#039; Due to some previous bugs it&#039;s highly recommendable to use PHP &amp;gt;= 5.2.6 and FreeTDS 0.82 + post-release patches ([http://tracker.moodle.org/browse/MDL-14725 more info]).&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If your web server is on Windows, use &#039;&#039;&#039;php_dblib.dll&#039;&#039;&#039;. Despite the name, it&#039;s FreeTDS compiled for Windows. (Go to this page for information on [https://docs.moodle.org/en/FreeTDS Using FreeTDS for Unix].) &lt;br /&gt;
&lt;br /&gt;
Originally we were using the DLLs available at [http://kromann.info/article.php?Id=11062598797760000 Frank Kromann&#039;s site], but they are outdated (using old versions of FreeTDS) and that has caused [http://tracker.moodle.org/browse/MDL-14725 some problems] in the past.&lt;br /&gt;
&lt;br /&gt;
So, right now, the recommended way to use FreeTDS under Windows is to use PHP 5.2.x following the following instructions:&lt;br /&gt;
&lt;br /&gt;
1. Download the appropriate copy of php_dblib.dll from the list below, and save it into your /PHP/ext directory.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; align=&amp;quot;center&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! PHP version !! [http://www.iis-aid.com/articles/my_word/difference_between_php_thread_safe_and_non_thread_safe_binaries Thread Safe]  !! FreeTDS version !! Download URL&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | PHP 5.2.x (vc6) || Yes || 0.82 + 20090302 patches || [http://download.moodle.org/download.php/dblib/php52/DBLIB_TS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| No || 0.82 + 20090302 patches || [http://download.moodle.org/download.php/dblib/php52/DBLIB_NOTS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | PHP 5.3.x (vc9) || Yes || 0.82 + 20090904 patches || [http://download.moodle.org/download.php/dblib/php53/DBLIB_TS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| No || 0.82 + 20090904 patches || [http://download.moodle.org/download.php/dblib/php53/DBLIB_NOTS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | PHP 5.4.x (vc9) || Yes || 0.82 + 20110906 patches || [http://inethub.olvi.net.ua/ftp/pub/soft/programming/php/ms%20sql%20driver%20for%20%20php%205.4.10/dblib_ts.zip Download!] [ftp://inethub.olvi.net.ua/pub/soft/programming/php/ms%20sql%20driver%20for%20%20php%205.4.10/DBLIB_TS.zip FTP Download!] [http://www.sendspace.com/file/vtger3 Mirror]&lt;br /&gt;
|-&lt;br /&gt;
| No || 0.82 + 20110906 patches || [http://inethub.olvi.net.ua/ftp/pub/soft/programming/php/ms%20sql%20driver%20for%20%20php%205.4.10/dblib_nts.zip Download!] [ftp://inethub.olvi.net.ua/pub/soft/programming/php/ms%20sql%20driver%20for%20%20php%205.4.10/DBLIB_NTS.zip FTP Download!] [http://www.sendspace.com/file/nkg2j4 Mirror]&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | PHP 5.5.x (vc11) || Yes || 0.91.89 || [https://moodle.org/pluginfile.php/133/mod_forum/attachment/1012945/FreeTDS_0.91.89_PHP_5.5.x_%28vc11_ts_dblib%29.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| No || 0.91.89 || [https://moodle.org/pluginfile.php/133/mod_forum/attachment/1012945/FreeTDS_0.91.89_PHP_5.5.x_%28vc11_nts_dblib%29.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |  Thanks to [http://remote-learner.net/ Remote-Learner]] (Moodle [http://moodle.com/partners/ Partner]) and specially to Bryan Williams, donating one Visual C++ 6.0 Pro license to Moodle. Thanks to Trevor Johnson and his builds of the dblib extensions. Thanks to Daniele, Doug, Luis, Sean and many others by their collaboration in MDL-14725. Thanks to Frediano Ziglio and James K. Lowden from [http://freetds.org freetds.org] by their support. Thanks to [[User:Alastair Hole|Alastair Hole]] for providing the PHP 5.3 builds of the libraries. Thanks to Enyby by providing the PHP 5.4 builds of the libraries. Thanks to David Aylmer for providing the PHP 5.5 builds of the libraries. Thanks!&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
(alternatively here you can find some [[Development:Compiling FreeTDS under Windows|instructions to build those freetds extensions under win32]] yourself)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. FreeTDS requires the .NET Framework v1.1 to be installed.  You can [http://www.microsoft.com/downloads/details.aspx?FamilyID=262d25e3-f589-4842-8157-034d1e7cf3a3&amp;amp;DisplayLang=en download it from the Microsoft website] along with its [http://www.microsoft.com/downloads/details.aspx?FamilyID=a8f5654f-088e-40b2-bbdb-a83353618b38&amp;amp;DisplayLang=en service pack].  Alternatively, if you do not wish to install this framework, you can [http://kromann.info/ms-libs/msvcr71.dll download the required DLL] from Frank&#039;s site, and save it into your /PHP root directory.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. Edit your /PHP/php.ini file and add this line:&lt;br /&gt;
&lt;br /&gt;
  extension=php_dblib.dll &lt;br /&gt;
&lt;br /&gt;
Make sure that any lines referring to the php_mssql.dll extension are DISABLED (commented out).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. When the PHP engine loads the FreeTDS extension it needs to be passed certain infiormation in order to be able to connect to your Moodle database. To retrieve this information FreeTDS looks for a file called &#039;&#039;&#039;freetds.conf&#039;&#039;&#039; in the root folder of the server that PHP installed on (e.g. C:\).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;freetds.conf&#039;&#039;&#039; should have the following structure:&lt;br /&gt;
&lt;br /&gt;
  [global]&lt;br /&gt;
      host = xxx.xxx.xxx.xxx (host name or ip of the MSSQL server)&lt;br /&gt;
      port = 1433&lt;br /&gt;
      client charset = UTF-8&lt;br /&gt;
      tds version = 8.0&lt;br /&gt;
      text size = 20971520&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want to connect to a particular [http://msdn.microsoft.com/en-us/library/aa174516(SQL.80).aspx instance] of MSSQL you should specify the instance name:&lt;br /&gt;
&lt;br /&gt;
  [global]&lt;br /&gt;
      host = xxx.xxx.xxx.xxx (host name or ip of the MSSQL server)&lt;br /&gt;
      instance = xxx (instance name, e.g. INST2)&lt;br /&gt;
      port = 1433&lt;br /&gt;
      client charset = UTF-8&lt;br /&gt;
      tds version = 8.0&lt;br /&gt;
      text size = 20971520&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
*You can configure FreeTDS to look for the freetds.conf file in any directory that you want - you don&#039;t have to use C:\. To do this create a SYSTEM environment variable called &#039;&#039;&#039;FREETDS&#039;&#039;&#039; and point it to the directory where you have installed the freetds.conf file. If you do not set this environment variable FreeTDS will look for the freetds.conf file in the C:\ folder, which is the default. One possible benefit of setting the FREETDS environment variable and using a different installation directory for freetds.conf is that C:\ is very predictable to a hacker that knows anything about FreeTDS and that is the first place that he would look if he wanted to compromise your system. So, using a different installation directory would just make your system stronger. See the FreeTDS [http://www.freetds.org/userguide/envvar.htm Setting the environment variables] documentation for more information about this FREETDS environment variable.&lt;br /&gt;
&lt;br /&gt;
*Alternatively, you can [[Development:Compiling FreeTDS under Windows|recompile]] the FreeTDS extension yourself and change the default location to your preferred location at compile time. Then it is not necessary to create any environment variable. You must just ensure that freetds.conf is in the same folder that you specify when you compile php_dblib.dll.&lt;br /&gt;
&lt;br /&gt;
*MSSQL is usually installed with port 1433 as the default. However, if the port was changed on your server when you installed MSSQL then you need to specify the correct port number.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5. Your Moodle &#039;&#039;&#039;config.php&#039;&#039;&#039; should include lines like these:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
$CFG-&amp;gt;dbtype    = &#039;mssql&#039;;        // Required&lt;br /&gt;
$CFG-&amp;gt;dbhost    = &#039;localhost&#039;;      // assuming MS SQL is on the same server, otherwise use an IP&lt;br /&gt;
$CFG-&amp;gt;dbname    = &#039;moodle&#039;;         // or whatever you called the database you created&lt;br /&gt;
$CFG-&amp;gt;dbuser    = &#039;yourusername&#039;;   // I usually use the &#039;sa&#039; account (dbowner perms are enough)&lt;br /&gt;
$CFG-&amp;gt;dbpass    = &#039;yourpassword&#039;;&lt;br /&gt;
$CFG-&amp;gt;dbpersist =  false;&lt;br /&gt;
$CFG-&amp;gt;prefix    = &#039;mdl_&#039;;            //Prefix, you can change it, but NEVER leave it blank.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t have a config.php file yet, it can be generated as normal from the Moodle installer. Alternatively you can use the config-dist.php file that comes with the Moodle package to create your own config.php file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6. Restart or start your web server.  If Moodle still cannot communicate with the database server, please turn display_startup_errors to &amp;quot;On&amp;quot; in your /PHP/php.ini file, then restart the web server and check for any errors that may indicate incorrect DLL versions or missing dependencies.  These error reports, turned off by default in PHP, can be vital in locating a problem with new extension installations.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
7. Database conection test, try this PHP script, just put in a text file called test.php change (&#039;localhost&#039;, &#039;db_user&#039;, &#039;db_password&#039;) to suite your setup, and load from local host (http://localhost/test.php)...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
	$link = mssql_connect(&#039;localhost&#039;, &#039;db_user&#039;, &#039;db_password&#039;);&lt;br /&gt;
	if(!$link) {&lt;br /&gt;
		echo&#039;Could not connect&#039;;&lt;br /&gt;
		die(&#039;Could not connect: &#039; . mssql_error());&lt;br /&gt;
	}&lt;br /&gt;
	echo&#039;Successful connection&#039;;&lt;br /&gt;
	mssql_close($link);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
8. Install Moodle as usual.  Good luck!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Troubleshooting ===&lt;br /&gt;
If you encounter some problems you can try:&lt;br /&gt;
*check that you have DotNet framework 1.1 installed (later version are installed on Vista, but you could need this specific one)&amp;lt;br /&amp;gt;&lt;br /&gt;
*enable TCP/IP for MSSQL: SQL Server 2005 Network Configuration -&amp;gt; Protocols for MSSQLSERVER -&amp;gt; TCP/IP (Enable) -&amp;gt; Properties -&amp;gt; Ip Addresses -&amp;gt; 127.0.0.1 (Active+Enable)&amp;lt;br /&amp;gt;&lt;br /&gt;
*make sure the SQL Server Browser service is running SQL Server 2005 Network Configuration -&amp;gt; SQL Server Services&amp;lt;br /&amp;gt;&lt;br /&gt;
*if you are using SQL Server 2005 and you have the error &#039;&#039;4004: Unicode data in a Unicode-only collation or ntext data cannot be sent to clients using DB-Library (such as ISQL) or ODBC version 3.7 or earlier&#039;&#039;, try the ODBTP method (next chapter). The SQL Server complaining that it doesn&#039;t support pure Unicode via TDS or older versions of ODBC. Microsoft has deprecated DB-Library a long ago, in favor of ODBC, OLE DB, or SQL Native Client. Many new features of SQL 2005 aren&#039;t accessible via DB-Library so if you need them, you could have to switch away from tools based on TDS and DB-Library :(&lt;br /&gt;
&lt;br /&gt;
== FreeTDS on Linux (on Ubuntu by compiling an mssql.so extension) ==&lt;br /&gt;
This is a good read to [http://www.robert-gonzalez.com/2009/02/18/building-the-php-ms-sql-server-extension-from-source-on-ubuntu-810/ building a FreeTDS based mssql extension for apache on Ubuntu]. Do note that [http://www.freetds.org/news.html freeTDS] 0.91 was recently released, you can find latest versions [http://freetds.sourceforge.net/ here]. &lt;br /&gt;
&lt;br /&gt;
Note: the freetds.conf file you use should have &amp;quot;text size = 20971520&amp;quot; as mentioned in the FreeTDS on Windows section otherwise you might see sessions logging out or worse apache segmentation faults. Also see [[FreeTDS]].&lt;br /&gt;
&lt;br /&gt;
== Using FreeTDS on Debian Lenny ==&lt;br /&gt;
I found the following solution using:&lt;br /&gt;
* PHP Version 5.2.6-1+lenny9&lt;br /&gt;
* Microsoft SQL Server Enterprise Edition, version: 9.00.4053.00&lt;br /&gt;
&amp;lt;pre&amp;gt;apt-get install libsybdb5 freetds-common php5-sybase&lt;br /&gt;
/etc/init.d/apache2 restart&amp;lt;/pre&amp;gt;&lt;br /&gt;
At the end of the process, if all goes fine, you will find in the mssql section of phpinfo();&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;nicetable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! MSSQL Support&lt;br /&gt;
! enabled&lt;br /&gt;
|-&lt;br /&gt;
| Library version &lt;br /&gt;
| FreeTDS &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Once FreeTDS is correctly installed, don not forget to set it up following explanations in https://docs.moodle.org/en/FreeTDS&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* FreeTDS for Windows is obsolete and too slow as of 2011. See: [http://moodle.org/mod/forum/discuss.php?d=183987 Hardware and Performance Forum]&lt;br /&gt;
* [[Errors FAQ]]&lt;br /&gt;
* Using Moodle [http://moodle.org/mod/forum/view.php?id=28 Installation problems forum]&lt;br /&gt;
* [[Installing Postgres for PHP]]&lt;br /&gt;
* [[Using the Microsoft SQL Server Driver for PHP]]&lt;br /&gt;
* [[Installing Oracle for PHP]]&lt;br /&gt;
&lt;br /&gt;
[[Category:XMLDB]]&lt;br /&gt;
[[Category:DB]]&lt;br /&gt;
[[Category:SQL databases]]&lt;/div&gt;</summary>
		<author><name>Stronk7</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/2x/pl/index.php?title=Installing_Oracle_for_PHP&amp;diff=96902</id>
		<title>Installing Oracle for PHP</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/2x/pl/index.php?title=Installing_Oracle_for_PHP&amp;diff=96902"/>
		<updated>2012-04-12T14:21:04Z</updated>

		<summary type="html">&lt;p&gt;Stronk7: clarified the statement_cache_size setting a bit, only needed for testing&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* http://www.oracle.com/technetwork/articles/technote-php-instant-084410.html&lt;br /&gt;
* http://moodle.org/mod/forum/discuss.php?d=65488#p308002 (with attached html document)&lt;br /&gt;
* http://es.php.net/oci8&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Broken versions of OCI8 driver ==&lt;br /&gt;
&lt;br /&gt;
PHP v5.2.4 (and perhaps v5.2.3 as well) have shipped with a bug in the OCI8 driver that leaks statement handles. The version of the OCI8 driver with the bug is v1.2.4. Possible workarounds:&lt;br /&gt;
&lt;br /&gt;
* Upgrade to PHP v5.2.5 or later&lt;br /&gt;
* Downgrade to PHP v5.2.1 (reported to work)&lt;br /&gt;
* Downgrade only the oci8 driver to the one included in PHP 5.2.1 (it worked for us -- iarenaza)&lt;br /&gt;
* If you are on linux and/or can compile PECL extensions, install an older OCI8 driver (v1.2.3 seems to work) from the PECL repository http://pecl.php.net/package/oci8&lt;br /&gt;
&lt;br /&gt;
More information at&lt;br /&gt;
* http://bugs.php.net/bug.php?id=42496 -- tracking the PHP OCI8 bug&lt;br /&gt;
* http://tracker.moodle.org/browse/MDL-11429 -- diagnostics on the Moodle side&lt;br /&gt;
&lt;br /&gt;
== Installing Moodle on Windows with Oracle Express Edition ==&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
This section explains how to install Moodle with Oracle Express Edition on Windows. I&#039;m using it for &#039;&#039;&#039;debugging&#039;&#039;&#039; purpose. It&#039;s definitively not a production environment. The goal is to setup easily and quickly a Moodle/Windows/Oracle environment.&lt;br /&gt;
&lt;br /&gt;
=== Install Oracle ===&lt;br /&gt;
# Download Oracle Express Edition on [http://www.oracle.com/technology/products/database/xe/index.html Oracle web site].&lt;br /&gt;
# You will also need the Instant client [http://www.oracle.com/technology/software/tech/oci/instantclient/htdocs/winsoft.html from here] (free account sign up needed). Copy everything from the unzipped folder into apache/bin.&lt;br /&gt;
# Install both.&amp;lt;br /&amp;gt;&lt;br /&gt;
# Access to the oracle console at http://127.0.0.1:8080/apex (Login=SYS Password=the_one_you_entered_during_the_installation).&lt;br /&gt;
# Create a new user and give it all rights (including DBA).&lt;br /&gt;
# Go to the SQL Commands page and grant your new user the dmbs_lock permission...&amp;lt;code sql&amp;gt;&lt;br /&gt;
grant execute on dbms_lock to XXXXX;&lt;br /&gt;
&amp;lt;/code&amp;gt;...where XXXXX is the username of your new user.&lt;br /&gt;
# Log out and log in as the new user.&lt;br /&gt;
# Run the script found in the Moodle codebase at /lib/dml/oci_native_moodle_package.sql. If you can not run this script directly, you can run its parts (separated by slashes) independently via the SQL Commands page.&lt;br /&gt;
&lt;br /&gt;
Note: Oracle Express Edition 10g is limited at one database called &#039;XE&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Set up your Oracle extension ===&lt;br /&gt;
&lt;br /&gt;
This document does not explain how to setup apache/php for Oracle. You can have more information on [http://www.oracle.com/technology/tech/php/htdocs/php-oracle-tutorial.html Oracle Documentation].&lt;br /&gt;
&lt;br /&gt;
Edit your phi.ini file, uncomment (remove the leading semicolon) the php_oci8 extension. In a WAMP setup, this is listed as...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
extension=php_oci8.dll&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also, if you are going to use the installation for development/testing purposes, uncomment the following line and set the value to zero. It&#039;s not needed for normal operations (it causes a BIG slowdown of the system!).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
oci8.statement_cache_size = 0&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may also need to uncomment php_oracle, php_pdo_oci, php_pdo_oci8 in some set-ups.&lt;br /&gt;
&lt;br /&gt;
=== Install Moodle ===&lt;br /&gt;
On the database setup page:&amp;lt;br /&amp;gt;&lt;br /&gt;
Driver: Oracle oci8 (in the config file it should read &amp;quot;oci8po&amp;quot; for a 1.9.x install and &amp;quot;oci&amp;quot; for a 2.0.x install)&amp;lt;br /&amp;gt;&lt;br /&gt;
Host: empty the field&amp;lt;br /&amp;gt;&lt;br /&gt;
Database: //localhost:1521/XE&amp;lt;br /&amp;gt;&lt;br /&gt;
User: the user that you created&amp;lt;br /&amp;gt;&lt;br /&gt;
Password: the password you gave to the user&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configure Apache ===&lt;br /&gt;
&lt;br /&gt;
If you&#039;re running Moodle on Oracle with Apache on Linux, you might have issues with PHP being able to see the system environment variables.  To resolve this, you can edit /etc/sysconfig/apache2 and add the following lines to the bottom:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
LD_LIBRARY_PATH=/opt/oracle/instantclient_11_2# Set LANG Variables for UTF-8&amp;lt;br /&amp;gt;&lt;br /&gt;
NLS_LANG=AMERICAN_AMERICA.AL32UTF8&amp;lt;br /&amp;gt;&lt;br /&gt;
LANG=en_US.UTF-8&amp;lt;br /&amp;gt;&lt;br /&gt;
LC_ALL=en_US.UTF-8&amp;lt;br /&amp;gt;&lt;br /&gt;
LC_COLLATE=en_US.UTF-8&amp;lt;br /&amp;gt;&lt;br /&gt;
LC_CTYPE=en_US.UTF-8&amp;lt;br /&amp;gt;&lt;br /&gt;
LC_MESSAGES=en_US.UTF-8&amp;lt;br /&amp;gt;&lt;br /&gt;
LC_MONETARY=en_US.UTF-8&amp;lt;br /&amp;gt;&lt;br /&gt;
LC_NUMERIC=en_US.UTF-8&amp;lt;br /&amp;gt;&lt;br /&gt;
LC_TIME=en_US.UTF-8&amp;lt;br /&amp;gt;&lt;br /&gt;
NLS_NUMERIC_CHARACTERS=&#039;.,&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
export LANG LC_ALL LC_COLLATE LC_CTYPE LC_MESSAGES LC_MONETARY LC_NUMERIC LC_TIM NLS_LANG LD_LIBRARY_PATH NLS_NUMERIC_CHARACTERS&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Also need to add those two lines to ~/.bashrc so that the PHP command-line client can see it too. &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Related links ==&lt;br /&gt;
* [http://lewiscarr.co.uk/node/4 Installing ORACLE drivers with PHP]&lt;br /&gt;
*[[Installing MSSQL for PHP]]&lt;br /&gt;
*[[PHP]]&lt;br /&gt;
*[http://moodle.org/mod/forum/discuss.php?d=134729#p588963 Can i install Moodle with Oracle database]&lt;br /&gt;
*[http://moodle.org/mod/forum/discuss.php?d=65488 Who uses Oracle]&lt;br /&gt;
*[https://docs.moodle.org/en/Step-by-step_Install_Guide_for_Solaris_10_with_Oracle_10 Step by step Install Guide for Solaris 10 with Oracle 10]&lt;br /&gt;
*[http://learningischange.com/2009/05/29/install-moodle-on-an-oracle-database-in-25-minutes-or-less/ Install Moodle on an Oracle Database (in 25 minutes or less)]. The related Using Moodle forum discussion is [http://moodle.org/mod/forum/discuss.php?d=124629 here].&lt;br /&gt;
*[http://www.mguhlin.org/2009/05/moodle-on-oracle-database.html Moodle on Oracle Database] discussion on Miguel Guhlin&#039;s blog &lt;br /&gt;
&lt;br /&gt;
[[Category:Installation]]&lt;br /&gt;
[[Category:Developer]]&lt;br /&gt;
[[Category:XMLDB]]&lt;br /&gt;
[[Category:DB]]&lt;br /&gt;
[[Category:SQL databases]]&lt;/div&gt;</summary>
		<author><name>Stronk7</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/2x/pl/index.php?title=Installing_MSSQL_for_PHP&amp;diff=94639</id>
		<title>Installing MSSQL for PHP</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/2x/pl/index.php?title=Installing_MSSQL_for_PHP&amp;diff=94639"/>
		<updated>2011-12-21T16:00:45Z</updated>

		<summary type="html">&lt;p&gt;Stronk7: /* Installation overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
This short manual is suitable if you are trying to run Moodle using the SQL*Server (MSSQL) RDBMS. Steps detailed below must be performed &#039;&#039;&#039;before&#039;&#039;&#039; installing Moodle itself.&lt;br /&gt;
&lt;br /&gt;
Some of this may also apply if you wish to access an MSSQL server for external db authentication/enrollment. &lt;br /&gt;
&lt;br /&gt;
First of all, minimum required version of MSSQL has been stabilised to MSSQL 2005 (v.9), although it &#039;&#039;&#039;might work with MSSQL 2000 (v.8) or newer&#039;&#039;&#039;. All the development process has been performed using MSSQL 2005 and there could be some &#039;&#039;&#039;unknown problems&#039;&#039;&#039; with previous releases.&lt;br /&gt;
&lt;br /&gt;
While PHP comes with one, more or less, standard extension (mssql) that provides access to MSSQL databases, early we found some hard limits on it. Basically such default extension has some limits that prevent us to use it at all (you can find more info about these problems [[Development:XMLDB problems#MSSQL, PHP, UTF-8 and UCS-2|here]]).&lt;br /&gt;
&lt;br /&gt;
So, in order to allow PHP (i.e. Moodle) to access to MSSQL DBs properly we have to install a &#039;&#039;&#039;mssql extension alternative&#039;&#039;&#039; to save us from the problems related above. See the sections below for details about the various options.&lt;br /&gt;
&lt;br /&gt;
== Installation overview ==&lt;br /&gt;
&lt;br /&gt;
1. Get MSSQL Server installed and running. ([http://www.microsoft.com/sql/editions/express/default.mspx A free limited version, SQL Server Express Edition] is available for testing.)&lt;br /&gt;
:Make sure that you choose mixed authentication (Windows and local accounts) to keep things simpler later.  You&#039;ll be asked to define the  &amp;quot;sa&amp;quot; account password (it&#039;s the default System Administrator account which has full access to all databases by default).&lt;br /&gt;
&lt;br /&gt;
2. Make sure MS SQL Server can accept incoming TCP/IP connections on port 1433 (the standard one).&lt;br /&gt;
:You might need to explicitly allow this in your Windows firewall (see the Control Panel).  You may also need to edit options in the :&#039;&#039;&#039;SQL Server Configuration Manager&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Network Configuration&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Protocols&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;TCP/IP enabled&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
3. Open the &amp;quot;SQL Server Management Studio&amp;quot; and create a new empty database.  If you are using the &amp;quot;sa&amp;quot; account then you don&#039;t need to do anything else here.&lt;br /&gt;
&lt;br /&gt;
4. Configure these settings in your created (and still empty) database:&lt;br /&gt;
&lt;br /&gt;
:* ANSI NULLS Enabled = true (ALTER DATABASE xxxx SET ANSI_NULLS ON)&lt;br /&gt;
:* Quoted Identifiers Enabled = true (ALTER DATABASE xxxx SET QUOTED_IDENTIFIER ON)&lt;br /&gt;
:* Moodle 2.x only: Row Versioning Enabled (ALTER DATABASE xxxx SET READ_COMMITTED_SNAPSHOT ON) - To set READ_COMMITTED_SNAPSHOT ON (or OFF), there must be no active connections to the database except for the connection executing the ALTER DATABASE command. See http://msdn.microsoft.com/en-us/library/bb522682.aspx&lt;br /&gt;
&lt;br /&gt;
5. Get PHP installed with a web server.   Unless you want to do it under IIS or some other way, the packages on the [http://download.moodle.org Moodle download page] are a good solution.&lt;br /&gt;
&lt;br /&gt;
6. Choose one of the following specific sections for your server to install the &#039;&#039;&#039;mssql extension alternative&#039;&#039;&#039; installed and running properly on your PHP box.&lt;br /&gt;
&lt;br /&gt;
7. Set the following settings in your php.ini file&lt;br /&gt;
:* mssql.textlimit = 20971520&lt;br /&gt;
:* mssql.textsize = 20971520&lt;br /&gt;
&lt;br /&gt;
8. With all this properly configured, you can continue with a [[Installing Moodle|standard Moodle installation]].&lt;br /&gt;
&lt;br /&gt;
== Using the SQL Server 2005 Driver for PHP from Microsoft on Windows ==&lt;br /&gt;
In July 2008 Microsoft [http://social.msdn.microsoft.com/forums/en-US/sqldriverforphp/thread/a10e5202-9e41-4ff8-a33e-fbcc7b951be2/ released] a new SQL Server 2005 Driver for PHP. This is a PHP extension that allows PHP scripts to read and write data on Microsoft SQL Server databases and it overcomes the problems with the native SQL Server extension that was previously bundled with PHP.&lt;br /&gt;
&lt;br /&gt;
This Microsoft driver is the standard database layer for running Moodle 2 under Microsoft SQL Server databases. See [[Using the Microsoft SQL Server Driver for PHP]] the installation and configuration details.&lt;br /&gt;
&lt;br /&gt;
This driver is only supported in Moodle 2.0 and up. You should use [https://docs.moodle.org/en/Installing_MSSQL_for_PHP#Using_FreeTDS_on_Windows FreeTDS] if you are installing an older version of Moodle.&lt;br /&gt;
&lt;br /&gt;
See MDL-16497 and MDL-15093 for more background information.&lt;br /&gt;
&lt;br /&gt;
== Using FreeTDS on Windows ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&#039;&#039;&#039;Important Note 1:&#039;&#039;&#039; Due to some previous bugs it&#039;s highly recommendable to use PHP &amp;gt;= 5.2.6 and FreeTDS 0.82 + post-release patches ([http://tracker.moodle.org/browse/MDL-14725 more info]).&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If your web server is on Windows, use &#039;&#039;&#039;php_dblib.dll&#039;&#039;&#039;. Despite the name, it&#039;s FreeTDS compiled for Windows. (Go to this page for information on [https://docs.moodle.org/en/FreeTDS Using FreeTDS for Unix].) &lt;br /&gt;
&lt;br /&gt;
Originally we were using the DLLs available at [http://kromann.info/article.php?Id=11062598797760000 Frank Kromann&#039;s site], but they are outdated (using old versions of FreeTDS) and that has caused [http://tracker.moodle.org/browse/MDL-14725 some problems] in the past.&lt;br /&gt;
&lt;br /&gt;
So, right now, the recommended way to use FreeTDS under Windows is to use PHP 5.2.x following the following instructions:&lt;br /&gt;
&lt;br /&gt;
1. Download the appropriate copy of php_dblib.dll from the list below, and save it into your /PHP/ext directory.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; align=&amp;quot;center&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! PHP version !! [http://www.iis-aid.com/articles/my_word/difference_between_php_thread_safe_and_non_thread_safe_binaries Thread Safe]  !! FreeTDS version !! Download URL&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | PHP 5.2.x (vc6) || Yes || 0.82 + 20090302 patches || [http://download.moodle.org/download.php/dblib/php52/DBLIB_TS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| No || 0.82 + 20090302 patches || [http://download.moodle.org/download.php/dblib/php52/DBLIB_NOTS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | PHP 5.3.x (vc9) || Yes || 0.82 + 20090904 patches || [http://download.moodle.org/download.php/dblib/php53/DBLIB_TS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| No || 0.82 + 20090904 patches || [http://download.moodle.org/download.php/dblib/php53/DBLIB_NOTS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |  Thanks to [http://remote-learner.net/ Remote-Learner]] (Moodle [http://moodle.com/partners/ Partner]) and specially to Bryan Williams, donating one Visual C++ 6.0 Pro license to Moodle. Thanks to Trevor Johnson and his builds of the dblib extensions. Thanks to Daniele, Doug, Luis, Sean and many others by their collaboration in MDL-14725. Thanks to Frediano Ziglio and James K. Lowden from [http://freetds.org freetds.org] by their support. Thanks to Alastair Hole by providing the PHP 5.3 builds of the libraries. Thanks!&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
(alternatively here you can find some [[Development:Compiling FreeTDS under Windows|instructions to build those freetds extensions under win32]] yourself)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. FreeTDS requires the .NET Framework v1.1 to be installed.  You can [http://www.microsoft.com/downloads/details.aspx?FamilyID=262d25e3-f589-4842-8157-034d1e7cf3a3&amp;amp;DisplayLang=en download it from the Microsoft website] along with its [http://www.microsoft.com/downloads/details.aspx?FamilyID=a8f5654f-088e-40b2-bbdb-a83353618b38&amp;amp;DisplayLang=en service pack].  Alternatively, if you do not wish to install this framework, you can [http://kromann.info/ms-libs/msvcr71.dll download the required DLL] from Frank&#039;s site, and save it into your /PHP root directory.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. Edit your /PHP/php.ini file and add this line:&lt;br /&gt;
&lt;br /&gt;
  extension=php_dblib.dll &lt;br /&gt;
&lt;br /&gt;
Make sure that any lines referring to the php_mssql.dll extension are DISABLED (commented out).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. When the PHP engine loads the FreeTDS extension it needs to be passed certain infiormation in order to be able to connect to your Moodle database. To retrieve this information FreeTDS looks for a file called &#039;&#039;&#039;freetds.conf&#039;&#039;&#039; in the root folder of the server that PHP installed on (e.g. C:\).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;freetds.conf&#039;&#039;&#039; should have the following structure:&lt;br /&gt;
&lt;br /&gt;
  [global]&lt;br /&gt;
      host = xxx.xxx.xxx.xxx (host name or ip of the MSSQL server)&lt;br /&gt;
      port = 1433&lt;br /&gt;
      client charset = UTF-8&lt;br /&gt;
      tds version = 8.0&lt;br /&gt;
      text size = 20971520&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want to connect to a particular [http://msdn.microsoft.com/en-us/library/aa174516(SQL.80).aspx instance] of MSSQL you should specify the instance name:&lt;br /&gt;
&lt;br /&gt;
  [global]&lt;br /&gt;
      host = xxx.xxx.xxx.xxx (host name or ip of the MSSQL server)&lt;br /&gt;
      instance = xxx (instance name, e.g. INST2)&lt;br /&gt;
      port = 1433&lt;br /&gt;
      client charset = UTF-8&lt;br /&gt;
      tds version = 8.0&lt;br /&gt;
      text size = 20971520&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
*You can configure FreeTDS to look for the freetds.conf file in any directory that you want - you don&#039;t have to use C:\. To do this create a SYSTEM environment variable called &#039;&#039;&#039;FREETDS&#039;&#039;&#039; and point it to the directory where you have installed the freetds.conf file. If you do not set this environment variable FreeTDS will look for the freetds.conf file in the C:\ folder, which is the default. One possible benefit of setting the FREETDS environment variable and using a different installation directory for freetds.conf is that C:\ is very predictable to a hacker that knows anything about FreeTDS and that is the first place that he would look if he wanted to compromise your system. So, using a different installation directory would just make your system stronger. See the FreeTDS [http://www.freetds.org/userguide/envvar.htm Setting the environment variables] documentation for more information about this FREETDS environment variable.&lt;br /&gt;
&lt;br /&gt;
*Alternatively, you can [[Development:Compiling FreeTDS under Windows|recompile]] the FreeTDS extension yourself and change the default location to your preferred location at compile time. Then it is not necessary to create any environment variable. You must just ensure that freetds.conf is in the same folder that you specify when you compile php_dblib.dll.&lt;br /&gt;
&lt;br /&gt;
*MSSQL is usually installed with port 1433 as the default. However, if the port was changed on your server when you installed MSSQL then you need to specify the correct port number.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5. Your Moodle &#039;&#039;&#039;config.php&#039;&#039;&#039; should include lines like these:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
$CFG-&amp;gt;dbtype    = &#039;mssql_n&#039;;        // Required&lt;br /&gt;
$CFG-&amp;gt;dbhost    = &#039;localhost&#039;;      // assuming MS SQL is on the same server, otherwise use an IP&lt;br /&gt;
$CFG-&amp;gt;dbname    = &#039;moodle&#039;;         // or whatever you called the database you created&lt;br /&gt;
$CFG-&amp;gt;dbuser    = &#039;yourusername&#039;;   // I usually use the &#039;sa&#039; account (dbowner perms are enough)&lt;br /&gt;
$CFG-&amp;gt;dbpass    = &#039;yourpassword&#039;;&lt;br /&gt;
$CFG-&amp;gt;dbpersist =  false;&lt;br /&gt;
$CFG-&amp;gt;prefix    = &#039;mdl_&#039;;            //Prefix, you can change it, but NEVER leave it blank.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t have a config.php file yet, it can be generated as normal from the Moodle installer. Alternatively you can use the config-dist.php file that comes with the Moodle package to create your own config.php file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6. Restart or start your web server.  If Moodle still cannot communicate with the database server, please turn display_startup_errors to &amp;quot;On&amp;quot; in your /PHP/php.ini file, then restart the web server and check for any errors that may indicate incorrect DLL versions or missing dependencies.  These error reports, turned off by default in PHP, can be vital in locating a problem with new extension installations.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
7. Database conection test, try this PHP script, just put in a text file called test.php change (&#039;localhost&#039;, &#039;db_user&#039;, &#039;db_password&#039;) to suite your setup, and load from local host (http://localhost/test.php)...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
	$link = mssql_connect(&#039;localhost&#039;, &#039;db_user&#039;, &#039;db_password&#039;);&lt;br /&gt;
	if(!$link) {&lt;br /&gt;
		echo&#039;Could not connect&#039;;&lt;br /&gt;
		die(&#039;Could not connect: &#039; . mssql_error());&lt;br /&gt;
	}&lt;br /&gt;
	echo&#039;Successful connection&#039;;&lt;br /&gt;
	mssql_close($link);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
8. Install Moodle as usual.  Good luck!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Troubleshooting ===&lt;br /&gt;
If you encounter some problems you can try:&lt;br /&gt;
*check that you have DotNet framework 1.1 installed (later version are installed on Vista, but you could need this specific one)&amp;lt;br /&amp;gt;&lt;br /&gt;
*enable TCP/IP for MSSQL: SQL Server 2005 Network Configuration -&amp;gt; Protocols for MSSQLSERVER -&amp;gt; TCP/IP (Enable) -&amp;gt; Properties -&amp;gt; Ip Addresses -&amp;gt; 127.0.0.1 (Active+Enable)&amp;lt;br /&amp;gt;&lt;br /&gt;
*make sure the SQL Server Browser service is running SQL Server 2005 Network Configuration -&amp;gt; SQL Server Services&amp;lt;br /&amp;gt;&lt;br /&gt;
*if you are using SQL Server 2005 and you have the error &#039;&#039;4004: Unicode data in a Unicode-only collation or ntext data cannot be sent to clients using DB-Library (such as ISQL) or ODBC version 3.7 or earlier&#039;&#039;, try the ODBTP method (next chapter). The SQL Server complaining that it doesn&#039;t support pure Unicode via TDS or older versions of ODBC. Microsoft has deprecated DB-Library a long ago, in favor of ODBC, OLE DB, or SQL Native Client. Many new features of SQL 2005 aren&#039;t accessible via DB-Library so if you need them, you could have to switch away from tools based on TDS and DB-Library :(&lt;br /&gt;
&lt;br /&gt;
== FreeTDS on Linux (on Ubuntu by compiling an mssql.so extension) ==&lt;br /&gt;
This is a good read to [http://www.robert-gonzalez.com/2009/02/18/building-the-php-ms-sql-server-extension-from-source-on-ubuntu-810/ building a FreeTDS based mssql extension for apache on Ubuntu]. Do note that [http://www.freetds.org/news.html freeTDS] 0.91 was recently released, you can find latest versions [http://freetds.sourceforge.net/ here]. &lt;br /&gt;
&lt;br /&gt;
Note: the freetds.conf file you use should have &amp;quot;text size = 20971520&amp;quot; as mentioned in the FreeTDS on Windows section otherwise you might see sessions logging out or worse apache segmentation faults. Also see [[FreeTDS]].&lt;br /&gt;
&lt;br /&gt;
== Using FreeTDS on Debian Lenny ==&lt;br /&gt;
I found the following solution using:&lt;br /&gt;
* PHP Version 5.2.6-1+lenny9&lt;br /&gt;
* Microsoft SQL Server Enterprise Edition, version: 9.00.4053.00&lt;br /&gt;
&amp;lt;pre&amp;gt;apt-get install libsybdb5 freetds-common php5-sybase&lt;br /&gt;
/etc/init.d/apache2 restart&amp;lt;/pre&amp;gt;&lt;br /&gt;
At the end of the process, if all goes fine, you will find in the mssql section of phpinfo();&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;nicetable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! MSSQL Support&lt;br /&gt;
! enabled&lt;br /&gt;
|-&lt;br /&gt;
| Library version &lt;br /&gt;
| FreeTDS &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Once FreeTDS is correctly installed, don not forget to set it up following explanations in https://docs.moodle.org/en/FreeTDS&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* FreeTDS for Windows is obsolete and too slow as of 2011. See: [http://moodle.org/mod/forum/discuss.php?d=183987 Hardware and Performance Forum]&lt;br /&gt;
* [[Installing Moodle]]&lt;br /&gt;
* [[Errors FAQ]]&lt;br /&gt;
* Using Moodle [http://moodle.org/mod/forum/view.php?id=28 Installation problems forum]&lt;br /&gt;
* [[Beginning Administration FAQ]]&lt;br /&gt;
* [[Installing Postgres for PHP]]&lt;br /&gt;
* [[Using the Microsoft SQL Server Driver for PHP]]&lt;br /&gt;
* [[Installing Oracle for PHP]]&lt;br /&gt;
&lt;br /&gt;
[[Category:FAQ]]&lt;br /&gt;
[[Category:Installation]]&lt;br /&gt;
[[Category:Developer]]&lt;br /&gt;
[[Category:XMLDB]]&lt;br /&gt;
[[Category:DB]]&lt;br /&gt;
[[Category:SQL databases]]&lt;/div&gt;</summary>
		<author><name>Stronk7</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/2x/pl/index.php?title=You_Might_Be_a_Moodler&amp;diff=91232</id>
		<title>You Might Be a Moodler</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/2x/pl/index.php?title=You_Might_Be_a_Moodler&amp;diff=91232"/>
		<updated>2011-10-05T11:06:45Z</updated>

		<summary type="html">&lt;p&gt;Stronk7: hehehe, happened here!&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In the spirit of Jeff Foxworthy&#039;s &#039;&#039;You Might be a Redneck&#039;&#039; - http://www.jefffoxworthy.com/comedy/jod/index.shtml &lt;br /&gt;
&lt;br /&gt;
*If you have ever turned on a football game and and the orange uniforms of one team caused you to leap up from the sofa and check out moodle.org, you might be a Moodler.&lt;br /&gt;
&lt;br /&gt;
*If you type &amp;quot;moodle.org&amp;quot; in your browser when you intend to type &amp;quot;google.com.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*If you look up recipes in moodle.org.&lt;br /&gt;
&lt;br /&gt;
*If you look up recipes in moodle.org... and [http://moodle.org/mod/forum/discuss.php?d=5395&amp;amp;parent=30227 find them]!&lt;br /&gt;
&lt;br /&gt;
*If you can spell &#039;&#039;&#039;Dougiamas&#039;&#039;&#039; without having to look it up.&lt;br /&gt;
&lt;br /&gt;
*If you can &#039;&#039;pronounce&#039;&#039; &#039;&#039;&#039;Dougiamas&#039;&#039;&#039; without having to look it up.&lt;br /&gt;
&lt;br /&gt;
*If you check the Moodle forums at 8:30 on a Saturday night.&lt;br /&gt;
&lt;br /&gt;
*If you find yourself heading to the bugtracker when the dishwasher is broken.&lt;br /&gt;
&lt;br /&gt;
*If you start seeing double square brackets around words you don&#039;t know the translation of.&lt;br /&gt;
&lt;br /&gt;
*If your neighbours wonder why you named your cats Helen and Howard.&lt;br /&gt;
&lt;br /&gt;
*Your spouse wants you to take up golf again because they hate being a &#039;moodle widow(er)&#039; more.&lt;br /&gt;
&lt;br /&gt;
*You describe the color of something as &amp;quot;Moodle&amp;quot; orange.&lt;br /&gt;
&lt;br /&gt;
*If you find yourself logging in to moodle.org during your summer holiday in Italy instead of enjoying the beautiful view or going to the beach. (Hi from Italy, Sigi)&lt;br /&gt;
&lt;br /&gt;
*If you come all the way from Germany to the US during your summer holiday and in addition to visiting lots of places you must absolutely go to a small town in South Carolina to find out about the latest Moodle tricks&lt;br /&gt;
&lt;br /&gt;
*You try to figure out how to grade e-mails from your friends without a drop down box&lt;br /&gt;
&lt;br /&gt;
*You find moodle.org is down for some reason and the first thing you want to do is post on moodle.org about it.&lt;br /&gt;
&lt;br /&gt;
*Every verb you use is &#039;to moodle&#039;.&lt;br /&gt;
&lt;br /&gt;
*You go into a Chinese restaurant and ask for a side order of Moodles with your Egg Foo Young.&lt;br /&gt;
&lt;br /&gt;
*You talk about Moodle so much that your non-Moodling, non-native English speaking husband asks if the noodles on the plate in front of him are moodles and when you ask him if that is what he meant to say he replies, &amp;quot;Yes, aren&#039;t they moodles?&amp;quot; (based on a true story)&lt;br /&gt;
&lt;br /&gt;
*You know that the course id for &#039;&#039;&#039;Using Moodle&#039;&#039;&#039; is 5.&lt;br /&gt;
&lt;br /&gt;
*And even if you drive a car, you always drive it in &#039;&#039;&#039;5&#039;&#039;&#039;th gear.&lt;br /&gt;
&lt;br /&gt;
*You throw away all but the orange M&amp;amp;amp;M&#039;s.&lt;br /&gt;
&lt;br /&gt;
*You eat all but the orange M&amp;amp;amp;M&#039;s (and keep it for good &#039;&#039;feng shui&#039;&#039; in your desktop).&lt;br /&gt;
&lt;br /&gt;
*You try to convince your wife and kids that there is a Disney Park in Perth.&lt;br /&gt;
&lt;br /&gt;
*The homepage of your computer is http://www.moodle.org.&lt;br /&gt;
&lt;br /&gt;
*The homepage of every computer you have ever laid hands on is http://www.moodle.org.&lt;br /&gt;
&lt;br /&gt;
*You only recently discovered that typing an address in your browser takes you to a page outside Moodle.org&lt;br /&gt;
 &lt;br /&gt;
*You sometimes refer to your third child as &#039;&#039;&#039;1.3&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Your default response to a rerun on TV is to fire up the laptop and check out moodle.org.&lt;br /&gt;
&lt;br /&gt;
*If you put little labels on your TV&#039;s remote control that say... view.php?id=1, view.php?id=2, etc ...&lt;br /&gt;
&lt;br /&gt;
*You have five browser windows open right now, four of which are Moodle sites.&lt;br /&gt;
&lt;br /&gt;
*Reading the moodle.org forums is part of the morning routine:  coffee, newspaper, wake up the children. . .&lt;br /&gt;
&lt;br /&gt;
*You find yourself adding items to a list that only the Moodle clique will understand.&lt;br /&gt;
&lt;br /&gt;
*You tell people to &amp;quot;Keep Moodling&amp;quot; and that they have been &amp;quot;Moodlised&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*If instead of saying &#039;&#039;Have a good day&#039;&#039; you begin greeting folks by saying &#039;&#039;Happy Moodling!&#039;&#039; and even worse when you actually believe that the two statements mean the same thing. {Based on a true story}&lt;br /&gt;
&lt;br /&gt;
*If normal words start being morphed into &#039;&#039;Moodle-isms&#039;&#039;. For example, when someone asks &#039;&#039;How are you?&#039;&#039; you begin to reply with words like Moodle-rrific and Moodle-tastic. Subsequently, you get confused when someone gives you a quizzical look because they do not understand what have just said. {Based on a true story}&lt;br /&gt;
&lt;br /&gt;
*If your students start showing up to the Friday night football games wanting to know when the Moodle chant is going to begin and students begin painting  &#039;&#039;MOODLE&#039;&#039; on their chests! {Based on a true story}&lt;br /&gt;
&lt;br /&gt;
*You get custom plates for your new car... [http://moodle.org/mod/forum/discuss.php?d=54899 Moodle Plate]&lt;br /&gt;
&lt;br /&gt;
*You get a quote on a custom paint job for your new car [http://classroomrevolution.com/jeff/moodleorange.jpg Moodle Orange Car]&lt;br /&gt;
&lt;br /&gt;
* You are looking forward to Christmas vacation so that you will have time to upgrade Moodle!&lt;br /&gt;
&lt;br /&gt;
* You read something interesting and your first thought is, &amp;quot;I have to post that at moodle.org.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* You forget that the comment you just ignored from a co-worker won&#039;t be retrievable later in a Recent Activities block.&lt;br /&gt;
&lt;br /&gt;
* When in the supermarket, you prefer to buy orange capsicums (peppers) rather than any other colour.&lt;br /&gt;
&lt;br /&gt;
* If you go to http://moodle.org instead of http://google.com and try some (global) searches there, only realizing after some attempts that you are looking within Moodleland only. {Based on a true story}&lt;/div&gt;</summary>
		<author><name>Stronk7</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/2x/pl/index.php?title=Installing_Oracle_for_PHP&amp;diff=89962</id>
		<title>Installing Oracle for PHP</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/2x/pl/index.php?title=Installing_Oracle_for_PHP&amp;diff=89962"/>
		<updated>2011-09-20T08:25:46Z</updated>

		<summary type="html">&lt;p&gt;Stronk7: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* http://www.oracle.com/technetwork/articles/technote-php-instant-084410.html&lt;br /&gt;
* http://moodle.org/mod/forum/discuss.php?d=65488#p308002 (with attached html document)&lt;br /&gt;
* http://es.php.net/oci8&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important Note:&#039;&#039;&#039; Don&#039;t forget to enable this variable in your php.ini (or .htaccess)  file:&lt;br /&gt;
&lt;br /&gt;
(else, all your data will be escaped following MySQL rules, that are incorrect for Oracle)&lt;br /&gt;
&lt;br /&gt;
    magic_quotes_sybase = On&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Broken versions of OCI8 driver ==&lt;br /&gt;
&lt;br /&gt;
PHP v5.2.4 (and perhaps v5.2.3 as well) have shipped with a bug in the OCI8 driver that leaks statement handles. The version of the OCI8 driver with the bug is v1.2.4. Possible workarounds:&lt;br /&gt;
&lt;br /&gt;
* Upgrade to PHP v5.2.5 or later&lt;br /&gt;
* Downgrade to PHP v5.2.1 (reported to work)&lt;br /&gt;
* Downgrade only the oci8 driver to the one included in PHP 5.2.1 (it worked for us -- iarenaza)&lt;br /&gt;
* If you are on linux and/or can compile PECL extensions, install an older OCI8 driver (v1.2.3 seems to work) from the PECL repository http://pecl.php.net/package/oci8&lt;br /&gt;
&lt;br /&gt;
More information at&lt;br /&gt;
* http://bugs.php.net/bug.php?id=42496 -- tracking the PHP OCI8 bug&lt;br /&gt;
* http://tracker.moodle.org/browse/MDL-11429 -- diagnostics on the Moodle side&lt;br /&gt;
&lt;br /&gt;
== Installing Moodle on Windows with Oracle Express Edition ==&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
This section explains how to install Moodle with Oracle Express Edition on Windows. I&#039;m using it for &#039;&#039;&#039;debugging&#039;&#039;&#039; purpose. It&#039;s definitively not a production environment. The goal is to setup easily and quickly a Moodle/Windows/Oracle environment.&lt;br /&gt;
&lt;br /&gt;
=== Install Oracle ===&lt;br /&gt;
Download Oracle Express Edition on [http://www.oracle.com/technology/products/database/xe/index.html Oracle web site].&amp;lt;br /&amp;gt;&lt;br /&gt;
You will also need the Instant client [http://www.oracle.com/technology/software/tech/oci/instantclient/htdocs/winsoft.html from here] (free account sign up needed). Copy everything from the unzipped folder into apache/bin. &amp;lt;br /&amp;gt;&lt;br /&gt;
Install both.&amp;lt;br /&amp;gt;&lt;br /&gt;
Access to the oracle console (http://127.0.0.1:8080/apex). Login: SYS Password: the_one_you_entered_during_the_installation&amp;lt;br /&amp;gt;&lt;br /&gt;
Create a new user and give it all rights (including DBA).&amp;lt;br /&amp;gt;&lt;br /&gt;
Note: Oracle Express Edition 10g is limited at one database called &#039;XE&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Set up your oracle extension ===&lt;br /&gt;
This document does not explain how to setup apache/php for Oracle. You can have more information on [http://www.oracle.com/technology/tech/php/htdocs/php-oracle-tutorial.html Oracle Documentation]. On my own machine I used my WAMP installation ([http://www.en.wampserver.com/ Wampserver 2.0]) which allowed me to activate all oracle extensions in few clicks (php_oci8, php_oracle, php_pdo_oci, php_pdo_oci8).&lt;br /&gt;
&lt;br /&gt;
=== Install Moodle ===&lt;br /&gt;
On the database setup page:&amp;lt;br /&amp;gt;&lt;br /&gt;
Driver: Oracle oci8 (in the config file it should read &amp;quot;oci8po&amp;quot; for a 1.9.x install and &amp;quot;oci&amp;quot; for a 2.0.x install)&amp;lt;br /&amp;gt;&lt;br /&gt;
Host: empty the field&amp;lt;br /&amp;gt;&lt;br /&gt;
Database: //localhost:1521/XE&amp;lt;br /&amp;gt;&lt;br /&gt;
User: the user that you created&amp;lt;br /&amp;gt;&lt;br /&gt;
Password: the password you gave to the user&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configure Apache ===&lt;br /&gt;
If you&#039;re running Moodle on Oracle with Apache on Linux, you might have issues with PHP being able to see the system environment variables.  To resolve this, you can edit /etc/sysconfig/apache2 and add the following lines to the bottom:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
LD_LIBRARY_PATH=/opt/oracle/instantclient_11_2# Set LANG Variables for UTF-8&amp;lt;br /&amp;gt;&lt;br /&gt;
NLS_LANG=AMERICAN_AMERICA.AL32UTF8&amp;lt;br /&amp;gt;&lt;br /&gt;
LANG=en_US.UTF-8&amp;lt;br /&amp;gt;&lt;br /&gt;
LC_ALL=en_US.UTF-8&amp;lt;br /&amp;gt;&lt;br /&gt;
LC_COLLATE=en_US.UTF-8&amp;lt;br /&amp;gt;&lt;br /&gt;
LC_CTYPE=en_US.UTF-8&amp;lt;br /&amp;gt;&lt;br /&gt;
LC_MESSAGES=en_US.UTF-8&amp;lt;br /&amp;gt;&lt;br /&gt;
LC_MONETARY=en_US.UTF-8&amp;lt;br /&amp;gt;&lt;br /&gt;
LC_NUMERIC=en_US.UTF-8&amp;lt;br /&amp;gt;&lt;br /&gt;
LC_TIME=en_US.UTF-8&amp;lt;br /&amp;gt;&lt;br /&gt;
export LANG LC_ALL LC_COLLATE LC_CTYPE LC_MESSAGES LC_MONETARY LC_NUMERIC LC_TIM NLS_LANG LD_LIBRARY_PATH&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Also need to add those two lines to ~/.bashrc so that the PHP command-line client can see it too. &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Related links ==&lt;br /&gt;
* [http://lewiscarr.co.uk/node/4 Installing ORACLE drivers with PHP]&lt;br /&gt;
*[[Installing MSSQL for PHP]]&lt;br /&gt;
*[[PHP]]&lt;br /&gt;
*[http://moodle.org/mod/forum/discuss.php?d=134729#p588963 Can i install Moodle with Oracle database]&lt;br /&gt;
*[http://moodle.org/mod/forum/discuss.php?d=65488 Who uses Oracle]&lt;br /&gt;
*[https://docs.moodle.org/en/Step-by-step_Install_Guide_for_Solaris_10_with_Oracle_10 Step by step Install Guide for Solaris 10 with Oracle 10]&lt;br /&gt;
*[http://learningischange.com/2009/05/29/install-moodle-on-an-oracle-database-in-25-minutes-or-less/ Install Moodle on an Oracle Database (in 25 minutes or less)]. The related Using Moodle forum discussion is [http://moodle.org/mod/forum/discuss.php?d=124629 here].&lt;br /&gt;
*[http://www.mguhlin.org/2009/05/moodle-on-oracle-database.html Moodle on Oracle Database] discussion on Miguel Guhlin&#039;s blog &lt;br /&gt;
&lt;br /&gt;
[[Category:Installation]]&lt;br /&gt;
[[Category:Developer]]&lt;br /&gt;
[[Category:XMLDB]]&lt;br /&gt;
[[Category:DB]]&lt;br /&gt;
[[Category:SQL databases]]&lt;/div&gt;</summary>
		<author><name>Stronk7</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/2x/pl/index.php?title=Installing_MSSQL_for_PHP&amp;diff=89961</id>
		<title>Installing MSSQL for PHP</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/2x/pl/index.php?title=Installing_MSSQL_for_PHP&amp;diff=89961"/>
		<updated>2011-09-20T08:25:29Z</updated>

		<summary type="html">&lt;p&gt;Stronk7: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
This short manual is suitable if you are trying to run Moodle using the SQL*Server (MSSQL) RDBMS. Steps detailed below must be performed &#039;&#039;&#039;before&#039;&#039;&#039; installing Moodle itself.&lt;br /&gt;
&lt;br /&gt;
Some of this may also apply if you wish to access an MSSQL server for external db authentication/enrollment. &lt;br /&gt;
&lt;br /&gt;
First of all, minimum required version of MSSQL has been stabilised to MSSQL 2005 (v.9), although it &#039;&#039;&#039;might work with MSSQL 2000 (v.8) or newer&#039;&#039;&#039;. All the development process has been performed using MSSQL 2005 and there could be some &#039;&#039;&#039;unknown problems&#039;&#039;&#039; with previous releases.&lt;br /&gt;
&lt;br /&gt;
While PHP comes with one, more or less, standard extension (mssql) that provides access to MSSQL databases, early we found some hard limits on it. Basically such default extension has some limits that prevent us to use it at all (you can find more info about these problems [[Development:XMLDB problems#MSSQL, PHP, UTF-8 and UCS-2|here]]).&lt;br /&gt;
&lt;br /&gt;
So, in order to allow PHP (i.e. Moodle) to access to MSSQL DBs properly we have to install a &#039;&#039;&#039;mssql extension alternative&#039;&#039;&#039; to save us from the problems related above. See the sections below for details about the various options.&lt;br /&gt;
&lt;br /&gt;
== Installation overview ==&lt;br /&gt;
&lt;br /&gt;
1. Get MSSQL Server installed and running. ([http://www.microsoft.com/sql/editions/express/default.mspx A free limited version, SQL Server Express Edition] is available for testing.)&lt;br /&gt;
:Make sure that you choose mixed authentication (Windows and local accounts) to keep things simpler later.  You&#039;ll be asked to define the  &amp;quot;sa&amp;quot; account password (it&#039;s the default System Administrator account which has full access to all databases by default).&lt;br /&gt;
&lt;br /&gt;
2. Make sure MS SQL Server can accept incoming TCP/IP connections on port 1433 (the standard one).&lt;br /&gt;
:You might need to explicitly allow this in your Windows firewall (see the Control Panel).  You may also need to edit options in the :&#039;&#039;&#039;SQL Server Configuration Manager&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Network Configuration&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Protocols&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;TCP/IP enabled&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
3. Open the &amp;quot;SQL Server Management Studio&amp;quot; and create a new empty database.  If you are using the &amp;quot;sa&amp;quot; account then you don&#039;t need to do anything else here.&lt;br /&gt;
&lt;br /&gt;
4. Configure these settings in your created (and still empty) database:&lt;br /&gt;
&lt;br /&gt;
:* ANSI NULLS Enabled = true (ALTER DATABASE xxxx SET ANSI_NULLS ON)&lt;br /&gt;
:* Quoted Identifiers Enabled = true (ALTER DATABASE xxxx SET QUOTED_IDENTIFIER ON)&lt;br /&gt;
:* Moodle 2.0 only: Row Versioning Enabled (ALTER DATABASE xxxx SET READ_COMMITTED_SNAPSHOT ON) - To set READ_COMMITTED_SNAPSHOT ON (or OFF), there must be no active connections to the database except for the connection executing the ALTER DATABASE command. See http://msdn.microsoft.com/en-us/library/bb522682.aspx&lt;br /&gt;
&lt;br /&gt;
5. Get PHP installed with a web server.   Unless you want to do it under IIS or some other way, the packages on the [http://download.moodle.org Moodle download page] are a good solution.&lt;br /&gt;
&lt;br /&gt;
6. Choose one of the following specific sections for your server to install the &#039;&#039;&#039;mssql extension alternative&#039;&#039;&#039; installed and running properly on your PHP box.&lt;br /&gt;
&lt;br /&gt;
7. Set the following settings in your php.ini file&lt;br /&gt;
:* mssql.textlimit = 20971520&lt;br /&gt;
:* mssql.textsize = 20971520&lt;br /&gt;
&lt;br /&gt;
8. With all this properly configured, you can continue with a [[Installing Moodle|standard Moodle installation]].&lt;br /&gt;
&lt;br /&gt;
== Using the SQL Server 2005 Driver for PHP from Microsoft on Windows ==&lt;br /&gt;
In July 2008 Microsoft [http://social.msdn.microsoft.com/forums/en-US/sqldriverforphp/thread/a10e5202-9e41-4ff8-a33e-fbcc7b951be2/ released] a new SQL Server 2005 Driver for PHP. This is a PHP extension that allows PHP scripts to read and write data on Microsoft SQL Server databases and it overcomes the problems with the native SQL Server extension that was previously bundled with PHP.&lt;br /&gt;
&lt;br /&gt;
This Microsoft driver is the standard database layer for running Moodle 2 under Microsoft SQL Server databases. See [[Using the Microsoft SQL Server Driver for PHP]] the installation and configuration details.&lt;br /&gt;
&lt;br /&gt;
This driver is only supported in Moodle 2.0 and up. You should use [https://docs.moodle.org/en/Installing_MSSQL_for_PHP#Using_FreeTDS_on_Windows FreeTDS] if you are installing an older version of Moodle.&lt;br /&gt;
&lt;br /&gt;
See MDL-16497 and MDL-15093 for more background information.&lt;br /&gt;
&lt;br /&gt;
== Using FreeTDS on Windows ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&#039;&#039;&#039;Important Note 1:&#039;&#039;&#039; Due to some previous bugs it&#039;s highly recommendable to use PHP &amp;gt;= 5.2.6 and FreeTDS 0.82 + post-release patches ([http://tracker.moodle.org/browse/MDL-14725 more info]).&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If your web server is on Windows, use &#039;&#039;&#039;php_dblib.dll&#039;&#039;&#039;. Despite the name, it&#039;s FreeTDS compiled for Windows. (Go to this page for information on [https://docs.moodle.org/en/FreeTDS Using FreeTDS for Unix].) &lt;br /&gt;
&lt;br /&gt;
Originally we were using the DLLs available at [http://kromann.info/article.php?Id=11062598797760000 Frank Kromann&#039;s site], but they are outdated (using old versions of FreeTDS) and that has caused [http://tracker.moodle.org/browse/MDL-14725 some problems] in the past.&lt;br /&gt;
&lt;br /&gt;
So, right now, the recommended way to use FreeTDS under Windows is to use PHP 5.2.x following the following instructions:&lt;br /&gt;
&lt;br /&gt;
1. Download the appropriate copy of php_dblib.dll from the list below, and save it into your /PHP/ext directory.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; align=&amp;quot;center&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! PHP version !! [http://www.iis-aid.com/articles/my_word/difference_between_php_thread_safe_and_non_thread_safe_binaries Thread Safe]  !! FreeTDS version !! Download URL&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | PHP 5.2.x (vc6) || Yes || 0.82 + 20090302 patches || [http://download.moodle.org/download.php/dblib/php52/DBLIB_TS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| No || 0.82 + 20090302 patches || [http://download.moodle.org/download.php/dblib/php52/DBLIB_NOTS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | PHP 5.3.x (vc9) || Yes || 0.82 + 20090904 patches || [http://download.moodle.org/download.php/dblib/php53/DBLIB_TS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| No || 0.82 + 20090904 patches || [http://download.moodle.org/download.php/dblib/php53/DBLIB_NOTS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |  Thanks to [http://remote-learner.net/ Remote-Learner]] (Moodle [http://moodle.com/partners/ Partner]) and specially to Bryan Williams, donating one Visual C++ 6.0 Pro license to Moodle. Thanks to Trevor Johnson and his builds of the dblib extensions. Thanks to Daniele, Doug, Luis, Sean and many others by their collaboration in MDL-14725. Thanks to Frediano Ziglio and James K. Lowden from [http://freetds.org freetds.org] by their support. Thanks to Alastair Hole by providing the PHP 5.3 builds of the libraries. Thanks!&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
(alternatively here you can find some [[Development:Compiling FreeTDS under Windows|instructions to build those freetds extensions under win32]] yourself)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. FreeTDS requires the .NET Framework v1.1 to be installed.  You can [http://www.microsoft.com/downloads/details.aspx?FamilyID=262d25e3-f589-4842-8157-034d1e7cf3a3&amp;amp;DisplayLang=en download it from the Microsoft website] along with its [http://www.microsoft.com/downloads/details.aspx?FamilyID=a8f5654f-088e-40b2-bbdb-a83353618b38&amp;amp;DisplayLang=en service pack].  Alternatively, if you do not wish to install this framework, you can [http://kromann.info/ms-libs/msvcr71.dll download the required DLL] from Frank&#039;s site, and save it into your /PHP root directory.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. Edit your /PHP/php.ini file and add this line:&lt;br /&gt;
&lt;br /&gt;
  extension=php_dblib.dll &lt;br /&gt;
&lt;br /&gt;
Make sure that any lines referring to the php_mssql.dll extension are DISABLED (commented out).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. When the PHP engine loads the FreeTDS extension it needs to be passed certain infiormation in order to be able to connect to your Moodle database. To retrieve this information FreeTDS looks for a file called &#039;&#039;&#039;freetds.conf&#039;&#039;&#039; in the root folder of the server that PHP installed on (e.g. C:\).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;freetds.conf&#039;&#039;&#039; should have the following structure:&lt;br /&gt;
&lt;br /&gt;
  [global]&lt;br /&gt;
      host = xxx.xxx.xxx.xxx (host name or ip of the MSSQL server)&lt;br /&gt;
      port = 1433&lt;br /&gt;
      client charset = UTF-8&lt;br /&gt;
      tds version = 8.0&lt;br /&gt;
      text size = 20971520&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want to connect to a particular [http://msdn.microsoft.com/en-us/library/aa174516(SQL.80).aspx instance] of MSSQL you should specify the instance name:&lt;br /&gt;
&lt;br /&gt;
  [global]&lt;br /&gt;
      host = xxx.xxx.xxx.xxx (host name or ip of the MSSQL server)&lt;br /&gt;
      instance = xxx (instance name, e.g. INST2)&lt;br /&gt;
      port = 1433&lt;br /&gt;
      client charset = UTF-8&lt;br /&gt;
      tds version = 8.0&lt;br /&gt;
      text size = 20971520&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
*You can configure FreeTDS to look for the freetds.conf file in any directory that you want - you don&#039;t have to use C:\. To do this create a SYSTEM environment variable called &#039;&#039;&#039;FREETDS&#039;&#039;&#039; and point it to the directory where you have installed the freetds.conf file. If you do not set this environment variable FreeTDS will look for the freetds.conf file in the C:\ folder, which is the default. One possible benefit of setting the FREETDS environment variable and using a different installation directory for freetds.conf is that C:\ is very predictable to a hacker that knows anything about FreeTDS and that is the first place that he would look if he wanted to compromise your system. So, using a different installation directory would just make your system stronger. See the FreeTDS [http://www.freetds.org/userguide/envvar.htm Setting the environment variables] documentation for more information about this FREETDS environment variable.&lt;br /&gt;
&lt;br /&gt;
*Alternatively, you can [[Development:Compiling FreeTDS under Windows|recompile]] the FreeTDS extension yourself and change the default location to your preferred location at compile time. Then it is not necessary to create any environment variable. You must just ensure that freetds.conf is in the same folder that you specify when you compile php_dblib.dll.&lt;br /&gt;
&lt;br /&gt;
*MSSQL is usually installed with port 1433 as the default. However, if the port was changed on your server when you installed MSSQL then you need to specify the correct port number.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5. Your Moodle &#039;&#039;&#039;config.php&#039;&#039;&#039; should include lines like these:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
$CFG-&amp;gt;dbtype    = &#039;mssql_n&#039;;        // Required&lt;br /&gt;
$CFG-&amp;gt;dbhost    = &#039;localhost&#039;;      // assuming MS SQL is on the same server, otherwise use an IP&lt;br /&gt;
$CFG-&amp;gt;dbname    = &#039;moodle&#039;;         // or whatever you called the database you created&lt;br /&gt;
$CFG-&amp;gt;dbuser    = &#039;yourusername&#039;;   // I usually use the &#039;sa&#039; account (dbowner perms are enough)&lt;br /&gt;
$CFG-&amp;gt;dbpass    = &#039;yourpassword&#039;;&lt;br /&gt;
$CFG-&amp;gt;dbpersist =  false;&lt;br /&gt;
$CFG-&amp;gt;prefix    = &#039;mdl_&#039;;            //Prefix, you can change it, but NEVER leave it blank.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t have a config.php file yet, it can be generated as normal from the Moodle installer. Alternatively you can use the config-dist.php file that comes with the Moodle package to create your own config.php file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6. Restart or start your web server.  If Moodle still cannot communicate with the database server, please turn display_startup_errors to &amp;quot;On&amp;quot; in your /PHP/php.ini file, then restart the web server and check for any errors that may indicate incorrect DLL versions or missing dependencies.  These error reports, turned off by default in PHP, can be vital in locating a problem with new extension installations.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
7. Database conection test, try this PHP script, just put in a text file called test.php change (&#039;localhost&#039;, &#039;db_user&#039;, &#039;db_password&#039;) to suite your setup, and load from local host (http://localhost/test.php)...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
	$link = mssql_connect(&#039;localhost&#039;, &#039;db_user&#039;, &#039;db_password&#039;);&lt;br /&gt;
	if(!$link) {&lt;br /&gt;
		echo&#039;Could not connect&#039;;&lt;br /&gt;
		die(&#039;Could not connect: &#039; . mssql_error());&lt;br /&gt;
	}&lt;br /&gt;
	echo&#039;Successful connection&#039;;&lt;br /&gt;
	mssql_close($link);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
8. Install Moodle as usual.  Good luck!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Troubleshooting ===&lt;br /&gt;
If you encounter some problems you can try:&lt;br /&gt;
*check that you have DotNet framework 1.1 installed (later version are installed on Vista, but you could need this specific one)&amp;lt;br /&amp;gt;&lt;br /&gt;
*enable TCP/IP for MSSQL: SQL Server 2005 Network Configuration -&amp;gt; Protocols for MSSQLSERVER -&amp;gt; TCP/IP (Enable) -&amp;gt; Properties -&amp;gt; Ip Addresses -&amp;gt; 127.0.0.1 (Active+Enable)&amp;lt;br /&amp;gt;&lt;br /&gt;
*if you are using SQL Server 2005 and you have the error &#039;&#039;4004: Unicode data in a Unicode-only collation or ntext data cannot be sent to clients using DB-Library (such as ISQL) or ODBC version 3.7 or earlier&#039;&#039;, try the ODBTP method (next chapter). The SQL Server complaining that it doesn&#039;t support pure Unicode via TDS or older versions of ODBC. Microsoft has deprecated DB-Library a long ago, in favor of ODBC, OLE DB, or SQL Native Client. Many new features of SQL 2005 aren&#039;t accessible via DB-Library so if you need them, you could have to switch away from tools based on TDS and DB-Library :(&lt;br /&gt;
&lt;br /&gt;
== FreeTDS on Linux (on Ubuntu by compiling an mssql.so extension) ==&lt;br /&gt;
This is a good read to [http://www.robert-gonzalez.com/2009/02/18/building-the-php-ms-sql-server-extension-from-source-on-ubuntu-810/ building a FreeTDS based mssql extension for apache on Ubuntu]. Do note that [http://www.freetds.org/news.html freeTDS] 0.91 was recently released, you can find latest versions [http://freetds.sourceforge.net/ here]. &lt;br /&gt;
&lt;br /&gt;
Note: the freetds.conf file you use should have &amp;quot;text size = 20971520&amp;quot; as mentioned in the FreeTDS on Windows section otherwise you might see sessions logging out or worse apache segmentation faults. Also see [[FreeTDS]].&lt;br /&gt;
&lt;br /&gt;
== Using FreeTDS on Debian Lenny ==&lt;br /&gt;
I found the following solution using:&lt;br /&gt;
* PHP Version 5.2.6-1+lenny9&lt;br /&gt;
* Microsoft SQL Server Enterprise Edition, version: 9.00.4053.00&lt;br /&gt;
&amp;lt;pre&amp;gt;apt-get install libsybdb5 freetds-common php5-sybase&lt;br /&gt;
/etc/init.d/apache2 restart&amp;lt;/pre&amp;gt;&lt;br /&gt;
At the end of the process, if all goes fine, you will find in the mssql section of phpinfo();&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;nicetable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! MSSQL Support&lt;br /&gt;
! enabled&lt;br /&gt;
|-&lt;br /&gt;
| Library version &lt;br /&gt;
| FreeTDS &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Once FreeTDS is correctly installed, don not forget to set it up following explanations in https://docs.moodle.org/en/FreeTDS&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* [[Installing Moodle]]&lt;br /&gt;
* [[Errors FAQ]]&lt;br /&gt;
* Using Moodle [http://moodle.org/mod/forum/view.php?id=28 Installation problems forum]&lt;br /&gt;
* [[Beginning Administration FAQ]]&lt;br /&gt;
* [[Installing Postgres for PHP]]&lt;br /&gt;
* [[Using the Microsoft SQL Server Driver for PHP]]&lt;br /&gt;
* [[Installing Oracle for PHP]]&lt;br /&gt;
&lt;br /&gt;
[[Category:FAQ]]&lt;br /&gt;
[[Category:Installation]]&lt;br /&gt;
[[Category:Developer]]&lt;br /&gt;
[[Category:XMLDB]]&lt;br /&gt;
[[Category:DB]]&lt;br /&gt;
[[Category:SQL databases]]&lt;/div&gt;</summary>
		<author><name>Stronk7</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/2x/pl/index.php?title=Using_the_Microsoft_SQL_Server_Driver_for_PHP&amp;diff=89957</id>
		<title>Using the Microsoft SQL Server Driver for PHP</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/2x/pl/index.php?title=Using_the_Microsoft_SQL_Server_Driver_for_PHP&amp;diff=89957"/>
		<updated>2011-09-20T08:23:21Z</updated>

		<summary type="html">&lt;p&gt;Stronk7: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Moodle 2.0}}&lt;br /&gt;
== Using the SQL Server Driver for PHP from Microsoft ==&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
This short manual is for running Moodle 2.0 (and upwards) using the Microsoft SQL Server (MSSQL) RDBMS. The steps detailed below must be performed &#039;&#039;&#039;before&#039;&#039;&#039; installing Moodle itself.&lt;br /&gt;
&lt;br /&gt;
First of all, the minimum required version of MSSQL has been stabilized to MSSQL 2005 (v.9).&lt;br /&gt;
&lt;br /&gt;
== Installation overview ==&lt;br /&gt;
1. Install Microsoft SQL Server including SQL Server Management Studio. ([http://www.microsoft.com/sql/editions/express/default.mspx A free version, SQL Server Express Edition] is available for testing.)&lt;br /&gt;
:Make sure to choose mixed authentication (Windows and local accounts) to keep things simpler later.  Define the &amp;quot;sa&amp;quot; account password when requested (it&#039;s the default System Administrator account which has full access to all databases by default).&lt;br /&gt;
&lt;br /&gt;
2. Configure Windows for MSSQL.&lt;br /&gt;
:By default, MSSQL listens to port 1433 for incoming TCP/IP connections and this port needs to be opened in the firewall. This is explicitly configured in the firewall installed (either Windows Firewall in the Control Panel or the configuration interface for other firewalls). If the port was changed when MSSQL was installed, then specify the correct port number to open in the firewall.&lt;br /&gt;
:Confirm the TCP/IP protocol is enabled in: &#039;&#039;&#039;SQL Server Configuration Manager&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Network Configuration&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Protocols&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;TCP/IP enabled&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
3. Create and configure a new database.&lt;br /&gt;
:Open &amp;quot;SQL Server Management Studio&amp;quot; and create a new empty database.&lt;br /&gt;
*Execute the following command to enable Row Versioning:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 USE MASTER&lt;br /&gt;
 GO&lt;br /&gt;
 ALTER DATABASE &amp;amp;lt;your-database-name&amp;amp;gt; SET READ_COMMITTED_SNAPSHOT ON&lt;br /&gt;
 GO&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Install PHP and a web server.&lt;br /&gt;
*PHP can be downloaded from [http://www.php.net/downloads.php www.php.net]&lt;br /&gt;
*If IIS is used as the web server, IIS 7.0 or later is recommended with [http://www.iis.net/download FastCGI and WinCache]. &lt;br /&gt;
&lt;br /&gt;
5. Install the SQL Server Driver for PHP.&lt;br /&gt;
:On the web server, install [http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=ccdf728b-1ea0-48a8-a84a-5052214caad9 SQL Server Driver for PHP] (minimum version required is v1.1) including all the pre-requisites listed on the download page. Note: it is critical to install the SQL Server Native Access Client version documented on the download page of the SQL Server Driver for PHP.&lt;br /&gt;
:Configure PHP to use the appropriate SQLSRV driver. In php.ini, set the following:&lt;br /&gt;
&lt;br /&gt;
For PHP 5.2.4 (or later)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 [PHP_SQLSRV]&lt;br /&gt;
 extension=php_sqlsrv_52_nts_vc9.dll&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For PHP 5.3.2 (or later)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 [PHP_SQLSRV]&lt;br /&gt;
 extension=php_sqlsrv_53_nts_vc9.dll&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Microsoft documentation for the SQL Server Driver for PHP is available at: http://msdn.microsoft.com/en-us/library/ee229548(v=SQL.10).aspx &lt;br /&gt;
&lt;br /&gt;
6. Install and configure Moodle.&lt;br /&gt;
:Continue with the [[Installing Moodle|standard Moodle installation]].&lt;br /&gt;
&lt;br /&gt;
7. The Moodle &#039;&#039;&#039;config.php&#039;&#039;&#039; should include lines like these:&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
$CFG-&amp;gt;dbtype    = &#039;sqlsrv&#039;;         // Required&lt;br /&gt;
$CFG-&amp;gt;dbhost    = &#039;localhost&#039;;      // Assuming that MSSQL is on the same server, otherwise &lt;br /&gt;
                                    // use the actual name or IP address of your database server&lt;br /&gt;
$CFG-&amp;gt;dbname    = &#039;moodle&#039;;         // The name of the newly created Moodle database&lt;br /&gt;
$CFG-&amp;gt;dbuser    = &#039;yourusername&#039;;   // Usually the &#039;sa&#039; account (dbowner perms are enough)&lt;br /&gt;
$CFG-&amp;gt;dbpass    = &#039;yourpassword&#039;;&lt;br /&gt;
$CFG-&amp;gt;dbpersist =  true;&lt;br /&gt;
$CFG-&amp;gt;prefix    = &#039;mdl_&#039;;           // The prefix can be changed per individual preferences, &lt;br /&gt;
                                    // but NEVER leave this blank!&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:If the config.php file doesn&#039;t exist, it will be generated as normal from the Moodle installer. Alternatively, use the config-dist.php file that comes with the Moodle package to create a custom config.php file.&lt;br /&gt;
&lt;br /&gt;
8. Restart or start your web server.&lt;br /&gt;
:If Moodle still cannot communicate with the database server, turn &#039;&#039;&#039;display_startup_errors&#039;&#039;&#039; to &amp;quot;On&amp;quot; in the /PHP/php.ini file, then restart the web server and check for any errors that may indicate incorrect DLL versions or missing dependencies.  These error reports, turned off by default in PHP, can be vital in locating a problem with new extension installations.&lt;br /&gt;
&lt;br /&gt;
9. Test the database connection.&lt;br /&gt;
:Try this PHP script, just add a text file called test.php from the example below and change (&#039;localhost&#039;, &#039;db_user&#039;, &#039;db_password&#039;) to align with the config.php settings, and load from local host (http://localhost/test.php).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$link = sqlsrv_connect($this-&amp;gt;dbhost, array(&#039;UID&#039; =&amp;gt; &#039;db_user&#039;, &#039;PWD&#039; =&amp;gt; &#039;db_password&#039;));&lt;br /&gt;
if($link === FALSE) {&lt;br /&gt;
    echo &#039;Could not connect&#039;;&lt;br /&gt;
    die(&#039;Could not connect: &#039; . sqlsrv_errors(SQLSRV_ERR_ALL));&lt;br /&gt;
}&lt;br /&gt;
echo &#039;Successful connection&#039;;&lt;br /&gt;
sqlsrv_close($link);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
10. Complete the rest of the Moodle installation as usual.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* [[Installing Moodle]]&lt;br /&gt;
* [[Errors FAQ]]&lt;br /&gt;
* Using Moodle [http://moodle.org/mod/forum/view.php?id=28 Installation problems forum]&lt;br /&gt;
* [[Beginning Administration FAQ]]&lt;br /&gt;
* [[Installing Postgres for PHP]]&lt;br /&gt;
* [[Installing MSSQL for PHP]]&lt;br /&gt;
* [[Installing Oracle for PHP]]&lt;br /&gt;
&lt;br /&gt;
[[Category:FAQ]]&lt;br /&gt;
[[Category:Installation]]&lt;br /&gt;
[[Category:Developer]]&lt;br /&gt;
[[Category:XMLDB]]&lt;br /&gt;
[[Category:DB]]&lt;/div&gt;</summary>
		<author><name>Stronk7</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/2x/pl/index.php?title=Installing_MSSQL_for_PHP&amp;diff=89956</id>
		<title>Installing MSSQL for PHP</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/2x/pl/index.php?title=Installing_MSSQL_for_PHP&amp;diff=89956"/>
		<updated>2011-09-20T08:22:08Z</updated>

		<summary type="html">&lt;p&gt;Stronk7: /* See Also */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
This short manual is suitable if you are trying to run Moodle using the SQL*Server (MSSQL) RDBMS. Steps detailed below must be performed &#039;&#039;&#039;before&#039;&#039;&#039; installing Moodle itself.&lt;br /&gt;
&lt;br /&gt;
Some of this may also apply if you wish to access an MSSQL server for external db authentication/enrollment. &lt;br /&gt;
&lt;br /&gt;
First of all, minimum required version of MSSQL has been stabilised to MSSQL 2005 (v.9), although it &#039;&#039;&#039;might work with MSSQL 2000 (v.8) or newer&#039;&#039;&#039;. All the development process has been performed using MSSQL 2005 and there could be some &#039;&#039;&#039;unknown problems&#039;&#039;&#039; with previous releases.&lt;br /&gt;
&lt;br /&gt;
While PHP comes with one, more or less, standard extension (mssql) that provides access to MSSQL databases, early we found some hard limits on it. Basically such default extension has some limits that prevent us to use it at all (you can find more info about these problems [[Development:XMLDB problems#MSSQL, PHP, UTF-8 and UCS-2|here]]).&lt;br /&gt;
&lt;br /&gt;
So, in order to allow PHP (i.e. Moodle) to access to MSSQL DBs properly we have to install a &#039;&#039;&#039;mssql extension alternative&#039;&#039;&#039; to save us from the problems related above. See the sections below for details about the various options.&lt;br /&gt;
&lt;br /&gt;
== Installation overview ==&lt;br /&gt;
&lt;br /&gt;
1. Get MSSQL Server installed and running. ([http://www.microsoft.com/sql/editions/express/default.mspx A free limited version, SQL Server Express Edition] is available for testing.)&lt;br /&gt;
:Make sure that you choose mixed authentication (Windows and local accounts) to keep things simpler later.  You&#039;ll be asked to define the  &amp;quot;sa&amp;quot; account password (it&#039;s the default System Administrator account which has full access to all databases by default).&lt;br /&gt;
&lt;br /&gt;
2. Make sure MS SQL Server can accept incoming TCP/IP connections on port 1433 (the standard one).&lt;br /&gt;
:You might need to explicitly allow this in your Windows firewall (see the Control Panel).  You may also need to edit options in the :&#039;&#039;&#039;SQL Server Configuration Manager&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Network Configuration&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Protocols&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;TCP/IP enabled&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
3. Open the &amp;quot;SQL Server Management Studio&amp;quot; and create a new empty database.  If you are using the &amp;quot;sa&amp;quot; account then you don&#039;t need to do anything else here.&lt;br /&gt;
&lt;br /&gt;
4. Configure these settings in your created (and still empty) database:&lt;br /&gt;
&lt;br /&gt;
:* ANSI NULLS Enabled = true (ALTER DATABASE xxxx SET ANSI_NULLS ON)&lt;br /&gt;
:* Quoted Identifiers Enabled = true (ALTER DATABASE xxxx SET QUOTED_IDENTIFIER ON)&lt;br /&gt;
:* Moodle 2.0 only: Row Versioning Enabled (ALTER DATABASE xxxx SET READ_COMMITTED_SNAPSHOT ON) - To set READ_COMMITTED_SNAPSHOT ON (or OFF), there must be no active connections to the database except for the connection executing the ALTER DATABASE command. See http://msdn.microsoft.com/en-us/library/bb522682.aspx&lt;br /&gt;
&lt;br /&gt;
5. Get PHP installed with a web server.   Unless you want to do it under IIS or some other way, the packages on the [http://download.moodle.org Moodle download page] are a good solution.&lt;br /&gt;
&lt;br /&gt;
6. Choose one of the following specific sections for your server to install the &#039;&#039;&#039;mssql extension alternative&#039;&#039;&#039; installed and running properly on your PHP box.&lt;br /&gt;
&lt;br /&gt;
7. Set the following settings in your php.ini file&lt;br /&gt;
:* mssql.textlimit = 20971520&lt;br /&gt;
:* mssql.textsize = 20971520&lt;br /&gt;
&lt;br /&gt;
8. With all this properly configured, you can continue with a [[Installing Moodle|standard Moodle installation]].&lt;br /&gt;
&lt;br /&gt;
== Using the SQL Server 2005 Driver for PHP from Microsoft on Windows ==&lt;br /&gt;
In July 2008 Microsoft [http://social.msdn.microsoft.com/forums/en-US/sqldriverforphp/thread/a10e5202-9e41-4ff8-a33e-fbcc7b951be2/ released] a new SQL Server 2005 Driver for PHP. This is a PHP extension that allows PHP scripts to read and write data on Microsoft SQL Server databases and it overcomes the problems with the native SQL Server extension that was previously bundled with PHP.&lt;br /&gt;
&lt;br /&gt;
This Microsoft driver is the standard database layer for running Moodle 2 under Microsoft SQL Server databases. See [[Using the Microsoft SQL Server Driver for PHP]] the installation and configuration details.&lt;br /&gt;
&lt;br /&gt;
This driver is only supported in Moodle 2.0 and up. You should use [https://docs.moodle.org/en/Installing_MSSQL_for_PHP#Using_FreeTDS_on_Windows FreeTDS] if you are installing an older version of Moodle.&lt;br /&gt;
&lt;br /&gt;
See MDL-16497 and MDL-15093 for more background information.&lt;br /&gt;
&lt;br /&gt;
== Using FreeTDS on Windows ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&#039;&#039;&#039;Important Note 1:&#039;&#039;&#039; Due to some previous bugs it&#039;s highly recommendable to use PHP &amp;gt;= 5.2.6 and FreeTDS 0.82 + post-release patches ([http://tracker.moodle.org/browse/MDL-14725 more info]).&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If your web server is on Windows, use &#039;&#039;&#039;php_dblib.dll&#039;&#039;&#039;. Despite the name, it&#039;s FreeTDS compiled for Windows. (Go to this page for information on [https://docs.moodle.org/en/FreeTDS Using FreeTDS for Unix].) &lt;br /&gt;
&lt;br /&gt;
Originally we were using the DLLs available at [http://kromann.info/article.php?Id=11062598797760000 Frank Kromann&#039;s site], but they are outdated (using old versions of FreeTDS) and that has caused [http://tracker.moodle.org/browse/MDL-14725 some problems] in the past.&lt;br /&gt;
&lt;br /&gt;
So, right now, the recommended way to use FreeTDS under Windows is to use PHP 5.2.x following the following instructions:&lt;br /&gt;
&lt;br /&gt;
1. Download the appropriate copy of php_dblib.dll from the list below, and save it into your /PHP/ext directory.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; align=&amp;quot;center&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! PHP version !! [http://www.iis-aid.com/articles/my_word/difference_between_php_thread_safe_and_non_thread_safe_binaries Thread Safe]  !! FreeTDS version !! Download URL&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | PHP 5.2.x (vc6) || Yes || 0.82 + 20090302 patches || [http://download.moodle.org/download.php/dblib/php52/DBLIB_TS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| No || 0.82 + 20090302 patches || [http://download.moodle.org/download.php/dblib/php52/DBLIB_NOTS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | PHP 5.3.x (vc9) || Yes || 0.82 + 20090904 patches || [http://download.moodle.org/download.php/dblib/php53/DBLIB_TS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| No || 0.82 + 20090904 patches || [http://download.moodle.org/download.php/dblib/php53/DBLIB_NOTS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |  Thanks to [http://remote-learner.net/ Remote-Learner]] (Moodle [http://moodle.com/partners/ Partner]) and specially to Bryan Williams, donating one Visual C++ 6.0 Pro license to Moodle. Thanks to Trevor Johnson and his builds of the dblib extensions. Thanks to Daniele, Doug, Luis, Sean and many others by their collaboration in MDL-14725. Thanks to Frediano Ziglio and James K. Lowden from [http://freetds.org freetds.org] by their support. Thanks to Alastair Hole by providing the PHP 5.3 builds of the libraries. Thanks!&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
(alternatively here you can find some [[Development:Compiling FreeTDS under Windows|instructions to build those freetds extensions under win32]] yourself)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. FreeTDS requires the .NET Framework v1.1 to be installed.  You can [http://www.microsoft.com/downloads/details.aspx?FamilyID=262d25e3-f589-4842-8157-034d1e7cf3a3&amp;amp;DisplayLang=en download it from the Microsoft website] along with its [http://www.microsoft.com/downloads/details.aspx?FamilyID=a8f5654f-088e-40b2-bbdb-a83353618b38&amp;amp;DisplayLang=en service pack].  Alternatively, if you do not wish to install this framework, you can [http://kromann.info/ms-libs/msvcr71.dll download the required DLL] from Frank&#039;s site, and save it into your /PHP root directory.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. Edit your /PHP/php.ini file and add this line:&lt;br /&gt;
&lt;br /&gt;
  extension=php_dblib.dll &lt;br /&gt;
&lt;br /&gt;
Make sure that any lines referring to the php_mssql.dll extension are DISABLED (commented out).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. When the PHP engine loads the FreeTDS extension it needs to be passed certain infiormation in order to be able to connect to your Moodle database. To retrieve this information FreeTDS looks for a file called &#039;&#039;&#039;freetds.conf&#039;&#039;&#039; in the root folder of the server that PHP installed on (e.g. C:\).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;freetds.conf&#039;&#039;&#039; should have the following structure:&lt;br /&gt;
&lt;br /&gt;
  [global]&lt;br /&gt;
      host = xxx.xxx.xxx.xxx (host name or ip of the MSSQL server)&lt;br /&gt;
      port = 1433&lt;br /&gt;
      client charset = UTF-8&lt;br /&gt;
      tds version = 8.0&lt;br /&gt;
      text size = 20971520&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want to connect to a particular [http://msdn.microsoft.com/en-us/library/aa174516(SQL.80).aspx instance] of MSSQL you should specify the instance name:&lt;br /&gt;
&lt;br /&gt;
  [global]&lt;br /&gt;
      host = xxx.xxx.xxx.xxx (host name or ip of the MSSQL server)&lt;br /&gt;
      instance = xxx (instance name, e.g. INST2)&lt;br /&gt;
      port = 1433&lt;br /&gt;
      client charset = UTF-8&lt;br /&gt;
      tds version = 8.0&lt;br /&gt;
      text size = 20971520&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
*You can configure FreeTDS to look for the freetds.conf file in any directory that you want - you don&#039;t have to use C:\. To do this create a SYSTEM environment variable called &#039;&#039;&#039;FREETDS&#039;&#039;&#039; and point it to the directory where you have installed the freetds.conf file. If you do not set this environment variable FreeTDS will look for the freetds.conf file in the C:\ folder, which is the default. One possible benefit of setting the FREETDS environment variable and using a different installation directory for freetds.conf is that C:\ is very predictable to a hacker that knows anything about FreeTDS and that is the first place that he would look if he wanted to compromise your system. So, using a different installation directory would just make your system stronger. See the FreeTDS [http://www.freetds.org/userguide/envvar.htm Setting the environment variables] documentation for more information about this FREETDS environment variable.&lt;br /&gt;
&lt;br /&gt;
*Alternatively, you can [[Development:Compiling FreeTDS under Windows|recompile]] the FreeTDS extension yourself and change the default location to your preferred location at compile time. Then it is not necessary to create any environment variable. You must just ensure that freetds.conf is in the same folder that you specify when you compile php_dblib.dll.&lt;br /&gt;
&lt;br /&gt;
*MSSQL is usually installed with port 1433 as the default. However, if the port was changed on your server when you installed MSSQL then you need to specify the correct port number.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5. Your Moodle &#039;&#039;&#039;config.php&#039;&#039;&#039; should include lines like these:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
$CFG-&amp;gt;dbtype    = &#039;mssql_n&#039;;        // Required&lt;br /&gt;
$CFG-&amp;gt;dbhost    = &#039;localhost&#039;;      // assuming MS SQL is on the same server, otherwise use an IP&lt;br /&gt;
$CFG-&amp;gt;dbname    = &#039;moodle&#039;;         // or whatever you called the database you created&lt;br /&gt;
$CFG-&amp;gt;dbuser    = &#039;yourusername&#039;;   // I usually use the &#039;sa&#039; account (dbowner perms are enough)&lt;br /&gt;
$CFG-&amp;gt;dbpass    = &#039;yourpassword&#039;;&lt;br /&gt;
$CFG-&amp;gt;dbpersist =  false;&lt;br /&gt;
$CFG-&amp;gt;prefix    = &#039;mdl_&#039;;            //Prefix, you can change it, but NEVER leave it blank.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t have a config.php file yet, it can be generated as normal from the Moodle installer. Alternatively you can use the config-dist.php file that comes with the Moodle package to create your own config.php file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6. Restart or start your web server.  If Moodle still cannot communicate with the database server, please turn display_startup_errors to &amp;quot;On&amp;quot; in your /PHP/php.ini file, then restart the web server and check for any errors that may indicate incorrect DLL versions or missing dependencies.  These error reports, turned off by default in PHP, can be vital in locating a problem with new extension installations.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
7. Database conection test, try this PHP script, just put in a text file called test.php change (&#039;localhost&#039;, &#039;db_user&#039;, &#039;db_password&#039;) to suite your setup, and load from local host (http://localhost/test.php)...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
	$link = mssql_connect(&#039;localhost&#039;, &#039;db_user&#039;, &#039;db_password&#039;);&lt;br /&gt;
	if(!$link) {&lt;br /&gt;
		echo&#039;Could not connect&#039;;&lt;br /&gt;
		die(&#039;Could not connect: &#039; . mssql_error());&lt;br /&gt;
	}&lt;br /&gt;
	echo&#039;Successful connection&#039;;&lt;br /&gt;
	mssql_close($link);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
8. Install Moodle as usual.  Good luck!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Troubleshooting ===&lt;br /&gt;
If you encounter some problems you can try:&lt;br /&gt;
*check that you have DotNet framework 1.1 installed (later version are installed on Vista, but you could need this specific one)&amp;lt;br /&amp;gt;&lt;br /&gt;
*enable TCP/IP for MSSQL: SQL Server 2005 Network Configuration -&amp;gt; Protocols for MSSQLSERVER -&amp;gt; TCP/IP (Enable) -&amp;gt; Properties -&amp;gt; Ip Addresses -&amp;gt; 127.0.0.1 (Active+Enable)&amp;lt;br /&amp;gt;&lt;br /&gt;
*if you are using SQL Server 2005 and you have the error &#039;&#039;4004: Unicode data in a Unicode-only collation or ntext data cannot be sent to clients using DB-Library (such as ISQL) or ODBC version 3.7 or earlier&#039;&#039;, try the ODBTP method (next chapter). The SQL Server complaining that it doesn&#039;t support pure Unicode via TDS or older versions of ODBC. Microsoft has deprecated DB-Library a long ago, in favor of ODBC, OLE DB, or SQL Native Client. Many new features of SQL 2005 aren&#039;t accessible via DB-Library so if you need them, you could have to switch away from tools based on TDS and DB-Library :(&lt;br /&gt;
&lt;br /&gt;
== FreeTDS on Linux (on Ubuntu by compiling an mssql.so extension) ==&lt;br /&gt;
This is a good read to [http://www.robert-gonzalez.com/2009/02/18/building-the-php-ms-sql-server-extension-from-source-on-ubuntu-810/ building a FreeTDS based mssql extension for apache on Ubuntu]. Do note that [http://www.freetds.org/news.html freeTDS] 0.91 was recently released, you can find latest versions [http://freetds.sourceforge.net/ here]. &lt;br /&gt;
&lt;br /&gt;
Note: the freetds.conf file you use should have &amp;quot;text size = 20971520&amp;quot; as mentioned in the FreeTDS on Windows section otherwise you might see sessions logging out or worse apache segmentation faults. Also see [[FreeTDS]].&lt;br /&gt;
&lt;br /&gt;
== Using FreeTDS on Debian Lenny ==&lt;br /&gt;
I found the following solution using:&lt;br /&gt;
* PHP Version 5.2.6-1+lenny9&lt;br /&gt;
* Microsoft SQL Server Enterprise Edition, version: 9.00.4053.00&lt;br /&gt;
&amp;lt;pre&amp;gt;apt-get install libsybdb5 freetds-common php5-sybase&lt;br /&gt;
/etc/init.d/apache2 restart&amp;lt;/pre&amp;gt;&lt;br /&gt;
At the end of the process, if all goes fine, you will find in the mssql section of phpinfo();&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;nicetable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! MSSQL Support&lt;br /&gt;
! enabled&lt;br /&gt;
|-&lt;br /&gt;
| Library version &lt;br /&gt;
| FreeTDS &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Once FreeTDS is correctly installed, don not forget to set it up following explanations in https://docs.moodle.org/en/FreeTDS&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* [[Installing Moodle]]&lt;br /&gt;
* [[Errors FAQ]]&lt;br /&gt;
* Using Moodle [http://moodle.org/mod/forum/view.php?id=28 Installation problems forum]&lt;br /&gt;
* [[Beginning Administration FAQ]]&lt;br /&gt;
* [[Installing Postgres for PHP]]&lt;br /&gt;
* [[Using the Microsoft SQL Server Driver for PHP]]&lt;br /&gt;
* [[Installing Oracle for PHP]]&lt;br /&gt;
&lt;br /&gt;
[[Category:FAQ]]&lt;br /&gt;
[[Category:Installation]]&lt;br /&gt;
[[Category:Developer]]&lt;br /&gt;
[[Category:XMLDB]]&lt;br /&gt;
[[Category:DB]]&lt;/div&gt;</summary>
		<author><name>Stronk7</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/2x/pl/index.php?title=Using_the_Microsoft_SQL_Server_Driver_for_PHP&amp;diff=89953</id>
		<title>Using the Microsoft SQL Server Driver for PHP</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/2x/pl/index.php?title=Using_the_Microsoft_SQL_Server_Driver_for_PHP&amp;diff=89953"/>
		<updated>2011-09-20T08:19:07Z</updated>

		<summary type="html">&lt;p&gt;Stronk7: /* See Also */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Moodle 2.0}}&lt;br /&gt;
== Using the SQL Server Driver for PHP from Microsoft ==&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
This short manual is for running Moodle 2.0 (and upwards) using the Microsoft SQL Server (MSSQL) RDBMS. The steps detailed below must be performed &#039;&#039;&#039;before&#039;&#039;&#039; installing Moodle itself.&lt;br /&gt;
&lt;br /&gt;
First of all, the minimum required version of MSSQL has been stabilized to MSSQL 2005 (v.9).&lt;br /&gt;
&lt;br /&gt;
== Installation overview ==&lt;br /&gt;
1. Install Microsoft SQL Server including SQL Server Management Studio. ([http://www.microsoft.com/sql/editions/express/default.mspx A free version, SQL Server Express Edition] is available for testing.)&lt;br /&gt;
:Make sure to choose mixed authentication (Windows and local accounts) to keep things simpler later.  Define the &amp;quot;sa&amp;quot; account password when requested (it&#039;s the default System Administrator account which has full access to all databases by default).&lt;br /&gt;
&lt;br /&gt;
2. Configure Windows for MSSQL.&lt;br /&gt;
:By default, MSSQL listens to port 1433 for incoming TCP/IP connections and this port needs to be opened in the firewall. This is explicitly configured in the firewall installed (either Windows Firewall in the Control Panel or the configuration interface for other firewalls). If the port was changed when MSSQL was installed, then specify the correct port number to open in the firewall.&lt;br /&gt;
:Confirm the TCP/IP protocol is enabled in: &#039;&#039;&#039;SQL Server Configuration Manager&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Network Configuration&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Protocols&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;TCP/IP enabled&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
3. Create and configure a new database.&lt;br /&gt;
:Open &amp;quot;SQL Server Management Studio&amp;quot; and create a new empty database.&lt;br /&gt;
*Execute the following command to enable Row Versioning:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 USE MASTER&lt;br /&gt;
 GO&lt;br /&gt;
 ALTER DATABASE &amp;amp;lt;your-database-name&amp;amp;gt; SET READ_COMMITTED_SNAPSHOT ON&lt;br /&gt;
 GO&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Install PHP and a web server.&lt;br /&gt;
*PHP can be downloaded from [http://www.php.net/downloads.php www.php.net]&lt;br /&gt;
*If IIS is used as the web server, IIS 7.0 or later is recommended with [http://www.iis.net/download FastCGI and WinCache]. &lt;br /&gt;
&lt;br /&gt;
5. Install the SQL Server Driver for PHP.&lt;br /&gt;
:On the web server, install [http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=ccdf728b-1ea0-48a8-a84a-5052214caad9 SQL Server Driver for PHP] (minimum version required is v1.1) including all the pre-requisites listed on the download page. Note: it is critical to install the SQL Server Native Access Client version documented on the download page of the SQL Server Driver for PHP.&lt;br /&gt;
:Configure PHP to use the appropriate SQLSRV driver. In php.ini, set the following:&lt;br /&gt;
&lt;br /&gt;
For PHP 5.2.4 (or later)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 [PHP_SQLSRV]&lt;br /&gt;
 extension=php_sqlsrv_52_nts_vc9.dll&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For PHP 5.3.2 (or later)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 [PHP_SQLSRV]&lt;br /&gt;
 extension=php_sqlsrv_53_nts_vc9.dll&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Microsoft documentation for the SQL Server Driver for PHP is available at: http://msdn.microsoft.com/en-us/library/ee229548(v=SQL.10).aspx &lt;br /&gt;
&lt;br /&gt;
6. Install and configure Moodle.&lt;br /&gt;
:Continue with the [[Installing Moodle|standard Moodle installation]].&lt;br /&gt;
&lt;br /&gt;
7. The Moodle &#039;&#039;&#039;config.php&#039;&#039;&#039; should include lines like these:&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
$CFG-&amp;gt;dbtype    = &#039;sqlsrv&#039;;         // Required&lt;br /&gt;
$CFG-&amp;gt;dbhost    = &#039;localhost&#039;;      // Assuming that MSSQL is on the same server, otherwise &lt;br /&gt;
                                    // use the actual name or IP address of your database server&lt;br /&gt;
$CFG-&amp;gt;dbname    = &#039;moodle&#039;;         // The name of the newly created Moodle database&lt;br /&gt;
$CFG-&amp;gt;dbuser    = &#039;yourusername&#039;;   // Usually the &#039;sa&#039; account (dbowner perms are enough)&lt;br /&gt;
$CFG-&amp;gt;dbpass    = &#039;yourpassword&#039;;&lt;br /&gt;
$CFG-&amp;gt;dbpersist =  true;&lt;br /&gt;
$CFG-&amp;gt;prefix    = &#039;mdl_&#039;;           // The prefix can be changed per individual preferences, &lt;br /&gt;
                                    // but NEVER leave this blank!&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:If the config.php file doesn&#039;t exist, it will be generated as normal from the Moodle installer. Alternatively, use the config-dist.php file that comes with the Moodle package to create a custom config.php file.&lt;br /&gt;
&lt;br /&gt;
8. Restart or start your web server.&lt;br /&gt;
:If Moodle still cannot communicate with the database server, turn &#039;&#039;&#039;display_startup_errors&#039;&#039;&#039; to &amp;quot;On&amp;quot; in the /PHP/php.ini file, then restart the web server and check for any errors that may indicate incorrect DLL versions or missing dependencies.  These error reports, turned off by default in PHP, can be vital in locating a problem with new extension installations.&lt;br /&gt;
&lt;br /&gt;
9. Test the database connection.&lt;br /&gt;
:Try this PHP script, just add a text file called test.php from the example below and change (&#039;localhost&#039;, &#039;db_user&#039;, &#039;db_password&#039;) to align with the config.php settings, and load from local host (http://localhost/test.php).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$link = sqlsrv_connect($this-&amp;gt;dbhost, array(&#039;UID&#039; =&amp;gt; &#039;db_user&#039;, &#039;PWD&#039; =&amp;gt; &#039;db_password&#039;));&lt;br /&gt;
if($link === FALSE) {&lt;br /&gt;
    echo &#039;Could not connect&#039;;&lt;br /&gt;
    die(&#039;Could not connect: &#039; . sqlsrv_errors(SQLSRV_ERR_ALL));&lt;br /&gt;
}&lt;br /&gt;
echo &#039;Successful connection&#039;;&lt;br /&gt;
sqlsrv_close($link);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
10. Complete the rest of the Moodle installation as usual.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* [[Installing Moodle]]&lt;br /&gt;
* [[Errors FAQ]]&lt;br /&gt;
* Using Moodle [http://moodle.org/mod/forum/view.php?id=28 Installation problems forum]&lt;br /&gt;
* [[Beginning Administration FAQ]]&lt;br /&gt;
* [[Installing Oracle for PHP]]&lt;br /&gt;
* [[Installing MSSQL for PHP]]&lt;br /&gt;
&lt;br /&gt;
[[Category:FAQ]]&lt;br /&gt;
[[Category:Installation]]&lt;br /&gt;
[[Category:Developer]]&lt;br /&gt;
[[Category:XMLDB]]&lt;br /&gt;
[[Category:DB]]&lt;/div&gt;</summary>
		<author><name>Stronk7</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/2x/pl/index.php?title=Installing_MSSQL_for_PHP&amp;diff=89952</id>
		<title>Installing MSSQL for PHP</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/2x/pl/index.php?title=Installing_MSSQL_for_PHP&amp;diff=89952"/>
		<updated>2011-09-20T08:18:36Z</updated>

		<summary type="html">&lt;p&gt;Stronk7: /* See Also */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
This short manual is suitable if you are trying to run Moodle using the SQL*Server (MSSQL) RDBMS. Steps detailed below must be performed &#039;&#039;&#039;before&#039;&#039;&#039; installing Moodle itself.&lt;br /&gt;
&lt;br /&gt;
Some of this may also apply if you wish to access an MSSQL server for external db authentication/enrollment. &lt;br /&gt;
&lt;br /&gt;
First of all, minimum required version of MSSQL has been stabilised to MSSQL 2005 (v.9), although it &#039;&#039;&#039;might work with MSSQL 2000 (v.8) or newer&#039;&#039;&#039;. All the development process has been performed using MSSQL 2005 and there could be some &#039;&#039;&#039;unknown problems&#039;&#039;&#039; with previous releases.&lt;br /&gt;
&lt;br /&gt;
While PHP comes with one, more or less, standard extension (mssql) that provides access to MSSQL databases, early we found some hard limits on it. Basically such default extension has some limits that prevent us to use it at all (you can find more info about these problems [[Development:XMLDB problems#MSSQL, PHP, UTF-8 and UCS-2|here]]).&lt;br /&gt;
&lt;br /&gt;
So, in order to allow PHP (i.e. Moodle) to access to MSSQL DBs properly we have to install a &#039;&#039;&#039;mssql extension alternative&#039;&#039;&#039; to save us from the problems related above. See the sections below for details about the various options.&lt;br /&gt;
&lt;br /&gt;
== Installation overview ==&lt;br /&gt;
&lt;br /&gt;
1. Get MSSQL Server installed and running. ([http://www.microsoft.com/sql/editions/express/default.mspx A free limited version, SQL Server Express Edition] is available for testing.)&lt;br /&gt;
:Make sure that you choose mixed authentication (Windows and local accounts) to keep things simpler later.  You&#039;ll be asked to define the  &amp;quot;sa&amp;quot; account password (it&#039;s the default System Administrator account which has full access to all databases by default).&lt;br /&gt;
&lt;br /&gt;
2. Make sure MS SQL Server can accept incoming TCP/IP connections on port 1433 (the standard one).&lt;br /&gt;
:You might need to explicitly allow this in your Windows firewall (see the Control Panel).  You may also need to edit options in the :&#039;&#039;&#039;SQL Server Configuration Manager&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Network Configuration&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Protocols&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;TCP/IP enabled&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
3. Open the &amp;quot;SQL Server Management Studio&amp;quot; and create a new empty database.  If you are using the &amp;quot;sa&amp;quot; account then you don&#039;t need to do anything else here.&lt;br /&gt;
&lt;br /&gt;
4. Configure these settings in your created (and still empty) database:&lt;br /&gt;
&lt;br /&gt;
:* ANSI NULLS Enabled = true (ALTER DATABASE xxxx SET ANSI_NULLS ON)&lt;br /&gt;
:* Quoted Identifiers Enabled = true (ALTER DATABASE xxxx SET QUOTED_IDENTIFIER ON)&lt;br /&gt;
:* Moodle 2.0 only: Row Versioning Enabled (ALTER DATABASE xxxx SET READ_COMMITTED_SNAPSHOT ON) - To set READ_COMMITTED_SNAPSHOT ON (or OFF), there must be no active connections to the database except for the connection executing the ALTER DATABASE command. See http://msdn.microsoft.com/en-us/library/bb522682.aspx&lt;br /&gt;
&lt;br /&gt;
5. Get PHP installed with a web server.   Unless you want to do it under IIS or some other way, the packages on the [http://download.moodle.org Moodle download page] are a good solution.&lt;br /&gt;
&lt;br /&gt;
6. Choose one of the following specific sections for your server to install the &#039;&#039;&#039;mssql extension alternative&#039;&#039;&#039; installed and running properly on your PHP box.&lt;br /&gt;
&lt;br /&gt;
7. Set the following settings in your php.ini file&lt;br /&gt;
:* mssql.textlimit = 20971520&lt;br /&gt;
:* mssql.textsize = 20971520&lt;br /&gt;
&lt;br /&gt;
8. With all this properly configured, you can continue with a [[Installing Moodle|standard Moodle installation]].&lt;br /&gt;
&lt;br /&gt;
== Using the SQL Server 2005 Driver for PHP from Microsoft on Windows ==&lt;br /&gt;
In July 2008 Microsoft [http://social.msdn.microsoft.com/forums/en-US/sqldriverforphp/thread/a10e5202-9e41-4ff8-a33e-fbcc7b951be2/ released] a new SQL Server 2005 Driver for PHP. This is a PHP extension that allows PHP scripts to read and write data on Microsoft SQL Server databases and it overcomes the problems with the native SQL Server extension that was previously bundled with PHP.&lt;br /&gt;
&lt;br /&gt;
This Microsoft driver is the standard database layer for running Moodle 2 under Microsoft SQL Server databases. See [[Using the Microsoft SQL Server Driver for PHP]] the installation and configuration details.&lt;br /&gt;
&lt;br /&gt;
This driver is only supported in Moodle 2.0 and up. You should use [https://docs.moodle.org/en/Installing_MSSQL_for_PHP#Using_FreeTDS_on_Windows FreeTDS] if you are installing an older version of Moodle.&lt;br /&gt;
&lt;br /&gt;
See MDL-16497 and MDL-15093 for more background information.&lt;br /&gt;
&lt;br /&gt;
== Using FreeTDS on Windows ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&#039;&#039;&#039;Important Note 1:&#039;&#039;&#039; Due to some previous bugs it&#039;s highly recommendable to use PHP &amp;gt;= 5.2.6 and FreeTDS 0.82 + post-release patches ([http://tracker.moodle.org/browse/MDL-14725 more info]).&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If your web server is on Windows, use &#039;&#039;&#039;php_dblib.dll&#039;&#039;&#039;. Despite the name, it&#039;s FreeTDS compiled for Windows. (Go to this page for information on [https://docs.moodle.org/en/FreeTDS Using FreeTDS for Unix].) &lt;br /&gt;
&lt;br /&gt;
Originally we were using the DLLs available at [http://kromann.info/article.php?Id=11062598797760000 Frank Kromann&#039;s site], but they are outdated (using old versions of FreeTDS) and that has caused [http://tracker.moodle.org/browse/MDL-14725 some problems] in the past.&lt;br /&gt;
&lt;br /&gt;
So, right now, the recommended way to use FreeTDS under Windows is to use PHP 5.2.x following the following instructions:&lt;br /&gt;
&lt;br /&gt;
1. Download the appropriate copy of php_dblib.dll from the list below, and save it into your /PHP/ext directory.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; align=&amp;quot;center&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! PHP version !! [http://www.iis-aid.com/articles/my_word/difference_between_php_thread_safe_and_non_thread_safe_binaries Thread Safe]  !! FreeTDS version !! Download URL&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | PHP 5.2.x (vc6) || Yes || 0.82 + 20090302 patches || [http://download.moodle.org/download.php/dblib/php52/DBLIB_TS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| No || 0.82 + 20090302 patches || [http://download.moodle.org/download.php/dblib/php52/DBLIB_NOTS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | PHP 5.3.x (vc9) || Yes || 0.82 + 20090904 patches || [http://download.moodle.org/download.php/dblib/php53/DBLIB_TS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| No || 0.82 + 20090904 patches || [http://download.moodle.org/download.php/dblib/php53/DBLIB_NOTS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |  Thanks to [http://remote-learner.net/ Remote-Learner]] (Moodle [http://moodle.com/partners/ Partner]) and specially to Bryan Williams, donating one Visual C++ 6.0 Pro license to Moodle. Thanks to Trevor Johnson and his builds of the dblib extensions. Thanks to Daniele, Doug, Luis, Sean and many others by their collaboration in MDL-14725. Thanks to Frediano Ziglio and James K. Lowden from [http://freetds.org freetds.org] by their support. Thanks to Alastair Hole by providing the PHP 5.3 builds of the libraries. Thanks!&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
(alternatively here you can find some [[Development:Compiling FreeTDS under Windows|instructions to build those freetds extensions under win32]] yourself)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. FreeTDS requires the .NET Framework v1.1 to be installed.  You can [http://www.microsoft.com/downloads/details.aspx?FamilyID=262d25e3-f589-4842-8157-034d1e7cf3a3&amp;amp;DisplayLang=en download it from the Microsoft website] along with its [http://www.microsoft.com/downloads/details.aspx?FamilyID=a8f5654f-088e-40b2-bbdb-a83353618b38&amp;amp;DisplayLang=en service pack].  Alternatively, if you do not wish to install this framework, you can [http://kromann.info/ms-libs/msvcr71.dll download the required DLL] from Frank&#039;s site, and save it into your /PHP root directory.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. Edit your /PHP/php.ini file and add this line:&lt;br /&gt;
&lt;br /&gt;
  extension=php_dblib.dll &lt;br /&gt;
&lt;br /&gt;
Make sure that any lines referring to the php_mssql.dll extension are DISABLED (commented out).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. When the PHP engine loads the FreeTDS extension it needs to be passed certain infiormation in order to be able to connect to your Moodle database. To retrieve this information FreeTDS looks for a file called &#039;&#039;&#039;freetds.conf&#039;&#039;&#039; in the root folder of the server that PHP installed on (e.g. C:\).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;freetds.conf&#039;&#039;&#039; should have the following structure:&lt;br /&gt;
&lt;br /&gt;
  [global]&lt;br /&gt;
      host = xxx.xxx.xxx.xxx (host name or ip of the MSSQL server)&lt;br /&gt;
      port = 1433&lt;br /&gt;
      client charset = UTF-8&lt;br /&gt;
      tds version = 8.0&lt;br /&gt;
      text size = 20971520&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want to connect to a particular [http://msdn.microsoft.com/en-us/library/aa174516(SQL.80).aspx instance] of MSSQL you should specify the instance name:&lt;br /&gt;
&lt;br /&gt;
  [global]&lt;br /&gt;
      host = xxx.xxx.xxx.xxx (host name or ip of the MSSQL server)&lt;br /&gt;
      instance = xxx (instance name, e.g. INST2)&lt;br /&gt;
      port = 1433&lt;br /&gt;
      client charset = UTF-8&lt;br /&gt;
      tds version = 8.0&lt;br /&gt;
      text size = 20971520&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
*You can configure FreeTDS to look for the freetds.conf file in any directory that you want - you don&#039;t have to use C:\. To do this create a SYSTEM environment variable called &#039;&#039;&#039;FREETDS&#039;&#039;&#039; and point it to the directory where you have installed the freetds.conf file. If you do not set this environment variable FreeTDS will look for the freetds.conf file in the C:\ folder, which is the default. One possible benefit of setting the FREETDS environment variable and using a different installation directory for freetds.conf is that C:\ is very predictable to a hacker that knows anything about FreeTDS and that is the first place that he would look if he wanted to compromise your system. So, using a different installation directory would just make your system stronger. See the FreeTDS [http://www.freetds.org/userguide/envvar.htm Setting the environment variables] documentation for more information about this FREETDS environment variable.&lt;br /&gt;
&lt;br /&gt;
*Alternatively, you can [[Development:Compiling FreeTDS under Windows|recompile]] the FreeTDS extension yourself and change the default location to your preferred location at compile time. Then it is not necessary to create any environment variable. You must just ensure that freetds.conf is in the same folder that you specify when you compile php_dblib.dll.&lt;br /&gt;
&lt;br /&gt;
*MSSQL is usually installed with port 1433 as the default. However, if the port was changed on your server when you installed MSSQL then you need to specify the correct port number.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5. Your Moodle &#039;&#039;&#039;config.php&#039;&#039;&#039; should include lines like these:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
$CFG-&amp;gt;dbtype    = &#039;mssql_n&#039;;        // Required&lt;br /&gt;
$CFG-&amp;gt;dbhost    = &#039;localhost&#039;;      // assuming MS SQL is on the same server, otherwise use an IP&lt;br /&gt;
$CFG-&amp;gt;dbname    = &#039;moodle&#039;;         // or whatever you called the database you created&lt;br /&gt;
$CFG-&amp;gt;dbuser    = &#039;yourusername&#039;;   // I usually use the &#039;sa&#039; account (dbowner perms are enough)&lt;br /&gt;
$CFG-&amp;gt;dbpass    = &#039;yourpassword&#039;;&lt;br /&gt;
$CFG-&amp;gt;dbpersist =  false;&lt;br /&gt;
$CFG-&amp;gt;prefix    = &#039;mdl_&#039;;            //Prefix, you can change it, but NEVER leave it blank.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t have a config.php file yet, it can be generated as normal from the Moodle installer. Alternatively you can use the config-dist.php file that comes with the Moodle package to create your own config.php file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6. Restart or start your web server.  If Moodle still cannot communicate with the database server, please turn display_startup_errors to &amp;quot;On&amp;quot; in your /PHP/php.ini file, then restart the web server and check for any errors that may indicate incorrect DLL versions or missing dependencies.  These error reports, turned off by default in PHP, can be vital in locating a problem with new extension installations.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
7. Database conection test, try this PHP script, just put in a text file called test.php change (&#039;localhost&#039;, &#039;db_user&#039;, &#039;db_password&#039;) to suite your setup, and load from local host (http://localhost/test.php)...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
	$link = mssql_connect(&#039;localhost&#039;, &#039;db_user&#039;, &#039;db_password&#039;);&lt;br /&gt;
	if(!$link) {&lt;br /&gt;
		echo&#039;Could not connect&#039;;&lt;br /&gt;
		die(&#039;Could not connect: &#039; . mssql_error());&lt;br /&gt;
	}&lt;br /&gt;
	echo&#039;Successful connection&#039;;&lt;br /&gt;
	mssql_close($link);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
8. Install Moodle as usual.  Good luck!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Troubleshooting ===&lt;br /&gt;
If you encounter some problems you can try:&lt;br /&gt;
*check that you have DotNet framework 1.1 installed (later version are installed on Vista, but you could need this specific one)&amp;lt;br /&amp;gt;&lt;br /&gt;
*enable TCP/IP for MSSQL: SQL Server 2005 Network Configuration -&amp;gt; Protocols for MSSQLSERVER -&amp;gt; TCP/IP (Enable) -&amp;gt; Properties -&amp;gt; Ip Addresses -&amp;gt; 127.0.0.1 (Active+Enable)&amp;lt;br /&amp;gt;&lt;br /&gt;
*if you are using SQL Server 2005 and you have the error &#039;&#039;4004: Unicode data in a Unicode-only collation or ntext data cannot be sent to clients using DB-Library (such as ISQL) or ODBC version 3.7 or earlier&#039;&#039;, try the ODBTP method (next chapter). The SQL Server complaining that it doesn&#039;t support pure Unicode via TDS or older versions of ODBC. Microsoft has deprecated DB-Library a long ago, in favor of ODBC, OLE DB, or SQL Native Client. Many new features of SQL 2005 aren&#039;t accessible via DB-Library so if you need them, you could have to switch away from tools based on TDS and DB-Library :(&lt;br /&gt;
&lt;br /&gt;
== FreeTDS on Linux (on Ubuntu by compiling an mssql.so extension) ==&lt;br /&gt;
This is a good read to [http://www.robert-gonzalez.com/2009/02/18/building-the-php-ms-sql-server-extension-from-source-on-ubuntu-810/ building a FreeTDS based mssql extension for apache on Ubuntu]. Do note that [http://www.freetds.org/news.html freeTDS] 0.91 was recently released, you can find latest versions [http://freetds.sourceforge.net/ here]. &lt;br /&gt;
&lt;br /&gt;
Note: the freetds.conf file you use should have &amp;quot;text size = 20971520&amp;quot; as mentioned in the FreeTDS on Windows section otherwise you might see sessions logging out or worse apache segmentation faults. Also see [[FreeTDS]].&lt;br /&gt;
&lt;br /&gt;
== Using FreeTDS on Debian Lenny ==&lt;br /&gt;
I found the following solution using:&lt;br /&gt;
* PHP Version 5.2.6-1+lenny9&lt;br /&gt;
* Microsoft SQL Server Enterprise Edition, version: 9.00.4053.00&lt;br /&gt;
&amp;lt;pre&amp;gt;apt-get install libsybdb5 freetds-common php5-sybase&lt;br /&gt;
/etc/init.d/apache2 restart&amp;lt;/pre&amp;gt;&lt;br /&gt;
At the end of the process, if all goes fine, you will find in the mssql section of phpinfo();&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;nicetable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! MSSQL Support&lt;br /&gt;
! enabled&lt;br /&gt;
|-&lt;br /&gt;
| Library version &lt;br /&gt;
| FreeTDS &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Once FreeTDS is correctly installed, don not forget to set it up following explanations in https://docs.moodle.org/en/FreeTDS&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* [[Installing Moodle]]&lt;br /&gt;
* [[Errors FAQ]]&lt;br /&gt;
* Using Moodle [http://moodle.org/mod/forum/view.php?id=28 Installation problems forum]&lt;br /&gt;
* [[Beginning Administration FAQ]]&lt;br /&gt;
* [[Installing Oracle for PHP]]&lt;br /&gt;
* [[Using the Microsoft SQL Server Driver for PHP]]&lt;br /&gt;
&lt;br /&gt;
[[Category:FAQ]]&lt;br /&gt;
[[Category:Installation]]&lt;br /&gt;
[[Category:Developer]]&lt;br /&gt;
[[Category:XMLDB]]&lt;br /&gt;
[[Category:DB]]&lt;/div&gt;</summary>
		<author><name>Stronk7</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/2x/pl/index.php?title=Installing_MSSQL_for_PHP&amp;diff=89951</id>
		<title>Installing MSSQL for PHP</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/2x/pl/index.php?title=Installing_MSSQL_for_PHP&amp;diff=89951"/>
		<updated>2011-09-20T08:17:38Z</updated>

		<summary type="html">&lt;p&gt;Stronk7: deleting info not needed in 2.x anymore&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
This short manual is suitable if you are trying to run Moodle using the SQL*Server (MSSQL) RDBMS. Steps detailed below must be performed &#039;&#039;&#039;before&#039;&#039;&#039; installing Moodle itself.&lt;br /&gt;
&lt;br /&gt;
Some of this may also apply if you wish to access an MSSQL server for external db authentication/enrollment. &lt;br /&gt;
&lt;br /&gt;
First of all, minimum required version of MSSQL has been stabilised to MSSQL 2005 (v.9), although it &#039;&#039;&#039;might work with MSSQL 2000 (v.8) or newer&#039;&#039;&#039;. All the development process has been performed using MSSQL 2005 and there could be some &#039;&#039;&#039;unknown problems&#039;&#039;&#039; with previous releases.&lt;br /&gt;
&lt;br /&gt;
While PHP comes with one, more or less, standard extension (mssql) that provides access to MSSQL databases, early we found some hard limits on it. Basically such default extension has some limits that prevent us to use it at all (you can find more info about these problems [[Development:XMLDB problems#MSSQL, PHP, UTF-8 and UCS-2|here]]).&lt;br /&gt;
&lt;br /&gt;
So, in order to allow PHP (i.e. Moodle) to access to MSSQL DBs properly we have to install a &#039;&#039;&#039;mssql extension alternative&#039;&#039;&#039; to save us from the problems related above. See the sections below for details about the various options.&lt;br /&gt;
&lt;br /&gt;
== Installation overview ==&lt;br /&gt;
&lt;br /&gt;
1. Get MSSQL Server installed and running. ([http://www.microsoft.com/sql/editions/express/default.mspx A free limited version, SQL Server Express Edition] is available for testing.)&lt;br /&gt;
:Make sure that you choose mixed authentication (Windows and local accounts) to keep things simpler later.  You&#039;ll be asked to define the  &amp;quot;sa&amp;quot; account password (it&#039;s the default System Administrator account which has full access to all databases by default).&lt;br /&gt;
&lt;br /&gt;
2. Make sure MS SQL Server can accept incoming TCP/IP connections on port 1433 (the standard one).&lt;br /&gt;
:You might need to explicitly allow this in your Windows firewall (see the Control Panel).  You may also need to edit options in the :&#039;&#039;&#039;SQL Server Configuration Manager&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Network Configuration&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Protocols&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;TCP/IP enabled&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
3. Open the &amp;quot;SQL Server Management Studio&amp;quot; and create a new empty database.  If you are using the &amp;quot;sa&amp;quot; account then you don&#039;t need to do anything else here.&lt;br /&gt;
&lt;br /&gt;
4. Configure these settings in your created (and still empty) database:&lt;br /&gt;
&lt;br /&gt;
:* ANSI NULLS Enabled = true (ALTER DATABASE xxxx SET ANSI_NULLS ON)&lt;br /&gt;
:* Quoted Identifiers Enabled = true (ALTER DATABASE xxxx SET QUOTED_IDENTIFIER ON)&lt;br /&gt;
:* Moodle 2.0 only: Row Versioning Enabled (ALTER DATABASE xxxx SET READ_COMMITTED_SNAPSHOT ON) - To set READ_COMMITTED_SNAPSHOT ON (or OFF), there must be no active connections to the database except for the connection executing the ALTER DATABASE command. See http://msdn.microsoft.com/en-us/library/bb522682.aspx&lt;br /&gt;
&lt;br /&gt;
5. Get PHP installed with a web server.   Unless you want to do it under IIS or some other way, the packages on the [http://download.moodle.org Moodle download page] are a good solution.&lt;br /&gt;
&lt;br /&gt;
6. Choose one of the following specific sections for your server to install the &#039;&#039;&#039;mssql extension alternative&#039;&#039;&#039; installed and running properly on your PHP box.&lt;br /&gt;
&lt;br /&gt;
7. Set the following settings in your php.ini file&lt;br /&gt;
:* mssql.textlimit = 20971520&lt;br /&gt;
:* mssql.textsize = 20971520&lt;br /&gt;
&lt;br /&gt;
8. With all this properly configured, you can continue with a [[Installing Moodle|standard Moodle installation]].&lt;br /&gt;
&lt;br /&gt;
== Using the SQL Server 2005 Driver for PHP from Microsoft on Windows ==&lt;br /&gt;
In July 2008 Microsoft [http://social.msdn.microsoft.com/forums/en-US/sqldriverforphp/thread/a10e5202-9e41-4ff8-a33e-fbcc7b951be2/ released] a new SQL Server 2005 Driver for PHP. This is a PHP extension that allows PHP scripts to read and write data on Microsoft SQL Server databases and it overcomes the problems with the native SQL Server extension that was previously bundled with PHP.&lt;br /&gt;
&lt;br /&gt;
This Microsoft driver is the standard database layer for running Moodle 2 under Microsoft SQL Server databases. See [[Using the Microsoft SQL Server Driver for PHP]] the installation and configuration details.&lt;br /&gt;
&lt;br /&gt;
This driver is only supported in Moodle 2.0 and up. You should use [https://docs.moodle.org/en/Installing_MSSQL_for_PHP#Using_FreeTDS_on_Windows FreeTDS] if you are installing an older version of Moodle.&lt;br /&gt;
&lt;br /&gt;
See MDL-16497 and MDL-15093 for more background information.&lt;br /&gt;
&lt;br /&gt;
== Using FreeTDS on Windows ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&#039;&#039;&#039;Important Note 1:&#039;&#039;&#039; Due to some previous bugs it&#039;s highly recommendable to use PHP &amp;gt;= 5.2.6 and FreeTDS 0.82 + post-release patches ([http://tracker.moodle.org/browse/MDL-14725 more info]).&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If your web server is on Windows, use &#039;&#039;&#039;php_dblib.dll&#039;&#039;&#039;. Despite the name, it&#039;s FreeTDS compiled for Windows. (Go to this page for information on [https://docs.moodle.org/en/FreeTDS Using FreeTDS for Unix].) &lt;br /&gt;
&lt;br /&gt;
Originally we were using the DLLs available at [http://kromann.info/article.php?Id=11062598797760000 Frank Kromann&#039;s site], but they are outdated (using old versions of FreeTDS) and that has caused [http://tracker.moodle.org/browse/MDL-14725 some problems] in the past.&lt;br /&gt;
&lt;br /&gt;
So, right now, the recommended way to use FreeTDS under Windows is to use PHP 5.2.x following the following instructions:&lt;br /&gt;
&lt;br /&gt;
1. Download the appropriate copy of php_dblib.dll from the list below, and save it into your /PHP/ext directory.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; align=&amp;quot;center&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! PHP version !! [http://www.iis-aid.com/articles/my_word/difference_between_php_thread_safe_and_non_thread_safe_binaries Thread Safe]  !! FreeTDS version !! Download URL&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | PHP 5.2.x (vc6) || Yes || 0.82 + 20090302 patches || [http://download.moodle.org/download.php/dblib/php52/DBLIB_TS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| No || 0.82 + 20090302 patches || [http://download.moodle.org/download.php/dblib/php52/DBLIB_NOTS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | PHP 5.3.x (vc9) || Yes || 0.82 + 20090904 patches || [http://download.moodle.org/download.php/dblib/php53/DBLIB_TS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| No || 0.82 + 20090904 patches || [http://download.moodle.org/download.php/dblib/php53/DBLIB_NOTS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |  Thanks to [http://remote-learner.net/ Remote-Learner]] (Moodle [http://moodle.com/partners/ Partner]) and specially to Bryan Williams, donating one Visual C++ 6.0 Pro license to Moodle. Thanks to Trevor Johnson and his builds of the dblib extensions. Thanks to Daniele, Doug, Luis, Sean and many others by their collaboration in MDL-14725. Thanks to Frediano Ziglio and James K. Lowden from [http://freetds.org freetds.org] by their support. Thanks to Alastair Hole by providing the PHP 5.3 builds of the libraries. Thanks!&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
(alternatively here you can find some [[Development:Compiling FreeTDS under Windows|instructions to build those freetds extensions under win32]] yourself)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. FreeTDS requires the .NET Framework v1.1 to be installed.  You can [http://www.microsoft.com/downloads/details.aspx?FamilyID=262d25e3-f589-4842-8157-034d1e7cf3a3&amp;amp;DisplayLang=en download it from the Microsoft website] along with its [http://www.microsoft.com/downloads/details.aspx?FamilyID=a8f5654f-088e-40b2-bbdb-a83353618b38&amp;amp;DisplayLang=en service pack].  Alternatively, if you do not wish to install this framework, you can [http://kromann.info/ms-libs/msvcr71.dll download the required DLL] from Frank&#039;s site, and save it into your /PHP root directory.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. Edit your /PHP/php.ini file and add this line:&lt;br /&gt;
&lt;br /&gt;
  extension=php_dblib.dll &lt;br /&gt;
&lt;br /&gt;
Make sure that any lines referring to the php_mssql.dll extension are DISABLED (commented out).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. When the PHP engine loads the FreeTDS extension it needs to be passed certain infiormation in order to be able to connect to your Moodle database. To retrieve this information FreeTDS looks for a file called &#039;&#039;&#039;freetds.conf&#039;&#039;&#039; in the root folder of the server that PHP installed on (e.g. C:\).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;freetds.conf&#039;&#039;&#039; should have the following structure:&lt;br /&gt;
&lt;br /&gt;
  [global]&lt;br /&gt;
      host = xxx.xxx.xxx.xxx (host name or ip of the MSSQL server)&lt;br /&gt;
      port = 1433&lt;br /&gt;
      client charset = UTF-8&lt;br /&gt;
      tds version = 8.0&lt;br /&gt;
      text size = 20971520&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want to connect to a particular [http://msdn.microsoft.com/en-us/library/aa174516(SQL.80).aspx instance] of MSSQL you should specify the instance name:&lt;br /&gt;
&lt;br /&gt;
  [global]&lt;br /&gt;
      host = xxx.xxx.xxx.xxx (host name or ip of the MSSQL server)&lt;br /&gt;
      instance = xxx (instance name, e.g. INST2)&lt;br /&gt;
      port = 1433&lt;br /&gt;
      client charset = UTF-8&lt;br /&gt;
      tds version = 8.0&lt;br /&gt;
      text size = 20971520&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
*You can configure FreeTDS to look for the freetds.conf file in any directory that you want - you don&#039;t have to use C:\. To do this create a SYSTEM environment variable called &#039;&#039;&#039;FREETDS&#039;&#039;&#039; and point it to the directory where you have installed the freetds.conf file. If you do not set this environment variable FreeTDS will look for the freetds.conf file in the C:\ folder, which is the default. One possible benefit of setting the FREETDS environment variable and using a different installation directory for freetds.conf is that C:\ is very predictable to a hacker that knows anything about FreeTDS and that is the first place that he would look if he wanted to compromise your system. So, using a different installation directory would just make your system stronger. See the FreeTDS [http://www.freetds.org/userguide/envvar.htm Setting the environment variables] documentation for more information about this FREETDS environment variable.&lt;br /&gt;
&lt;br /&gt;
*Alternatively, you can [[Development:Compiling FreeTDS under Windows|recompile]] the FreeTDS extension yourself and change the default location to your preferred location at compile time. Then it is not necessary to create any environment variable. You must just ensure that freetds.conf is in the same folder that you specify when you compile php_dblib.dll.&lt;br /&gt;
&lt;br /&gt;
*MSSQL is usually installed with port 1433 as the default. However, if the port was changed on your server when you installed MSSQL then you need to specify the correct port number.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5. Your Moodle &#039;&#039;&#039;config.php&#039;&#039;&#039; should include lines like these:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
$CFG-&amp;gt;dbtype    = &#039;mssql_n&#039;;        // Required&lt;br /&gt;
$CFG-&amp;gt;dbhost    = &#039;localhost&#039;;      // assuming MS SQL is on the same server, otherwise use an IP&lt;br /&gt;
$CFG-&amp;gt;dbname    = &#039;moodle&#039;;         // or whatever you called the database you created&lt;br /&gt;
$CFG-&amp;gt;dbuser    = &#039;yourusername&#039;;   // I usually use the &#039;sa&#039; account (dbowner perms are enough)&lt;br /&gt;
$CFG-&amp;gt;dbpass    = &#039;yourpassword&#039;;&lt;br /&gt;
$CFG-&amp;gt;dbpersist =  false;&lt;br /&gt;
$CFG-&amp;gt;prefix    = &#039;mdl_&#039;;            //Prefix, you can change it, but NEVER leave it blank.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t have a config.php file yet, it can be generated as normal from the Moodle installer. Alternatively you can use the config-dist.php file that comes with the Moodle package to create your own config.php file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6. Restart or start your web server.  If Moodle still cannot communicate with the database server, please turn display_startup_errors to &amp;quot;On&amp;quot; in your /PHP/php.ini file, then restart the web server and check for any errors that may indicate incorrect DLL versions or missing dependencies.  These error reports, turned off by default in PHP, can be vital in locating a problem with new extension installations.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
7. Database conection test, try this PHP script, just put in a text file called test.php change (&#039;localhost&#039;, &#039;db_user&#039;, &#039;db_password&#039;) to suite your setup, and load from local host (http://localhost/test.php)...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
	$link = mssql_connect(&#039;localhost&#039;, &#039;db_user&#039;, &#039;db_password&#039;);&lt;br /&gt;
	if(!$link) {&lt;br /&gt;
		echo&#039;Could not connect&#039;;&lt;br /&gt;
		die(&#039;Could not connect: &#039; . mssql_error());&lt;br /&gt;
	}&lt;br /&gt;
	echo&#039;Successful connection&#039;;&lt;br /&gt;
	mssql_close($link);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
8. Install Moodle as usual.  Good luck!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Troubleshooting ===&lt;br /&gt;
If you encounter some problems you can try:&lt;br /&gt;
*check that you have DotNet framework 1.1 installed (later version are installed on Vista, but you could need this specific one)&amp;lt;br /&amp;gt;&lt;br /&gt;
*enable TCP/IP for MSSQL: SQL Server 2005 Network Configuration -&amp;gt; Protocols for MSSQLSERVER -&amp;gt; TCP/IP (Enable) -&amp;gt; Properties -&amp;gt; Ip Addresses -&amp;gt; 127.0.0.1 (Active+Enable)&amp;lt;br /&amp;gt;&lt;br /&gt;
*if you are using SQL Server 2005 and you have the error &#039;&#039;4004: Unicode data in a Unicode-only collation or ntext data cannot be sent to clients using DB-Library (such as ISQL) or ODBC version 3.7 or earlier&#039;&#039;, try the ODBTP method (next chapter). The SQL Server complaining that it doesn&#039;t support pure Unicode via TDS or older versions of ODBC. Microsoft has deprecated DB-Library a long ago, in favor of ODBC, OLE DB, or SQL Native Client. Many new features of SQL 2005 aren&#039;t accessible via DB-Library so if you need them, you could have to switch away from tools based on TDS and DB-Library :(&lt;br /&gt;
&lt;br /&gt;
== FreeTDS on Linux (on Ubuntu by compiling an mssql.so extension) ==&lt;br /&gt;
This is a good read to [http://www.robert-gonzalez.com/2009/02/18/building-the-php-ms-sql-server-extension-from-source-on-ubuntu-810/ building a FreeTDS based mssql extension for apache on Ubuntu]. Do note that [http://www.freetds.org/news.html freeTDS] 0.91 was recently released, you can find latest versions [http://freetds.sourceforge.net/ here]. &lt;br /&gt;
&lt;br /&gt;
Note: the freetds.conf file you use should have &amp;quot;text size = 20971520&amp;quot; as mentioned in the FreeTDS on Windows section otherwise you might see sessions logging out or worse apache segmentation faults. Also see [[FreeTDS]].&lt;br /&gt;
&lt;br /&gt;
== Using FreeTDS on Debian Lenny ==&lt;br /&gt;
I found the following solution using:&lt;br /&gt;
* PHP Version 5.2.6-1+lenny9&lt;br /&gt;
* Microsoft SQL Server Enterprise Edition, version: 9.00.4053.00&lt;br /&gt;
&amp;lt;pre&amp;gt;apt-get install libsybdb5 freetds-common php5-sybase&lt;br /&gt;
/etc/init.d/apache2 restart&amp;lt;/pre&amp;gt;&lt;br /&gt;
At the end of the process, if all goes fine, you will find in the mssql section of phpinfo();&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;nicetable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! MSSQL Support&lt;br /&gt;
! enabled&lt;br /&gt;
|-&lt;br /&gt;
| Library version &lt;br /&gt;
| FreeTDS &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Once FreeTDS is correctly installed, don not forget to set it up following explanations in https://docs.moodle.org/en/FreeTDS&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* [[Installing Moodle]]&lt;br /&gt;
* [[Errors FAQ]]&lt;br /&gt;
* Using Moodle [http://moodle.org/mod/forum/view.php?id=28 Installation problems forum]&lt;br /&gt;
* [[Beginning Administration FAQ]]&lt;br /&gt;
* [[Installing Oracle for PHP]]&lt;br /&gt;
&lt;br /&gt;
[[Category:FAQ]]&lt;br /&gt;
[[Category:Installation]]&lt;br /&gt;
[[Category:Developer]]&lt;br /&gt;
[[Category:XMLDB]]&lt;br /&gt;
[[Category:DB]]&lt;/div&gt;</summary>
		<author><name>Stronk7</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/2x/pl/index.php?title=Installing_MSSQL_for_PHP&amp;diff=89949</id>
		<title>Installing MSSQL for PHP</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/2x/pl/index.php?title=Installing_MSSQL_for_PHP&amp;diff=89949"/>
		<updated>2011-09-20T08:12:37Z</updated>

		<summary type="html">&lt;p&gt;Stronk7: Taking rid of ODBTP / ODBC alternatives. Although may work, we don&amp;#039;t play with them anymore.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
This short manual is suitable if you are trying to run Moodle using the SQL*Server (MSSQL) RDBMS. Steps detailed below must be performed &#039;&#039;&#039;before&#039;&#039;&#039; installing Moodle itself.&lt;br /&gt;
&lt;br /&gt;
Some of this may also apply if you wish to access an MSSQL server for external db authentication/enrollment. &lt;br /&gt;
&lt;br /&gt;
First of all, minimum required version of MSSQL has been stabilised to MSSQL 2005 (v.9), although it &#039;&#039;&#039;might work with MSSQL 2000 (v.8) or newer&#039;&#039;&#039;. All the development process has been performed using MSSQL 2005 and there could be some &#039;&#039;&#039;unknown problems&#039;&#039;&#039; with previous releases.&lt;br /&gt;
&lt;br /&gt;
While PHP comes with one, more or less, standard extension (mssql) that provides access to MSSQL databases, early we found some hard limits on it. Basically such default extension has some limits that prevent us to use it at all (you can find more info about these problems [[Development:XMLDB problems#MSSQL, PHP, UTF-8 and UCS-2|here]]).&lt;br /&gt;
&lt;br /&gt;
So, in order to allow PHP (i.e. Moodle) to access to MSSQL DBs properly we have to install a &#039;&#039;&#039;mssql extension alternative&#039;&#039;&#039; to save us from the problems related above. See the sections below for details about the various options.&lt;br /&gt;
&lt;br /&gt;
== Installation overview ==&lt;br /&gt;
&lt;br /&gt;
1. Get MSSQL Server installed and running. ([http://www.microsoft.com/sql/editions/express/default.mspx A free limited version, SQL Server Express Edition] is available for testing.)&lt;br /&gt;
:Make sure that you choose mixed authentication (Windows and local accounts) to keep things simpler later.  You&#039;ll be asked to define the  &amp;quot;sa&amp;quot; account password (it&#039;s the default System Administrator account which has full access to all databases by default).&lt;br /&gt;
&lt;br /&gt;
2. Make sure MS SQL Server can accept incoming TCP/IP connections on port 1433 (the standard one).&lt;br /&gt;
:You might need to explicitly allow this in your Windows firewall (see the Control Panel).  You may also need to edit options in the :&#039;&#039;&#039;SQL Server Configuration Manager&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Network Configuration&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Protocols&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;TCP/IP enabled&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
3. Open the &amp;quot;SQL Server Management Studio&amp;quot; and create a new empty database.  If you are using the &amp;quot;sa&amp;quot; account then you don&#039;t need to do anything else here.&lt;br /&gt;
&lt;br /&gt;
4. Configure these settings in your created (and still empty) database:&lt;br /&gt;
&lt;br /&gt;
:* ANSI NULLS Enabled = true (ALTER DATABASE xxxx SET ANSI_NULLS ON)&lt;br /&gt;
:* Quoted Identifiers Enabled = true (ALTER DATABASE xxxx SET QUOTED_IDENTIFIER ON)&lt;br /&gt;
:* Moodle 2.0 only: Row Versioning Enabled (ALTER DATABASE xxxx SET READ_COMMITTED_SNAPSHOT ON) - To set READ_COMMITTED_SNAPSHOT ON (or OFF), there must be no active connections to the database except for the connection executing the ALTER DATABASE command. See http://msdn.microsoft.com/en-us/library/bb522682.aspx&lt;br /&gt;
&lt;br /&gt;
5. Get PHP installed with a web server.   Unless you want to do it under IIS or some other way, the packages on the [http://download.moodle.org Moodle download page] are a good solution.&lt;br /&gt;
&lt;br /&gt;
6. Choose one of the following specific sections for your server to install the &#039;&#039;&#039;mssql extension alternative&#039;&#039;&#039; installed and running properly on your PHP box.&lt;br /&gt;
&lt;br /&gt;
7. Set the following settings in your php.ini file&lt;br /&gt;
:* mssql.textlimit = 20971520&lt;br /&gt;
:* mssql.textsize = 20971520&lt;br /&gt;
:Also, don&#039;t forget to set one of the following &#039;&#039;&#039;alternatives&#039;&#039;&#039;, in order to get all the data properly &amp;quot;slashed&amp;quot;:&lt;br /&gt;
:* magic_quotes_gpc = Off  &#039;&#039;&#039;or&#039;&#039;&#039;&lt;br /&gt;
:* magic_quotes_gpc = On &#039;&#039;&#039;and&#039;&#039;&#039; magic_quotes_sybase = On &lt;br /&gt;
&lt;br /&gt;
8. With all this properly configured, you can continue with a [[Installing Moodle|standard Moodle installation]].&lt;br /&gt;
&lt;br /&gt;
== Using the SQL Server 2005 Driver for PHP from Microsoft on Windows ==&lt;br /&gt;
In July 2008 Microsoft [http://social.msdn.microsoft.com/forums/en-US/sqldriverforphp/thread/a10e5202-9e41-4ff8-a33e-fbcc7b951be2/ released] a new SQL Server 2005 Driver for PHP. This is a PHP extension that allows PHP scripts to read and write data on Microsoft SQL Server databases and it overcomes the problems with the native SQL Server extension that was previously bundled with PHP.&lt;br /&gt;
&lt;br /&gt;
This Microsoft driver is the standard database layer for running Moodle 2 under Microsoft SQL Server databases. See [[Using the Microsoft SQL Server Driver for PHP]] the installation and configuration details.&lt;br /&gt;
&lt;br /&gt;
This driver is only supported in Moodle 2.0 and up. You should use [https://docs.moodle.org/en/Installing_MSSQL_for_PHP#Using_FreeTDS_on_Windows FreeTDS] if you are installing an older version of Moodle.&lt;br /&gt;
&lt;br /&gt;
See MDL-16497 and MDL-15093 for more background information.&lt;br /&gt;
&lt;br /&gt;
== Using FreeTDS on Windows ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&#039;&#039;&#039;Important Note 1:&#039;&#039;&#039; Due to some previous bugs it&#039;s highly recommendable to use PHP &amp;gt;= 5.2.6 and FreeTDS 0.82 + post-release patches ([http://tracker.moodle.org/browse/MDL-14725 more info]).&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If your web server is on Windows, use &#039;&#039;&#039;php_dblib.dll&#039;&#039;&#039;. Despite the name, it&#039;s FreeTDS compiled for Windows. (Go to this page for information on [https://docs.moodle.org/en/FreeTDS Using FreeTDS for Unix].) &lt;br /&gt;
&lt;br /&gt;
Originally we were using the DLLs available at [http://kromann.info/article.php?Id=11062598797760000 Frank Kromann&#039;s site], but they are outdated (using old versions of FreeTDS) and that has caused [http://tracker.moodle.org/browse/MDL-14725 some problems] in the past.&lt;br /&gt;
&lt;br /&gt;
So, right now, the recommended way to use FreeTDS under Windows is to use PHP 5.2.x following the following instructions:&lt;br /&gt;
&lt;br /&gt;
1. Download the appropriate copy of php_dblib.dll from the list below, and save it into your /PHP/ext directory.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; align=&amp;quot;center&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! PHP version !! [http://www.iis-aid.com/articles/my_word/difference_between_php_thread_safe_and_non_thread_safe_binaries Thread Safe]  !! FreeTDS version !! Download URL&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | PHP 5.2.x (vc6) || Yes || 0.82 + 20090302 patches || [http://download.moodle.org/download.php/dblib/php52/DBLIB_TS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| No || 0.82 + 20090302 patches || [http://download.moodle.org/download.php/dblib/php52/DBLIB_NOTS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | PHP 5.3.x (vc9) || Yes || 0.82 + 20090904 patches || [http://download.moodle.org/download.php/dblib/php53/DBLIB_TS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| No || 0.82 + 20090904 patches || [http://download.moodle.org/download.php/dblib/php53/DBLIB_NOTS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |  Thanks to [http://remote-learner.net/ Remote-Learner]] (Moodle [http://moodle.com/partners/ Partner]) and specially to Bryan Williams, donating one Visual C++ 6.0 Pro license to Moodle. Thanks to Trevor Johnson and his builds of the dblib extensions. Thanks to Daniele, Doug, Luis, Sean and many others by their collaboration in MDL-14725. Thanks to Frediano Ziglio and James K. Lowden from [http://freetds.org freetds.org] by their support. Thanks to Alastair Hole by providing the PHP 5.3 builds of the libraries. Thanks!&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
(alternatively here you can find some [[Development:Compiling FreeTDS under Windows|instructions to build those freetds extensions under win32]] yourself)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. FreeTDS requires the .NET Framework v1.1 to be installed.  You can [http://www.microsoft.com/downloads/details.aspx?FamilyID=262d25e3-f589-4842-8157-034d1e7cf3a3&amp;amp;DisplayLang=en download it from the Microsoft website] along with its [http://www.microsoft.com/downloads/details.aspx?FamilyID=a8f5654f-088e-40b2-bbdb-a83353618b38&amp;amp;DisplayLang=en service pack].  Alternatively, if you do not wish to install this framework, you can [http://kromann.info/ms-libs/msvcr71.dll download the required DLL] from Frank&#039;s site, and save it into your /PHP root directory.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. Edit your /PHP/php.ini file and add this line:&lt;br /&gt;
&lt;br /&gt;
  extension=php_dblib.dll &lt;br /&gt;
&lt;br /&gt;
Make sure that any lines referring to the php_mssql.dll extension are DISABLED (commented out).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. When the PHP engine loads the FreeTDS extension it needs to be passed certain infiormation in order to be able to connect to your Moodle database. To retrieve this information FreeTDS looks for a file called &#039;&#039;&#039;freetds.conf&#039;&#039;&#039; in the root folder of the server that PHP installed on (e.g. C:\).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;freetds.conf&#039;&#039;&#039; should have the following structure:&lt;br /&gt;
&lt;br /&gt;
  [global]&lt;br /&gt;
      host = xxx.xxx.xxx.xxx (host name or ip of the MSSQL server)&lt;br /&gt;
      port = 1433&lt;br /&gt;
      client charset = UTF-8&lt;br /&gt;
      tds version = 8.0&lt;br /&gt;
      text size = 20971520&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want to connect to a particular [http://msdn.microsoft.com/en-us/library/aa174516(SQL.80).aspx instance] of MSSQL you should specify the instance name:&lt;br /&gt;
&lt;br /&gt;
  [global]&lt;br /&gt;
      host = xxx.xxx.xxx.xxx (host name or ip of the MSSQL server)&lt;br /&gt;
      instance = xxx (instance name, e.g. INST2)&lt;br /&gt;
      port = 1433&lt;br /&gt;
      client charset = UTF-8&lt;br /&gt;
      tds version = 8.0&lt;br /&gt;
      text size = 20971520&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
*You can configure FreeTDS to look for the freetds.conf file in any directory that you want - you don&#039;t have to use C:\. To do this create a SYSTEM environment variable called &#039;&#039;&#039;FREETDS&#039;&#039;&#039; and point it to the directory where you have installed the freetds.conf file. If you do not set this environment variable FreeTDS will look for the freetds.conf file in the C:\ folder, which is the default. One possible benefit of setting the FREETDS environment variable and using a different installation directory for freetds.conf is that C:\ is very predictable to a hacker that knows anything about FreeTDS and that is the first place that he would look if he wanted to compromise your system. So, using a different installation directory would just make your system stronger. See the FreeTDS [http://www.freetds.org/userguide/envvar.htm Setting the environment variables] documentation for more information about this FREETDS environment variable.&lt;br /&gt;
&lt;br /&gt;
*Alternatively, you can [[Development:Compiling FreeTDS under Windows|recompile]] the FreeTDS extension yourself and change the default location to your preferred location at compile time. Then it is not necessary to create any environment variable. You must just ensure that freetds.conf is in the same folder that you specify when you compile php_dblib.dll.&lt;br /&gt;
&lt;br /&gt;
*MSSQL is usually installed with port 1433 as the default. However, if the port was changed on your server when you installed MSSQL then you need to specify the correct port number.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5. Your Moodle &#039;&#039;&#039;config.php&#039;&#039;&#039; should include lines like these:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
$CFG-&amp;gt;dbtype    = &#039;mssql_n&#039;;        // Required&lt;br /&gt;
$CFG-&amp;gt;dbhost    = &#039;localhost&#039;;      // assuming MS SQL is on the same server, otherwise use an IP&lt;br /&gt;
$CFG-&amp;gt;dbname    = &#039;moodle&#039;;         // or whatever you called the database you created&lt;br /&gt;
$CFG-&amp;gt;dbuser    = &#039;yourusername&#039;;   // I usually use the &#039;sa&#039; account (dbowner perms are enough)&lt;br /&gt;
$CFG-&amp;gt;dbpass    = &#039;yourpassword&#039;;&lt;br /&gt;
$CFG-&amp;gt;dbpersist =  false;&lt;br /&gt;
$CFG-&amp;gt;prefix    = &#039;mdl_&#039;;            //Prefix, you can change it, but NEVER leave it blank.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t have a config.php file yet, it can be generated as normal from the Moodle installer. Alternatively you can use the config-dist.php file that comes with the Moodle package to create your own config.php file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6. Restart or start your web server.  If Moodle still cannot communicate with the database server, please turn display_startup_errors to &amp;quot;On&amp;quot; in your /PHP/php.ini file, then restart the web server and check for any errors that may indicate incorrect DLL versions or missing dependencies.  These error reports, turned off by default in PHP, can be vital in locating a problem with new extension installations.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
7. Database conection test, try this PHP script, just put in a text file called test.php change (&#039;localhost&#039;, &#039;db_user&#039;, &#039;db_password&#039;) to suite your setup, and load from local host (http://localhost/test.php)...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
	$link = mssql_connect(&#039;localhost&#039;, &#039;db_user&#039;, &#039;db_password&#039;);&lt;br /&gt;
	if(!$link) {&lt;br /&gt;
		echo&#039;Could not connect&#039;;&lt;br /&gt;
		die(&#039;Could not connect: &#039; . mssql_error());&lt;br /&gt;
	}&lt;br /&gt;
	echo&#039;Successful connection&#039;;&lt;br /&gt;
	mssql_close($link);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
8. Install Moodle as usual.  Good luck!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Troubleshooting ===&lt;br /&gt;
If you encounter some problems you can try:&lt;br /&gt;
*check that you have DotNet framework 1.1 installed (later version are installed on Vista, but you could need this specific one)&amp;lt;br /&amp;gt;&lt;br /&gt;
*enable TCP/IP for MSSQL: SQL Server 2005 Network Configuration -&amp;gt; Protocols for MSSQLSERVER -&amp;gt; TCP/IP (Enable) -&amp;gt; Properties -&amp;gt; Ip Addresses -&amp;gt; 127.0.0.1 (Active+Enable)&amp;lt;br /&amp;gt;&lt;br /&gt;
*if you are using SQL Server 2005 and you have the error &#039;&#039;4004: Unicode data in a Unicode-only collation or ntext data cannot be sent to clients using DB-Library (such as ISQL) or ODBC version 3.7 or earlier&#039;&#039;, try the ODBTP method (next chapter). The SQL Server complaining that it doesn&#039;t support pure Unicode via TDS or older versions of ODBC. Microsoft has deprecated DB-Library a long ago, in favor of ODBC, OLE DB, or SQL Native Client. Many new features of SQL 2005 aren&#039;t accessible via DB-Library so if you need them, you could have to switch away from tools based on TDS and DB-Library :(&lt;br /&gt;
&lt;br /&gt;
== FreeTDS on Linux (on Ubuntu by compiling an mssql.so extension) ==&lt;br /&gt;
This is a good read to [http://www.robert-gonzalez.com/2009/02/18/building-the-php-ms-sql-server-extension-from-source-on-ubuntu-810/ building a FreeTDS based mssql extension for apache on Ubuntu]. Do note that [http://www.freetds.org/news.html freeTDS] 0.91 was recently released, you can find latest versions [http://freetds.sourceforge.net/ here]. &lt;br /&gt;
&lt;br /&gt;
Note: the freetds.conf file you use should have &amp;quot;text size = 20971520&amp;quot; as mentioned in the FreeTDS on Windows section otherwise you might see sessions logging out or worse apache segmentation faults. Also see [[FreeTDS]].&lt;br /&gt;
&lt;br /&gt;
== Using FreeTDS on Debian Lenny ==&lt;br /&gt;
I found the following solution using:&lt;br /&gt;
* PHP Version 5.2.6-1+lenny9&lt;br /&gt;
* Microsoft SQL Server Enterprise Edition, version: 9.00.4053.00&lt;br /&gt;
&amp;lt;pre&amp;gt;apt-get install libsybdb5 freetds-common php5-sybase&lt;br /&gt;
/etc/init.d/apache2 restart&amp;lt;/pre&amp;gt;&lt;br /&gt;
At the end of the process, if all goes fine, you will find in the mssql section of phpinfo();&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;nicetable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! MSSQL Support&lt;br /&gt;
! enabled&lt;br /&gt;
|-&lt;br /&gt;
| Library version &lt;br /&gt;
| FreeTDS &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Once FreeTDS is correctly installed, don not forget to set it up following explanations in https://docs.moodle.org/en/FreeTDS&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* [[Installing Moodle]]&lt;br /&gt;
* [[Errors FAQ]]&lt;br /&gt;
* Using Moodle [http://moodle.org/mod/forum/view.php?id=28 Installation problems forum]&lt;br /&gt;
* [[Beginning Administration FAQ]]&lt;br /&gt;
* [[Installing Oracle for PHP]]&lt;br /&gt;
&lt;br /&gt;
[[Category:FAQ]]&lt;br /&gt;
[[Category:Installation]]&lt;br /&gt;
[[Category:Developer]]&lt;br /&gt;
[[Category:XMLDB]]&lt;br /&gt;
[[Category:DB]]&lt;/div&gt;</summary>
		<author><name>Stronk7</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/2x/pl/index.php?title=Moodle_version_history&amp;diff=83314</id>
		<title>Moodle version history</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/2x/pl/index.php?title=Moodle_version_history&amp;diff=83314"/>
		<updated>2011-05-06T17:26:14Z</updated>

		<summary type="html">&lt;p&gt;Stronk7: /* Moodle 2.0 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Moodle 1.0==&lt;br /&gt;
*Moodle 1.0 - 20 August 2002&lt;br /&gt;
*Moodle 1.0.1 - 26 August 2002&lt;br /&gt;
*Moodle 1.0.2 - 2 September 2002&lt;br /&gt;
*Moodle 1.0.3 - 5 September 2002&lt;br /&gt;
*Moodle 1.0.4 - 10 September 2002&lt;br /&gt;
*Moodle 1.0.5 - 27 September 2002&lt;br /&gt;
*Moodle 1.0.6 - 26 October 2002&lt;br /&gt;
:: 1.0.6.1 - 6 Nov&lt;br /&gt;
:: 1.0.6.2 - 11 Nov&lt;br /&gt;
:: 1.0.6.3 - 14 Nov&lt;br /&gt;
:: 1.0.6.4 - 25 Nov&lt;br /&gt;
*Moodle 1.0.7 - 9 December 2002&lt;br /&gt;
*Moodle 1.0.8 - 7 January 2003&lt;br /&gt;
*Moodle 1.0.9 - 30 May 2003&lt;br /&gt;
&lt;br /&gt;
==Moodle 1.1==&lt;br /&gt;
*Moodle 1.1 - 29 August 2003&lt;br /&gt;
*Moodle 1.1.1 - 11 September 2003&lt;br /&gt;
&lt;br /&gt;
==Moodle 1.2==&lt;br /&gt;
*Moodle 1.2 - 20 March 2004&lt;br /&gt;
*Moodle 1.2.1 - 25 March 2004&lt;br /&gt;
&lt;br /&gt;
==Moodle 1.3==&lt;br /&gt;
*Moodle 1.3 - 25 May 2004&lt;br /&gt;
*Moodle 1.3.1 - 4 June 2004&lt;br /&gt;
*Moodle 1.3.2 - 9 July 2004&lt;br /&gt;
*Moodle 1.3.3 - 16 July 2004&lt;br /&gt;
*Moodle 1.3.4 - 11 August 2004&lt;br /&gt;
&lt;br /&gt;
==Moodle 1.4==&lt;br /&gt;
*Moodle 1.4 - 31 August 2004&lt;br /&gt;
*Moodle 1.4.1 - 12 September 2004&lt;br /&gt;
*Moodle 1.4.2 - 5 November 2004&lt;br /&gt;
*Moodle 1.4.3 - 21 December 2004&lt;br /&gt;
*Moodle 1.4.4 - 7 March 2005 &lt;br /&gt;
*[[Moodle 1.4.5 release notes|Moodle 1.4.5]] - 7 May 2005&lt;br /&gt;
&lt;br /&gt;
==Moodle 1.5==&lt;br /&gt;
*[[Moodle 1.5 release notes|Moodle 1.5]] - 5 June 2005&lt;br /&gt;
*[[Moodle 1.5.1 release notes|Moodle 1.5.1]] - 8 July 2005&lt;br /&gt;
*[[Moodle 1.5.2 release notes|Moodle 1.5.2]] - 16 July 2005&lt;br /&gt;
*[[Moodle 1.5.3 release notes|Moodle 1.5.3]] - 11 November 2005&lt;br /&gt;
*[[Moodle 1.5.4 release notes|Moodle 1.5.4]] - 21 May 2006&lt;br /&gt;
&lt;br /&gt;
==Moodle 1.6==&lt;br /&gt;
*[[Moodle 1.6 release notes|Moodle 1.6]] - 20 June 2006&lt;br /&gt;
*[[Moodle 1.6.1 release notes|Moodle 1.6.1]] - 20 July 2006&lt;br /&gt;
*[[Moodle 1.6.2 release notes|Moodle 1.6.2]] - 12 September 2006&lt;br /&gt;
*[[Moodle 1.6.3 release notes|Moodle 1.6.3]] - 10 October 2006&lt;br /&gt;
*[[Moodle 1.6.4 release notes|Moodle 1.6.4]] - 17 January 2007&lt;br /&gt;
*[[Moodle 1.6.5 release notes|Moodle 1.6.5]] - 30 March 2007&lt;br /&gt;
*Moodle 1.6.6 - 11 January 2008&lt;br /&gt;
*Moodle 1.6.7 - 11 July 2008&lt;br /&gt;
*[[Moodle 1.6.8 release notes|Moodle 1.6.8]] - 15 October 2008&lt;br /&gt;
*[[Moodle 1.6.9 release notes|Moodle 1.6.9]] - 28 January 2009&lt;br /&gt;
&lt;br /&gt;
==Moodle 1.7==&lt;br /&gt;
*[[Moodle 1.7 release notes|Moodle 1.7]] - 7 November 2006&lt;br /&gt;
*[[Moodle 1.7.1 release notes|Moodle 1.7.1]] - 17 January 2007&lt;br /&gt;
*[[Moodle 1.7.2 release notes|Moodle 1.7.2]] - 30 March 2007&lt;br /&gt;
*[[Moodle 1.7.3 release notes|Moodle 1.7.3]] - 11 October 2007&lt;br /&gt;
*[[Moodle 1.7.4 release notes|Moodle 1.7.4]] - 11 January 2008&lt;br /&gt;
*[[Moodle 1.7.5 release notes|Moodle 1.7.5]] - 11 July 2008&lt;br /&gt;
*[[Moodle 1.7.6 release notes|Moodle 1.7.6]] - 15 October 2008&lt;br /&gt;
*[[Moodle 1.7.7 release notes|Moodle 1.7.7]] - 28 January 2009&lt;br /&gt;
&lt;br /&gt;
==Moodle 1.8==&lt;br /&gt;
*[[Moodle 1.8 release notes|Moodle 1.8]] - 30 March 2007&lt;br /&gt;
*[[Moodle 1.8.1 release notes|Moodle 1.8.1]] - 14 June 2007&lt;br /&gt;
*[[Moodle 1.8.2 release notes|Moodle 1.8.2]] - 8 July 2007&lt;br /&gt;
*[[Moodle 1.8.3 release notes|Moodle 1.8.3]] - 11 October 2007&lt;br /&gt;
*[[Moodle 1.8.4 release notes|Moodle 1.8.4]] - 11 January 2008&lt;br /&gt;
*[[Moodle 1.8.5 release notes|Moodle 1.8.5]] - 8 April 2008&lt;br /&gt;
*[[Moodle 1.8.6 release notes|Moodle 1.8.6]] - 11 July 2008&lt;br /&gt;
*[[Moodle 1.8.7 release notes|Moodle 1.8.7]] - 15 October 2008&lt;br /&gt;
*[[Moodle 1.8.8 release notes|Moodle 1.8.8]] - 28 January 2009&lt;br /&gt;
*[[Moodle 1.8.9 release notes|Moodle 1.8.9]] - 15 May 2009&lt;br /&gt;
*[[Moodle 1.8.10 release notes|Moodle 1.8.10]] - 26 October 2009&lt;br /&gt;
*[[Moodle 1.8.11 release notes|Moodle 1.8.11]] - 25 November 2009&lt;br /&gt;
*[[Moodle 1.8.12 release notes|Moodle 1.8.12]] - 27 March 2010&lt;br /&gt;
*[[Moodle 1.8.13 release notes|Moodle 1.8.13]] - 8 June 2010&lt;br /&gt;
*[[Moodle 1.8.14 release notes|Moodle 1.8.14]] - 3 December 2010&lt;br /&gt;
&lt;br /&gt;
==Moodle 1.9==&lt;br /&gt;
*[[Moodle 1.9 release notes|Moodle 1.9]] - 3 March 2008&lt;br /&gt;
*[[Moodle 1.9.1 release notes|Moodle 1.9.1]] - 15 May 2008&lt;br /&gt;
*[[Moodle 1.9.2 release notes|Moodle 1.9.2]] - 11 July 2008&lt;br /&gt;
*[[Moodle 1.9.3 release notes|Moodle 1.9.3]] - 15 October 2008&lt;br /&gt;
*[[Moodle 1.9.4 release notes|Moodle 1.9.4]] - 28 January 2009&lt;br /&gt;
*[[Moodle 1.9.5 release notes|Moodle 1.9.5]] - 13 May 2009&lt;br /&gt;
*[[Moodle 1.9.6 release notes|Moodle 1.9.6]] - 21 October 2009&lt;br /&gt;
*[[Moodle 1.9.7 release notes|Moodle 1.9.7]] - 25 November 2009&lt;br /&gt;
*[[Moodle 1.9.8 release notes|Moodle 1.9.8]] - 25 March 2010&lt;br /&gt;
*[[Moodle 1.9.9 release notes|Moodle 1.9.9]] - 8 June 2010&lt;br /&gt;
*[[Moodle 1.9.10 release notes|Moodle 1.9.10]] - 25 October 2010&lt;br /&gt;
*[[Moodle 1.9.11 release notes|Moodle 1.9.11]] - 21 February 2011&lt;br /&gt;
&lt;br /&gt;
==Moodle 2.0==&lt;br /&gt;
*[[Moodle 2.0 release notes|Moodle 2.0]] - 24 November 2010&lt;br /&gt;
*[[Moodle 2.0.1 release notes|Moodle 2.0.1]] - 25 December 2010&lt;br /&gt;
*[[Moodle 2.0.2 release notes|Moodle 2.0.2]] - 21 February 2011&lt;br /&gt;
*[[Moodle 2.0.3 release notes|Moodle 2.0.3]] - 5 May 2011&lt;br /&gt;
&lt;br /&gt;
[[Category:Release notes]]&lt;br /&gt;
&lt;br /&gt;
[[fr:Historique des versions]]&lt;br /&gt;
[[es:Historia de las versiones]]&lt;br /&gt;
[[de:Versionshistorie]]&lt;/div&gt;</summary>
		<author><name>Stronk7</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/2x/pl/index.php?title=Latest_release_notes&amp;diff=83313</id>
		<title>Latest release notes</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/2x/pl/index.php?title=Latest_release_notes&amp;diff=83313"/>
		<updated>2011-05-06T17:25:32Z</updated>

		<summary type="html">&lt;p&gt;Stronk7: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Moodle 2.0.3==&lt;br /&gt;
{{:Moodle 2.0.3 release notes}}&lt;br /&gt;
&lt;br /&gt;
==Moodle 1.9.11==&lt;br /&gt;
{{:Moodle 1.9.11 release notes}}&lt;br /&gt;
&lt;br /&gt;
==Moodle 1.8.14==&lt;br /&gt;
&lt;br /&gt;
{{:Moodle 1.8.14 release notes}}&lt;br /&gt;
&lt;br /&gt;
==Moodle 1.7.7==&lt;br /&gt;
{{:Moodle 1.7.7 release notes}}&lt;br /&gt;
&lt;br /&gt;
==Moodle 1.6.9==&lt;br /&gt;
{{:Moodle 1.6.9 release notes}}&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Moodle version history]] for dates of release and links to notes for earlier versions&lt;br /&gt;
* [[Updates]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Release notes]]&lt;br /&gt;
&lt;br /&gt;
[[es:Notas de versiones]]&lt;br /&gt;
[[fr:Dernières notes de mise à jour]]&lt;br /&gt;
[[pt:Versões do Moodle]]&lt;br /&gt;
[[ru:Примечания к версиям]]&lt;br /&gt;
[[de:Aktuellste Versionsinformationen]]&lt;/div&gt;</summary>
		<author><name>Stronk7</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/2x/pl/index.php?title=Release_process&amp;diff=83304</id>
		<title>Release process</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/2x/pl/index.php?title=Release_process&amp;diff=83304"/>
		<updated>2011-05-06T14:19:39Z</updated>

		<summary type="html">&lt;p&gt;Stronk7: /* For a stable release on an existing branch XX with point value Y */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page describes the standard procedures for making Moodle releases.&lt;br /&gt;
&lt;br /&gt;
===For a stable release on an existing branch XX with point value Y===&lt;br /&gt;
&lt;br /&gt;
One week before:&lt;br /&gt;
# Notify Moodle developers and Moodle Partners about the upcoming release&lt;br /&gt;
# Freeze stable development and post in the [http://moodle.org/mod/forum/view.php?id=55 General developer forum] to inform everyone of the freeze&lt;br /&gt;
# Review and complete the [[:Category:Release notes|release notes]] of the upcoming version.&lt;br /&gt;
# [[Development:Weekly Code Review|Test / QA]] etc&lt;br /&gt;
&lt;br /&gt;
Release day: (exactly before the next integration cycle begins on Monday)&lt;br /&gt;
# Make sure all the Unit tests pass!&lt;br /&gt;
# Edit version.php, update name and version to new point release and commit in the integration repository&lt;br /&gt;
# Run the [https://github.com/skodak/mdlrelease/blob/master/weeklybuild.txt mdlrelease] process, that will do, for a release:&lt;br /&gt;
#* Tag the integration repository with a tag name vX.Y.Z using &amp;quot;MOODLE_XXY&amp;quot; as a tag message &lt;br /&gt;
#* push change to main git repo, github and Gitorious&lt;br /&gt;
#* sync CVS mirror (copy the version.php file and update githash.php to point to the release commit)&lt;br /&gt;
#* &#039;&#039;&#039;cvs tag -FR MOODLE_XXY&#039;&#039;&#039; to tag everything in the release&lt;br /&gt;
#* &#039;&#039;&#039;cvs tag -FR MOODLE_XX_WEEKLY&#039;&#039;&#039; to make the weekly version match the release&lt;br /&gt;
# &#039;&#039;&#039;cvs -q update -dP&#039;&#039;&#039; all code on download server&lt;br /&gt;
# Run moodle-makenightlystableXX&lt;br /&gt;
# Go to download/stableXX  &lt;br /&gt;
# Copy current daily as release package:&lt;br /&gt;
## &#039;&#039;&#039;cp moodle-latest-XX.zip moodle-X.X.Y.zip&#039;&#039;&#039;&lt;br /&gt;
## &#039;&#039;&#039;cp moodle-latest-XX.tgz moodle-X.X.Y.tgz&#039;&#039;&#039;&lt;br /&gt;
# Edit download index.php page with new release info and links&lt;br /&gt;
# Run moodle-makewindowspackages so all the windows packages will be rebuilt&lt;br /&gt;
# Edit download windows/index.php page with new release info (always keeping the &amp;quot;+&amp;quot;)&lt;br /&gt;
# Visit releases page on tracker and make the release, bumping all remaining open bugs to the next point release. This must be done both for the [http://tracker.moodle.org/secure/project/ViewProject.jspa?pid=10011 Moodle Project] and the [http://tracker.moodle.org/secure/project/ViewProject.jspa?pid=10033 Non-core contributed modules project].&lt;br /&gt;
# Add the release date to the [[:Category:Release notes|release notes]]&lt;br /&gt;
# Update the [[Latest release notes]] page&lt;br /&gt;
# Add the new version to the [[Moodle version history]] page&lt;br /&gt;
# Include the new versions in [[Moodle 1.8 release notes]], [[Moodle 1.9 release notes]] and [[Moodle 2.0 release notes]]&lt;br /&gt;
# Notify all registered sys admins&lt;br /&gt;
# Create a new (&#039;&#039;&#039;blocker serious security issue!&#039;&#039;&#039;) META bug in the Tracker &amp;quot;META: Moodle XX.Y+1 and friends security bugs&amp;quot; to associate new/pending security bugs that will be fixed in the next release as subtasks. An example is MDL-20840 (for Moodle 1.9.7).&lt;br /&gt;
# Create a new (&#039;&#039;&#039;blocker serious security issue!&#039;&#039;&#039;) task in the Tracker &amp;quot;Prepare security advisories for XX.Y+1 and friends&amp;quot; to define/edit/polish the security advisories in the next release. Link it with the previous one as &amp;quot;will be resolved by&amp;quot;. An example is MDL-20722 (for Moodle 1.9.7).&lt;br /&gt;
&lt;br /&gt;
One week later:&lt;br /&gt;
# Update the version.php in git to be X.X.Y+ during the next weekly PULL process&lt;br /&gt;
# Add all security advisories to [http://moodle.org/security Security news]&lt;br /&gt;
# Add all security issues to the [[:Category:Release notes|release notes]] with links to security advisories&lt;br /&gt;
# Update the Latest Release block on [http://moodle.org/news/ Moodle.org news]&lt;br /&gt;
# Post about the release in the [http://moodle.org/news/ moodle.org news]&lt;br /&gt;
# Create a new release notes page for the next version XX.Y+1 (here you can find [[Development:Release notes template|one template for that]])&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
* [[Development:Stable branch support]]&lt;br /&gt;
* [[Development:Major release process]]&lt;br /&gt;
* MDLSITE-699: How to repackage one weekly at any moment (a.k.a. &amp;quot;emergency weekly&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
[[Category:Processes|Release process]]&lt;br /&gt;
[[Category:Release notes|Release process]]&lt;/div&gt;</summary>
		<author><name>Stronk7</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/2x/pl/index.php?title=Release_process&amp;diff=83291</id>
		<title>Release process</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/2x/pl/index.php?title=Release_process&amp;diff=83291"/>
		<updated>2011-05-06T13:09:46Z</updated>

		<summary type="html">&lt;p&gt;Stronk7: Clarifying git tagging&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page describes the standard procedures for making Moodle releases.&lt;br /&gt;
&lt;br /&gt;
===For a stable release on an existing branch XX with point value Y===&lt;br /&gt;
&lt;br /&gt;
One week before:&lt;br /&gt;
# Notify Moodle developers and Moodle Partners about the upcoming release&lt;br /&gt;
# Freeze stable development and post in the [http://moodle.org/mod/forum/view.php?id=55 General developer forum] to inform everyone of the freeze&lt;br /&gt;
# Review and complete the [[:Category:Release notes|release notes]] of the upcoming version.&lt;br /&gt;
# [[Development:Weekly Code Review|Test / QA]] etc&lt;br /&gt;
&lt;br /&gt;
Release day: (exactly before the next integration cycle begins on Monday)&lt;br /&gt;
# Make sure all the Unit tests pass!&lt;br /&gt;
# Edit version.php, update name and version to new point release and commit in the integration repository&lt;br /&gt;
# Tag the integration repository with a tag name vX.Y.Z using &amp;quot;MOODLE_XXY&amp;quot; as a tag message&lt;br /&gt;
# push change to main git repo, github and Gitorious&lt;br /&gt;
# sync CVS mirror (copy the version.php file and update githash.php to point to the release commit)&lt;br /&gt;
# &#039;&#039;&#039;cvs tag -FR MOODLE_XXY&#039;&#039;&#039; to tag everything in the release&lt;br /&gt;
# &#039;&#039;&#039;cvs tag -FR vX.X.Y&#039;&#039;&#039; to tag everything in the release&lt;br /&gt;
# &#039;&#039;&#039;cvs tag -FR MOODLE_XX_WEEKLY&#039;&#039;&#039; to make the weekly version match the release&lt;br /&gt;
# &#039;&#039;&#039;cvs -q update -dP&#039;&#039;&#039; all code on download server&lt;br /&gt;
# Run moodle-makenightlystableXX&lt;br /&gt;
# Go to download/stableXX  &lt;br /&gt;
# Copy current daily as release package:&lt;br /&gt;
## &#039;&#039;&#039;cp moodle-latest-XX.zip moodle-X.X.Y.zip&#039;&#039;&#039;&lt;br /&gt;
## &#039;&#039;&#039;cp moodle-latest-XX.tgz moodle-X.X.Y.tgz&#039;&#039;&#039;&lt;br /&gt;
# Edit download index.php page with new release info and links&lt;br /&gt;
# Run moodle-makewindowspackages so all the windows packages will be rebuilt&lt;br /&gt;
# Edit download windows/index.php page with new release info (always keeping the &amp;quot;+&amp;quot;)&lt;br /&gt;
# Visit releases page on tracker and make the release, bumping all remaining open bugs to the next point release. This must be done both for the [http://tracker.moodle.org/secure/project/ViewProject.jspa?pid=10011 Moodle Project] and the [http://tracker.moodle.org/secure/project/ViewProject.jspa?pid=10033 Non-core contributed modules project].&lt;br /&gt;
# Add the release date to the [[:Category:Release notes|release notes]]&lt;br /&gt;
# Update the [[Latest release notes]] page&lt;br /&gt;
# Add the new version to the [[Moodle version history]] page&lt;br /&gt;
# Include the new versions in [[Moodle 1.8 release notes]], [[Moodle 1.9 release notes]] and [[Moodle 2.0 release notes]]&lt;br /&gt;
# Notify all registered sys admins&lt;br /&gt;
# Create a new (&#039;&#039;&#039;blocker serious security issue!&#039;&#039;&#039;) META bug in the Tracker &amp;quot;META: Moodle XX.Y+1 and friends security bugs&amp;quot; to associate new/pending security bugs that will be fixed in the next release as subtasks. An example is MDL-20840 (for Moodle 1.9.7).&lt;br /&gt;
# Create a new (&#039;&#039;&#039;blocker serious security issue!&#039;&#039;&#039;) task in the Tracker &amp;quot;Prepare security advisories for XX.Y+1 and friends&amp;quot; to define/edit/polish the security advisories in the next release. Link it with the previous one as &amp;quot;will be resolved by&amp;quot;. An example is MDL-20722 (for Moodle 1.9.7).&lt;br /&gt;
&lt;br /&gt;
One week later:&lt;br /&gt;
# Update the version.php in git to be X.X.Y+ during the next weekly PULL process&lt;br /&gt;
# Add all security advisories to [http://moodle.org/security Security news]&lt;br /&gt;
# Add all security issues to the [[:Category:Release notes|release notes]] with links to security advisories&lt;br /&gt;
# Update the Latest Release block on [http://moodle.org/news/ Moodle.org news]&lt;br /&gt;
# Post about the release in the [http://moodle.org/news/ moodle.org news]&lt;br /&gt;
# Create a new release notes page for the next version XX.Y+1 (here you can find [[Development:Release notes template|one template for that]])&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
* [[Development:Stable branch support]]&lt;br /&gt;
* [[Development:Major release process]]&lt;br /&gt;
* MDLSITE-699: How to repackage one weekly at any moment (a.k.a. &amp;quot;emergency weekly&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
[[Category:Processes|Release process]]&lt;br /&gt;
[[Category:Release notes|Release process]]&lt;/div&gt;</summary>
		<author><name>Stronk7</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/2x/pl/index.php?title=Broken/DML_functions&amp;diff=83277</id>
		<title>Broken/DML functions</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/2x/pl/index.php?title=Broken/DML_functions&amp;diff=83277"/>
		<updated>2011-05-05T22:37:55Z</updated>

		<summary type="html">&lt;p&gt;Stronk7: fixing get_recordset use&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Moodle_2.0}}This page describes the functions available to access data in the Moodle database. You should &#039;&#039;&#039;exclusively&#039;&#039;&#039; use these functions in order to retrieve or modify database content because these functions provide a high level of abstraction and guarantee that your database manipulation will work against different RDBMSes.&lt;br /&gt;
&lt;br /&gt;
Where possible, tricks and examples will be documented here in order to make developers&#039; lives a bit easier. Of course, feel free to clarify, complete and add more information to  this documentation. It will be welcome, absolutely!&lt;br /&gt;
&lt;br /&gt;
== Main info ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important note:&#039;&#039;&#039; All the functions shown on this page are for use in &#039;&#039;&#039;Moodle 2.0 upwards&#039;&#039;&#039;, where we changed the [[Development:DB layer 2.0|DB layer]] to support some new features. If you need information for previous Moodle version, take a look to the [[Development:DML functions - pre 2.0|DML functions - pre 2.0]] page. For a detailed reference of changes, see the [[Development:DB layer 2.0 migration docs|migration docs]].&lt;br /&gt;
&lt;br /&gt;
* All the function calls on this page are public methods of the $DB global object, so you&#039;ll need to &amp;quot;import&amp;quot; it within your functions (not needed in global scripts) with one simple:&lt;br /&gt;
&amp;lt;code php&amp;gt;global $DB;&amp;lt;/code&amp;gt;&lt;br /&gt;
* All the $table parameters in the functions are meant to be the table name &#039;&#039;without&#039;&#039; prefixes.&lt;br /&gt;
&amp;lt;code php&amp;gt;$user = $DB-&amp;gt;get_record(&#039;user&#039;, array(&#039;id&#039;=&amp;gt;&#039;1&#039;);&amp;lt;/code&amp;gt;&lt;br /&gt;
* When using the xxx_sql() functions, table names must be enclosed between curly braces.&lt;br /&gt;
&amp;lt;code php&amp;gt;$user = $DB-&amp;gt;get_record_sql(&#039;SELECT * FROM {user} WHERE id = ?&#039;, array(1));&amp;lt;/code&amp;gt;&lt;br /&gt;
* All the $conditions parameters in the functions are arrays of fieldname=&amp;gt;fieldvalue elements.&lt;br /&gt;
&amp;lt;code php&amp;gt;$user = $DB-&amp;gt;get_record(&#039;user&#039;, array(&#039;firstname&#039;=&amp;gt;&#039;Martin&#039;, &#039;lastname&#039;=&amp;gt;&#039;Dougiamas&#039;));&amp;lt;/code&amp;gt;&lt;br /&gt;
* All the $params parameters in the functions are arrays of values used to fill placeholders in SQL statements. Both the question mark and named placeholders can be used. Note that named params &#039;&#039;&#039;must be unique&#039;&#039;&#039; even if the value passed is the same.&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
/// Question mark placeholders:&lt;br /&gt;
   $DB-&amp;gt;get_record_sql(&#039;SELECT * FROM {user} WHERE firstname = ? AND lastname = ?&#039;, &lt;br /&gt;
                       array(&#039;Martin&#039;, &#039;Dougiamas&#039;));&lt;br /&gt;
&lt;br /&gt;
/// Named placeholders:&lt;br /&gt;
   $DB-&amp;gt;get_record_sql(&#039;SELECT * FROM {user} WHERE firstname = :firstname AND lastname = :lastname&#039;,&lt;br /&gt;
                       array(&#039;firstname&#039;=&amp;gt;&#039;Martin&#039;, &#039;lastname&#039;=&amp;gt;&#039;Dougiamas&#039;));&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== The functions ==&lt;br /&gt;
&lt;br /&gt;
===Seeing how many records match a given criteria===&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
o $DB-&amp;gt;count_records($table, array $conditions=null) &lt;br /&gt;
  /// Count the records in a table where all the given conditions met.&lt;br /&gt;
o $DB-&amp;gt;count_records_select($table, $select, array $params=null, $countitem=&amp;quot;COUNT(&#039;x&#039;)&amp;quot;) &lt;br /&gt;
  /// Count the records in a table which match a particular WHERE clause.&lt;br /&gt;
o $DB-&amp;gt;count_records_sql($sql, array $params=null) &lt;br /&gt;
  /// Get the result of a SQL SELECT COUNT(...) query.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Seeing if one record exists===&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
o $DB-&amp;gt;record_exists($table, array $conditions=null) &lt;br /&gt;
  /// Test whether a record exists in a table where all the given conditions met.&lt;br /&gt;
o $DB-&amp;gt;record_exists_select($table, $select, array $params=null) &lt;br /&gt;
  /// Test whether any records exists in a table which match a particular WHERE clause.&lt;br /&gt;
o $DB-&amp;gt;record_exists_sql($sql, array $params=null) &lt;br /&gt;
  /// Test whether a SQL SELECT statement returns any records.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Getting a single record===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
o $DB-&amp;gt;get_record($table, array $conditions, $fields=&#039;*&#039;, $ignoremultiple=false) &lt;br /&gt;
  /// Get a single database record as an object where all the given conditions met.&lt;br /&gt;
o $DB-&amp;gt;get_record_select($table, $select, array $params=null, $fields=&#039;*&#039;, $ignoremultiple=false)&lt;br /&gt;
  /// Get a single database record as an object which match a particular WHERE clause.&lt;br /&gt;
o $DB-&amp;gt;get_record_sql($sql, array $params=null)&lt;br /&gt;
  /// Get a single database record as an object using a SQL statement.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Getting an array of records===&lt;br /&gt;
Each of the following methods return an array of objects. The array is indexed by the first column of the fields returned by the query. Thus to assure consistent data, it appears to be best practice to ensure that your query include an &amp;quot;id column&amp;quot; as the first field. (When developing custom tables, be sure to make id your first column for this reason!)&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
o $DB-&amp;gt;get_records($table, array $conditions=null, $sort=&#039;&#039;, $fields=&#039;*&#039;, $limitfrom=0, $limitnum=0) &lt;br /&gt;
  /// Get a number of records as an array of objects where all the given conditions met.&lt;br /&gt;
o $DB-&amp;gt;get_records_select($table, $select, array $params=null, $sort=&#039;&#039;, $fields=&#039;*&#039;, $limitfrom=0, $limitnum=0) &lt;br /&gt;
  /// Get a number of records as an array of objects which match a particular WHERE clause.&lt;br /&gt;
o $DB-&amp;gt;get_records_sql($sql, array $params=null, $limitfrom=0, $limitnum=0)&lt;br /&gt;
  /// Get a number of records as an array of objects using a SQL statement.&lt;br /&gt;
o $DB-&amp;gt;get_records_list($table, $field, array $values, $sort=&#039;&#039;, $fields=&#039;*&#039;, $limitfrom=&#039;&#039;, $limitnum=&#039;&#039;) &lt;br /&gt;
  /// Get a number of records as an array of objects where one field match one list of values.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following methods return data as key/value pairs in an associative array.&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
o $DB-&amp;gt;get_records_menu($table, array $conditions=null, $sort=&#039;&#039;, $fields=&#039;*&#039;, $limitfrom=0, $limitnum=0) &lt;br /&gt;
  /// Get the first two columns from a number of records as an associative array where all the given conditions met.&lt;br /&gt;
o $DB-&amp;gt;get_records_select_menu($table, $select, array $params=null, $sort=&#039;&#039;, $fields=&#039;*&#039;, $limitfrom=0, $limitnum=0)&lt;br /&gt;
  /// Get the first two columns from a number of records as an associative array which match a particular WHERE clause.&lt;br /&gt;
o $DB-&amp;gt;get_records_sql_menu($sql, array $params=null, $limitfrom=0, $limitnum=0)&lt;br /&gt;
  /// Get the first two columns from a number of records as an associative array using a SQL statement.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
====Examples====&lt;br /&gt;
=====moodle_database::get_records()=====&lt;br /&gt;
Get a number of records as an array of objects where all the given conditions met.&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
///Get all records where foo = bar&lt;br /&gt;
$result = $DB-&amp;gt;get_records($table,array(&#039;foo&#039;=&amp;gt;&#039;bar&#039;));&lt;br /&gt;
&lt;br /&gt;
///Get all records where foo = bar and jon = doe&lt;br /&gt;
$result = $DB-&amp;gt;get_records($table,array(&#039;foo&#039; =&amp;gt; &#039;bar AND&#039; , &#039;jon&#039; =&amp;gt; &#039;doe&#039;));&lt;br /&gt;
&lt;br /&gt;
///Get all records where foo = bar, but only return the fields foo,bar,jon,doe&lt;br /&gt;
$result = $DB-&amp;gt;get_records($table,array(&#039;foo&#039;=&amp;gt;&#039;bar&#039;),null,&#039;foo,bar,jon,doe&#039;);&lt;br /&gt;
///The previous example would cause data issues unless the &#039;foo&#039; field happens to have unique values.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====moodle_database::get_records_select()=====&lt;br /&gt;
Get a number of records as an array of objects which match a particular WHERE clause.&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
///Get all records where jon = &#039;doe&#039; and bob is not = &#039;tom&#039;&lt;br /&gt;
///The &#039;select&#039; parameter is (if not empty) is dropped directly into the WHERE clause without alteration.&lt;br /&gt;
$table = &#039;foo&#039;;&lt;br /&gt;
$select = &#039;jon = &#039;doe&#039; AND bob != &amp;quot;tom&amp;quot; &#039;; //is put into the where clause&lt;br /&gt;
$result = $DB-&amp;gt;get_records_select($table,$select);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====moodle_database::get_records_sql()=====&lt;br /&gt;
Get a number of records as an array of objects using a SQL statement. Defined as an abstract function in moodle_database, this method is implemented per database type.&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
///Get all records from &#039;table&#039; where foo = bar&lt;br /&gt;
$result = $DB-&amp;gt;get_records(&#039;SELECT * FROM table WHERE foo = ?&#039;,array(&#039;bar&#039;);&lt;br /&gt;
&lt;br /&gt;
///Get all records from &#039;table&#039; where foo = &#039;bar&#039; and bob = &#039;tom&#039;&lt;br /&gt;
///This is somewhat similar to how Drupal makes its queries&lt;br /&gt;
$result = $DB-&amp;gt;get_records(&#039;SELECT * FROM table WHERE foo = ? AND bob = ?&#039;, array( &#039;bar&#039; , &#039;tom&#039; );&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====moodle_database::get_records_list()=====&lt;br /&gt;
Get a number of records as an array of objects where one field match one list of values.&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
///Get all records where the values(&#039;bar&#039;,1,&#039;elephant&#039;,&#039;moodle&#039;) are found in the field &#039;foo&#039;&lt;br /&gt;
$result = $DB-&amp;gt;get_records($table, &#039;foo&#039;, array( &#039;bar&#039;, 1, &#039;elephant&#039;, &#039;moodle&#039;));&lt;br /&gt;
&lt;br /&gt;
///Get all records where the values(&#039;bar&#039;,1,&#039;elephant&#039;,&#039;moodle&#039;) are found in the field &#039;foo&#039;&lt;br /&gt;
///Only returning the fields &#039;id&#039;, &#039;test&#039; and &#039;taco&#039;&lt;br /&gt;
$result = $DB-&amp;gt;get_records($table, &#039;foo&#039;, array( &#039;bar&#039;, 1, &#039;elephant&#039;, &#039;moodle&#039;)null, &#039;id,test,taco&#039;);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====moodle_database::get_records_menu()=====&lt;br /&gt;
Get the first two columns from a number of records as an associative array where all the given conditions met. &lt;br /&gt;
You can choose the two fields or leave the parameter blank and the method will return the first two columns of the table.&lt;br /&gt;
Returns an associative array. &lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
///Get all records from table &#039;foo&#039; where column &#039;foo&#039; is equal to the value &#039;bar&#039;&lt;br /&gt;
$table = &#039;foo&#039;; ///name of table&lt;br /&gt;
$conditions = array(&#039;foo&#039;=&amp;gt;&#039;bar&#039;); ///the name of the field (key) and the desired value&lt;br /&gt;
&lt;br /&gt;
$result = $DB-&amp;gt;get_records_menu($table,$conditions));&lt;br /&gt;
&lt;br /&gt;
///Get all records from table &#039;foo&#039; where column &#039;foo&#039; is equal to the value &#039;bar&#039;&lt;br /&gt;
///Returning the values from the columns &#039;id&#039; and &#039;tacos&#039;&lt;br /&gt;
$table = &#039;foo&#039;; ///name of table&lt;br /&gt;
$conditions = array(&#039;foo&#039;=&amp;gt;&#039;bar&#039;); ///the name of the field (key) and the desired value&lt;br /&gt;
$fields = &#039;id, tacos&#039;; ///list of fields to return&lt;br /&gt;
&lt;br /&gt;
$result = $DB-&amp;gt;get_records_menu($table,$conditions));&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
The result of this last example will look something like:&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
/// The value of the id field  is 909 and the value of the &#039;tacos&#039; column is 6&lt;br /&gt;
array(1) { [909]=6 }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====moodle_database::get_records_select_menu()=====&lt;br /&gt;
Get the first two columns from a number of records as an associative array which match a particular WHERE clause.&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
///Get all records where jon = &#039;doe&#039; and bob is not = &#039;tom&#039;&lt;br /&gt;
///The &#039;select&#039; parameter is (if not empty) is dropped directly into the WHERE clause without alteration.&lt;br /&gt;
$table = &#039;foo&#039;;&lt;br /&gt;
$select = &#039;jon = &amp;quot;doe&amp;quot; AND bob != &amp;quot;tom&amp;quot; &#039;; //is put into the where clause&lt;br /&gt;
$result = $DB-&amp;gt;get_records_select_menu($table,$select);&lt;br /&gt;
&lt;br /&gt;
$table = &#039;foo&#039;;&lt;br /&gt;
$select = &#039;jon = &amp;quot;doe&amp;quot; AND bob != &amp;quot;tom&amp;quot; &#039;; //is put into the where clause&lt;br /&gt;
$fields = &#039;id, tacos&#039;;//return these fields&lt;br /&gt;
$result = $DB-&amp;gt;get_records_select_menu($table,$select,null,$fields);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The result of this last example will look something like:&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
/// The value of the id field  is 909 and the value of the &#039;tacos&#039; column is 6&lt;br /&gt;
array(1) { [909]=6 }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====moodle_database::get_records_sql_menu()=====&lt;br /&gt;
Get the first two columns from a number of records as an associative array using a SQL statement.&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
///Get all records from table foo where bar = 6&lt;br /&gt;
$sql = &#039;SELECT * FROM foo WHERE bar = ?&#039;;&lt;br /&gt;
$params = array(6);&lt;br /&gt;
&lt;br /&gt;
$result = $DB-&amp;gt;get_records_sql_menu($sql,$params);&lt;br /&gt;
&lt;br /&gt;
///Get all records from table foo where bar = 6&lt;br /&gt;
$sql = &#039;SELECT id,tacos FROM foo WHERE bar = ?&#039;;&lt;br /&gt;
$params = array(6);&lt;br /&gt;
&lt;br /&gt;
$result = $DB-&amp;gt;get_records_sql_menu($sql,$params);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The result of this last example will look something like:&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
/// The value of the id field  is 909 and the value of the &#039;tacos&#039; column is 6&lt;br /&gt;
array(1) { [909]=6 } &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Getting a particular field value from one record===&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
o $DB-&amp;gt;get_field($table, $return, array $conditions)&lt;br /&gt;
  /// Get a single field value from a table record where all the given conditions met.&lt;br /&gt;
o $DB-&amp;gt;get_field_select($table, $return, $select, array $params=null)&lt;br /&gt;
  /// Get a single field value from a table record which match a particular WHERE clause.&lt;br /&gt;
o $DB-&amp;gt;get_field_sql($sql, array $params=null)&lt;br /&gt;
  /// Get a single field value (first field) using a SQL statement.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Getting a particular field value from various records===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
o $DB-&amp;gt;get_fieldset_select($table, $return, $select, array $params=null)&lt;br /&gt;
  /// Selects records and return values of chosen field as an array which match a particular WHERE clause.&lt;br /&gt;
o $DB-&amp;gt;get_fieldset_sql($sql, array $params=null)&lt;br /&gt;
  /// Selects records and return values (first field) as an array using a SQL statement.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Setting a particular field in the database===&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
o $DB-&amp;gt;set_field($table, $newfield, $newvalue, array $conditions=null)&lt;br /&gt;
  /// Set a single field in every table record where all the given conditions met.&lt;br /&gt;
o $DB-&amp;gt;set_field_select($table, $newfield, $newvalue, $select, array $params=null)&lt;br /&gt;
  /// Set a single field in every table record which match a particular WHERE clause.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Deleting Records===&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
o $DB-&amp;gt;delete_records($table, array $conditions=null) &lt;br /&gt;
  /// Delete the records from a table where all the given conditions met.&lt;br /&gt;
o $DB-&amp;gt;delete_records_select($table, $select, array $params=null)&lt;br /&gt;
  /// Delete one or more records from a table which match a particular WHERE clause.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Inserting Records===&lt;br /&gt;
The method to insert records is called aptly enough, insert_record(). The method accepts 4 parameters, but the fourth, &amp;quot;bulk&amp;quot;, in most implementations is unused.&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
o $DB-&amp;gt;insert_record($table, $dataobject, $returnid=true, $bulk=false) &lt;br /&gt;
  /// Insert a record into a table and return the &amp;quot;id&amp;quot; field if required.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
====Example(s)====&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
$record = new stdClass();&lt;br /&gt;
$record-&amp;gt;name         = &#039;overview&#039;;&lt;br /&gt;
$record-&amp;gt;displayorder = &#039;10000&#039;;&lt;br /&gt;
$DB-&amp;gt;insert_record(&#039;quiz_report&#039;, $record, false);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
$record = new stdClass();&lt;br /&gt;
$record-&amp;gt;name         = &#039;overview&#039;;&lt;br /&gt;
$record-&amp;gt;displayorder = &#039;10000&#039;;&lt;br /&gt;
$lastinsertid = $DB-&amp;gt;insert_record(&#039;quiz_report&#039;, $record);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Updating Records===&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
o $DB-&amp;gt;update_record($table, $dataobject, $bulk=false)&lt;br /&gt;
  /// Update a record in a table.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Using Recordsets===&lt;br /&gt;
&lt;br /&gt;
Where the number of records to be retrieved from DB is high, the &#039;&#039;&#039;get_records_xxx()&#039;&#039;&#039; functions above are far from optimal, because they load all the records in memory at the same time. Under those circumstances, it is highly recommended to use these &#039;&#039;&#039;get_recordset_xxx()&#039;&#039;&#039; functions instead, which use one nice mechanism to iterate over all the target records and save a lot of memory.&lt;br /&gt;
&lt;br /&gt;
Only one thing is &#039;&#039;&#039;absolutely important&#039;&#039;&#039;: Don&#039;t forget to close the recordsets after using them! (This will free up a lot of resources in the RDBMS).&lt;br /&gt;
&lt;br /&gt;
Here is the general way to iterate over records using the &#039;&#039;&#039;get_recordset_xxx()&#039;&#039;&#039; functions:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
$rs = $DB-&amp;gt;get_recordset(....) {&lt;br /&gt;
foreach ($rs as $record) {&lt;br /&gt;
    // Do whatever you want with this record&lt;br /&gt;
}&lt;br /&gt;
$rs-&amp;gt;close(); // Don&#039;t forget to close the recordset!&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And this is the list of available functions (100% paired with the get_records_xxx() above):&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
o $DB-&amp;gt;get_recordset($table, array $conditions=null, $sort=&#039;&#039;, $fields=&#039;*&#039;, $limitfrom=0, $limitnum=0) &lt;br /&gt;
  /// Get a number of records as a moodle_recordset where all the given conditions met.&lt;br /&gt;
o $DB-&amp;gt;get_recordset_select($table, $select, array $params=null, $sort=&#039;&#039;, $fields=&#039;*&#039;, $limitfrom=0, $limitnum=0) &lt;br /&gt;
  /// Get a number of records as a moodle_recordset which match a particular WHERE clause.&lt;br /&gt;
o $DB-&amp;gt;get_recordset_sql($sql, array $params=null, $limitfrom=0, $limitnum=0);&lt;br /&gt;
  /// Get a number of records as a moodle_recordset using a SQL statement.&lt;br /&gt;
 &lt;br /&gt;
o $DB-&amp;gt;get_recordset_list($table, $field=&#039;&#039;, $values=&#039;&#039;, $sort=&#039;&#039;, $fields=&#039;*&#039;, $limitfrom=&#039;&#039;, $limitnum=&#039;&#039;) &lt;br /&gt;
  /// Get a number of records as a moodle_recordset where one field matches one list of values.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Delegated transactions===&lt;br /&gt;
&lt;br /&gt;
* Please note some databases do not support transactions (such as the MyISAM MySQL database engine), however all server administrators are strongly encouraged to migrate to databases that support transactions (such as the InnoDB MySQL database engine).&lt;br /&gt;
* Previous versions supported only one level of transaction. Since Moodle 2.0, the DML layer emulates delegated transactions that allow nesting of transactions.&lt;br /&gt;
* Transactions should not be used much in Moodle core; they are intended for various plugins such as web services, enrol and auth plugins.&lt;br /&gt;
* Some subsystems (such as messaging) do not support transactions because is it is not possible to rollback in external systems.&lt;br /&gt;
&lt;br /&gt;
A transaction is started by:&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
$transaction = $DB-&amp;gt;start_delegated_transaction();&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and finished by:&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
$transaction-&amp;gt;allow_commit();&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Usually a transaction is rolled back when an exception is thrown. &amp;lt;code&amp;gt;$transaction-&amp;gt;rollback($ex);&amp;lt;/code&amp;gt; must be used very carefully because it might break compatibility with databases that do not support transactions. Transactions cannot be used as part of expected code flow; they can be used only as an emergency protection of data consistency.&lt;br /&gt;
&lt;br /&gt;
See more details in [[Development:DB layer 2.0 delegated transactions]] or MDL-20625.&lt;br /&gt;
&lt;br /&gt;
====Example(s)====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
global $DB;&lt;br /&gt;
try {&lt;br /&gt;
     $transaction = $DB-&amp;gt;start_delegated_transaction();&lt;br /&gt;
     // Insert a record&lt;br /&gt;
     $DB-&amp;gt;insert(&#039;foo&#039;, $object);&lt;br /&gt;
     $DB-&amp;gt;insert(&#039;bar&#039;, $otherobject);&lt;br /&gt;
&lt;br /&gt;
     // Assuming the both inserts work, we get to the following line.&lt;br /&gt;
     $transaction-&amp;gt;allow_commit();&lt;br /&gt;
} catch(Exception $e) {&lt;br /&gt;
     $transaction-&amp;gt;rollback($e);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Helper Functions===&lt;br /&gt;
&lt;br /&gt;
In order have real cross-db compatibility, there are some helper functions used to build SQL fragments based on the DB Moodle is running. Using them we&#039;ll avoid conditional queries here and there and have those &amp;quot;incompatibilities&amp;quot; fixed once and for ever.&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
o $DB-&amp;gt;sql_bitand($int1, $int2) &lt;br /&gt;
  /// Returns the SQL text to be used in order to perform one bitwise AND &lt;br /&gt;
  /// operation between 2 integers.&lt;br /&gt;
o $DB-&amp;gt;sql_bitnot($int1) &lt;br /&gt;
  /// Returns the SQL text to be used in order to perform one bitwise NOT &lt;br /&gt;
  /// operation with 1 integer.&lt;br /&gt;
o $DB-&amp;gt;sql_bitor($int1, $int2)&lt;br /&gt;
  /// Returns the SQL text to be used in order to perform one bitwise OR &lt;br /&gt;
  /// operation between 2 integers.&lt;br /&gt;
o $DB-&amp;gt;sql_bitxor($int1, $int2) &lt;br /&gt;
  /// Returns the SQL text to be used in order to perform one bitwise XOR &lt;br /&gt;
  /// operation between 2 integers.&lt;br /&gt;
 &lt;br /&gt;
o $DB-&amp;gt;sql_null_from_clause()&lt;br /&gt;
  /// Returns the FROM clause required by some DBs in all SELECT statements.&lt;br /&gt;
 &lt;br /&gt;
o $DB-&amp;gt;sql_ceil($fieldname)&lt;br /&gt;
  /// Returns the correct CEIL expression applied to fieldname.&lt;br /&gt;
o $DB-&amp;gt;sql_ilike()&lt;br /&gt;
  /// Returns the proper SQL to do LIKE in a case-insensitive way.&lt;br /&gt;
o $DB-&amp;gt;sql_length($fieldname)&lt;br /&gt;
  /// Returns the SQL text to be used to calculate the length in characters of one expression.&lt;br /&gt;
o $DB-&amp;gt;sql_modulo($int1, $int2)&lt;br /&gt;
  /// Returns the SQL text to be used in order to calculate module - remainder after division&lt;br /&gt;
o $DB-&amp;gt;sql_position($needle, $haystack)&lt;br /&gt;
  /// Returns the SQL for returning searching one string for the location of another.&lt;br /&gt;
  /// Note: If using placeholders BOTH in $needle and $haystack, they MUST be named placeholders.&lt;br /&gt;
o $DB-&amp;gt;sql_substr($expr, $start, $length=false)&lt;br /&gt;
  /// Returns the proper substr() SQL text used to extract substrings from DB.&lt;br /&gt;
  /// Note: This fuction has changed in Moodle 2.0 and now at least 2 params are mandatory.&lt;br /&gt;
  /// Note: Now it returns the whole SQL text to be used instead of only the function name.&lt;br /&gt;
 &lt;br /&gt;
o $DB-&amp;gt;sql_cast_char2int($fieldname, $text=false)&lt;br /&gt;
  /// Returns the SQL to be used in order to CAST one CHAR column to INTEGER.&lt;br /&gt;
o $DB-&amp;gt;sql_cast_char2real($fieldname, $text=false)&lt;br /&gt;
  /// Returns the SQL to be used in order to CAST one CHAR column to REAL number.&lt;br /&gt;
 &lt;br /&gt;
o $DB-&amp;gt;sql_compare_text($fieldname, $numchars=32) &lt;br /&gt;
  /// Returns the SQL text to be used to compare one TEXT (clob) column.&lt;br /&gt;
  /// with one VARCHAR column.&lt;br /&gt;
o $DB-&amp;gt;sql_order_by_text($fieldname, $numchars=32)&lt;br /&gt;
  /// Returns the SQL text to be used to order by one TEXT (clob) column.&lt;br /&gt;
 &lt;br /&gt;
o $DB-&amp;gt;sql_concat()&lt;br /&gt;
  /// Returns the proper SQL to do CONCAT between the elements passed.&lt;br /&gt;
o $DB-&amp;gt;sql_concat_join($separator=&amp;quot;&#039; &#039;&amp;quot;, $elements=array())&lt;br /&gt;
  /// Returns the proper SQL to do CONCAT between the elements passed using one separator.&lt;br /&gt;
o $DB-&amp;gt;sql_fullname($first=&#039;firstname&#039;, $last=&#039;lastname&#039;)&lt;br /&gt;
  /// Returns the proper SQL to concatenate $firstname and $lastname.&lt;br /&gt;
 &lt;br /&gt;
o $DB-&amp;gt;sql_isempty($tablename, $fieldname, $nullablefield, $textfield)&lt;br /&gt;
  /// Returns the proper SQL to know if one field is empty.&lt;br /&gt;
o $DB-&amp;gt;sql_isnotempty($tablename, $fieldname, $nullablefield, $textfield)&lt;br /&gt;
  /// Returns the proper SQL to know if one field is not empty.&lt;br /&gt;
o $DB-&amp;gt;sql_empty()&lt;br /&gt;
  /// Returns the empty string char used by every supported DB.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
* [[Development:DML exceptions|DML exceptions]]: New DML code is throwing exceptions instead of returning false if anything goes wrong&lt;br /&gt;
* [[Development:DML drivers|DML drivers]]: Database drivers for new DML layer&lt;br /&gt;
* [[Development:DML functions - pre 2.0|DML functions - pre 2.0]]: &#039;&#039;&#039;(deprecated!)&#039;&#039;&#039; For information valid before Moodle 2.0.&lt;br /&gt;
* [[Development:DDL functions|DDL functions]]: Where all the functions used to handle DB objects ([[wikipedia:Data_Definition_Language|DDL]]) are defined.&lt;br /&gt;
* [[Development:DB layer 2.0 examples|DB layer 2.0 examples]]: To see some code examples using various DML functions.&lt;br /&gt;
* [[Development:DB layer 2.0 migration docs|DB layer 2.0 migration docs]]: Information about how to modify your code to work with the new Moodle 2.0 DB layer.&lt;br /&gt;
* [[Development:DTL functions|DTL functions]]: Exporting, importing and moving of data stored in SQL databases&lt;br /&gt;
&lt;br /&gt;
[[Category:DB]]&lt;br /&gt;
[[Category:XMLDB]]&lt;/div&gt;</summary>
		<author><name>Stronk7</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/2x/pl/index.php?title=Broken/Backup_2.0_-_Converters_review_2011-04&amp;diff=83109</id>
		<title>Broken/Backup 2.0 - Converters review 2011-04</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/2x/pl/index.php?title=Broken/Backup_2.0_-_Converters_review_2011-04&amp;diff=83109"/>
		<updated>2011-04-28T22:54:40Z</updated>

		<summary type="html">&lt;p&gt;Stronk7: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Please, for discussing any of the points in the page, do it in the corresponding MDL-xxx issue in the Tracker. TIA! --[[User:Eloy Lafuente (stronk7)|Eloy Lafuente (stronk7)]] 22:45, 26 April 2011 (WST)&lt;br /&gt;
&lt;br /&gt;
=== Ongoing discussion Eloy &amp;amp; Mark (20110428) ===&lt;br /&gt;
&lt;br /&gt;
Three (3) targets are planned, no action on next target will be performed before completing the previous one:&lt;br /&gt;
&lt;br /&gt;
* The &amp;quot;basic&amp;quot; (1st): Be able to restore everything but user-related information.&lt;br /&gt;
* The &amp;quot;desirable&amp;quot; (2nd): Be able to restore activity user-related information.&lt;br /&gt;
* The &amp;quot;complete&amp;quot; (3rd): Rest of information.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
From the review, points 01-19 must be analyzed, discussed and implemented, specially the ones detected as blockers for the consecution of the targets above. The ones not being considered blockers can be left for later, once the &amp;quot;basic&amp;quot; (1st) target has been fulfilled. The review page will show which ones are considered blockers and where (MDL-xxxx) their implementation is going to happen.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Immediate plan, something like:&lt;br /&gt;
* you take a look to those points and add any objection / comment / missing point in the last section of the page.&lt;br /&gt;
* I also take a look to the thing and start implementing some stuff, like the start/end dispatchers and some tests to have them under control.&lt;br /&gt;
* Next day, availability of parties determined, we share thoughts.&lt;br /&gt;
* Next-next day, we start &amp;quot;doing&amp;quot; things :-)&lt;br /&gt;
&lt;br /&gt;
=== Feedback from Mark regarding review ===&lt;br /&gt;
&lt;br /&gt;
==== Related to integration with restore_controller &amp;amp; general behavior ====&lt;br /&gt;
&lt;br /&gt;
* R0401: I see what you are trying to get at here, but seems like over architecting IMO.  For example, you have something that goes from FOO &amp;gt; BAR &amp;gt; MOODLE2 (CONVERTPATH1) and then you have something that goes to FOO &amp;gt; MOODLE2 (CONVERTPATH2) both installed, then your proposal would be necessary.  Though, why would you have both installed?  CONVERTPATH2 would replace CONVERTPATH1 making CONVERTPATH1 obsolete and never used anyways.  Anyways, I&#039;d say let&#039;s hold this off as a fun project after everything else is done.&lt;br /&gt;
:Eloy: The problem with current implementation is that, right now, nothing guarantees [[Development:Backup 2.0 multiple formats|multiple formats]] to be supported, so if we want to have (real example) IMSCC =&amp;gt; BCK19 =&amp;gt; BCK20 current stuff can / cannot work, it depends exclusively on the order returned by convert_factory::converters(). And that doesn&#039;t seem to be reliable at all. That&#039;s the reason for suggesting some simple &amp;quot;best path&amp;quot; implementation (Dijkstra or similar), just to keep out the &amp;quot;random factor&amp;quot; above. Also, note that, in the future, we can also create converters which origin is, exactly, moodle2, and the target can be IMSCC / BCK19 / WHATEVER (aka exporters), so potentially we could provide automatic conversion between any of them transparently. Say, convert one BCK19 package into one IMSCC or whatever. Just a matter of using the corresponding (best) path.&lt;br /&gt;
* R0402: I don&#039;t see much of an advantage here as by moving to static you then loose access to all of your instance variables and methods.  Cost of creating a new instance shouldn&#039;t be that terrible.  If this is required, fine, let&#039;s do it.&lt;br /&gt;
:Eloy: Surely it&#039;s not important now, as far as current converter (moodle1) have nothing important on its constructor. And we have not hundreds of converters. But anything can grow and seems like a logic requirement to avoid instantiation of non-used stuff.&lt;br /&gt;
** As for checking the environment, I think that can be done in can_convert right?  Part of figuring out if it can handle the conversion.&lt;br /&gt;
:Eloy: But what if one converter needs to create one webservice request over, say, SOAP before performing the conversion, or requires SSL... and the server does not fulfill those requirements. Once again static separated methods sound like the best solution.&lt;br /&gt;
* R0403-5: These are fine.  We should probably make our own converter_exceptions, what do you think?&lt;br /&gt;
:Eloy: Yes. I think one abstract converter_exception (exactly like backup_exception) is ok, then each converter extends it. Also, the steps/tasks/plans need their exceptions, surely extending base_xxxx_exception&lt;br /&gt;
&lt;br /&gt;
==== Related to the converters/moodle1 infrastructure ====&lt;br /&gt;
&lt;br /&gt;
* R0408: There is execute_after_convert but really, that&#039;s called after the XML has been processed.  Execution flow is kind of weird due to the processor.  We could add another stage of processing, though I do think execution flow will greatly improve once start/end callbacks are being used.&lt;br /&gt;
:Eloy: Agree, I think start/end dispatchers will alleviate a lot current after_execute() code. So perhaps we need to implement R0409 ASAP (priority1) and move stuff there to see how things improve.&lt;br /&gt;
* R0410: I&#039;m not sure what this is.&lt;br /&gt;
:Eloy: I mean, right now, the get_deprecated/renamed/new() methods belong to the moodle1_structure_step. And that is ok as far as there aren&#039;t collisions (repeated tag names in the tree being processed by the step). What if we have the &amp;quot;timemodified&amp;quot; tag, both in the forum and in the forum_post elements and we want them to be &amp;quot;renamed&amp;quot; diferently. That caused me to think that such transformations should be defined on each convert_path_element and not in the steps (to avoid those collisions). And then, the convert_data() method could be applied automatically, so the $data arriving to the convert_xxxx($data) methods could have all those transformations (and lowercase too) automatically performed. Just that.&lt;br /&gt;
* Rest are fine.&lt;br /&gt;
&lt;br /&gt;
==== Related to coding in general ====&lt;br /&gt;
&lt;br /&gt;
* Sounds fine.&lt;/div&gt;</summary>
		<author><name>Stronk7</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/2x/pl/index.php?title=Broken/Backup_2.0_-_Converters_review_2011-04&amp;diff=83108</id>
		<title>Broken/Backup 2.0 - Converters review 2011-04</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/2x/pl/index.php?title=Broken/Backup_2.0_-_Converters_review_2011-04&amp;diff=83108"/>
		<updated>2011-04-28T22:53:12Z</updated>

		<summary type="html">&lt;p&gt;Stronk7: /* Related to the converters/moodle1 infrastructure */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Please, for discussing any of the points in the page, do it in the corresponding MDL-xxx issue in the Tracker. TIA! --[[User:Eloy Lafuente (stronk7)|Eloy Lafuente (stronk7)]] 22:45, 26 April 2011 (WST)&lt;br /&gt;
&lt;br /&gt;
=== Ongoing discussion Eloy &amp;amp; Mark (20110428) ===&lt;br /&gt;
&lt;br /&gt;
Three (3) targets are planned, no action on next target will be performed before completing the previous one:&lt;br /&gt;
&lt;br /&gt;
* The &amp;quot;basic&amp;quot; (1st): Be able to restore everything but user-related information.&lt;br /&gt;
* The &amp;quot;desirable&amp;quot; (2nd): Be able to restore activity user-related information.&lt;br /&gt;
* The &amp;quot;complete&amp;quot; (3rd): Rest of information.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
From the review, points 01-19 must be analyzed, discussed and implemented, specially the ones detected as blockers for the consecution of the targets above. The ones not being considered blockers can be left for later, once the &amp;quot;basic&amp;quot; (1st) target has been fulfilled. The review page will show which ones are considered blockers and where (MDL-xxxx) their implementation is going to happen.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Immediate plan, something like:&lt;br /&gt;
* you take a look to those points and add any objection / comment / missing point in the last section of the page.&lt;br /&gt;
* I also take a look to the thing and start implementing some stuff, like the start/end dispatchers and some tests to have them under control.&lt;br /&gt;
* Next day, availability of parties determined, we share thoughts.&lt;br /&gt;
* Next-next day, we start &amp;quot;doing&amp;quot; things :-)&lt;br /&gt;
&lt;br /&gt;
=== Feedback from Mark regarding review ===&lt;br /&gt;
&lt;br /&gt;
==== Related to integration with restore_controller &amp;amp; general behavior ====&lt;br /&gt;
&lt;br /&gt;
* R0401: I see what you are trying to get at here, but seems like over architecting IMO.  For example, you have something that goes from FOO &amp;gt; BAR &amp;gt; MOODLE2 (CONVERTPATH1) and then you have something that goes to FOO &amp;gt; MOODLE2 (CONVERTPATH2) both installed, then your proposal would be necessary.  Though, why would you have both installed?  CONVERTPATH2 would replace CONVERTPATH1 making CONVERTPATH1 obsolete and never used anyways.  Anyways, I&#039;d say let&#039;s hold this off as a fun project after everything else is done.&lt;br /&gt;
::The problem with current implementation is that, right now, nothing guarantees [[Development:Backup 2.0 multiple formats|multiple formats]] to be supported, so if we want to have (real example) IMSCC =&amp;gt; BCK19 =&amp;gt; BCK20 current stuff can / cannot work, it depends exclusively on the order returned by convert_factory::converters(). And that doesn&#039;t seem to be reliable at all. That&#039;s the reason for suggesting some simple &amp;quot;best path&amp;quot; implementation (Dijkstra or similar), just to keep out the &amp;quot;random factor&amp;quot; above. Also, note that, in the future, we can also create converters which origin is, exactly, moodle2, and the target can be IMSCC / BCK19 / WHATEVER (aka exporters), so potentially we could provide automatic conversion between any of them transparently. Say, convert one BCK19 package into one IMSCC or whatever. Just a matter of using the corresponding (best) path.&lt;br /&gt;
* R0402: I don&#039;t see much of an advantage here as by moving to static you then loose access to all of your instance variables and methods.  Cost of creating a new instance shouldn&#039;t be that terrible.  If this is required, fine, let&#039;s do it.&lt;br /&gt;
::Surely it&#039;s not important now, as far as current converter (moodle1) have nothing important on its constructor. And we have not hundreds of converters. But anything can grow and seems like a logic requirement to avoid instantiation of non-used stuff.&lt;br /&gt;
** As for checking the environment, I think that can be done in can_convert right?  Part of figuring out if it can handle the conversion.&lt;br /&gt;
::But what if one converter needs to create one webservice request over, say, SOAP before performing the conversion, or requires SSL... and the server does not fulfill those requirements. Once again static separated methods sound like the best solution.&lt;br /&gt;
* R0403-5: These are fine.  We should probably make our own converter_exceptions, what do you think?&lt;br /&gt;
:: Yes. I think one abstract converter_exception (exactly like backup_exception) is ok, then each converter extends it. Also, the steps/tasks/plans need their exceptions, surely extending base_xxxx_exception&lt;br /&gt;
&lt;br /&gt;
==== Related to the converters/moodle1 infrastructure ====&lt;br /&gt;
&lt;br /&gt;
* R0408: There is execute_after_convert but really, that&#039;s called after the XML has been processed.  Execution flow is kind of weird due to the processor.  We could add another stage of processing, though I do think execution flow will greatly improve once start/end callbacks are being used.&lt;br /&gt;
::Agree, I think start/end dispatchers will alleviate a lot current after_execute() code. So perhaps we need to implement R0409 ASAP (priority1) and move stuff there to see how things improve.&lt;br /&gt;
* R0410: I&#039;m not sure what this is.&lt;br /&gt;
::I mean, right now, the get_deprecated/renamed/new() methods belong to the moodle1_structure_step. And that is ok as far as there aren&#039;t collisions (repeated tag names in the tree being processed by the step). What if we have the &amp;quot;timemodified&amp;quot; tag, both in the forum and in the forum_post elements and we want them to be &amp;quot;renamed&amp;quot; diferently. That caused me to think that such transformations should be defined on each convert_path_element and not in the steps (to avoid those collisions). And then, the convert_data() method could be applied automatically, so the $data arriving to the convert_xxxx($data) methods could have all those transformations (and lowercase too) automatically performed. Just that.&lt;br /&gt;
* Rest are fine.&lt;br /&gt;
&lt;br /&gt;
==== Related to coding in general ====&lt;br /&gt;
&lt;br /&gt;
* Sounds fine.&lt;/div&gt;</summary>
		<author><name>Stronk7</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/2x/pl/index.php?title=Broken/Backup_2.0_-_Converters_review_2011-04&amp;diff=83107</id>
		<title>Broken/Backup 2.0 - Converters review 2011-04</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/2x/pl/index.php?title=Broken/Backup_2.0_-_Converters_review_2011-04&amp;diff=83107"/>
		<updated>2011-04-28T22:42:27Z</updated>

		<summary type="html">&lt;p&gt;Stronk7: /* Related to integration with restore_controller &amp;amp; general behavior */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Please, for discussing any of the points in the page, do it in the corresponding MDL-xxx issue in the Tracker. TIA! --[[User:Eloy Lafuente (stronk7)|Eloy Lafuente (stronk7)]] 22:45, 26 April 2011 (WST)&lt;br /&gt;
&lt;br /&gt;
=== Ongoing discussion Eloy &amp;amp; Mark (20110428) ===&lt;br /&gt;
&lt;br /&gt;
Three (3) targets are planned, no action on next target will be performed before completing the previous one:&lt;br /&gt;
&lt;br /&gt;
* The &amp;quot;basic&amp;quot; (1st): Be able to restore everything but user-related information.&lt;br /&gt;
* The &amp;quot;desirable&amp;quot; (2nd): Be able to restore activity user-related information.&lt;br /&gt;
* The &amp;quot;complete&amp;quot; (3rd): Rest of information.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
From the review, points 01-19 must be analyzed, discussed and implemented, specially the ones detected as blockers for the consecution of the targets above. The ones not being considered blockers can be left for later, once the &amp;quot;basic&amp;quot; (1st) target has been fulfilled. The review page will show which ones are considered blockers and where (MDL-xxxx) their implementation is going to happen.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Immediate plan, something like:&lt;br /&gt;
* you take a look to those points and add any objection / comment / missing point in the last section of the page.&lt;br /&gt;
* I also take a look to the thing and start implementing some stuff, like the start/end dispatchers and some tests to have them under control.&lt;br /&gt;
* Next day, availability of parties determined, we share thoughts.&lt;br /&gt;
* Next-next day, we start &amp;quot;doing&amp;quot; things :-)&lt;br /&gt;
&lt;br /&gt;
=== Feedback from Mark regarding review ===&lt;br /&gt;
&lt;br /&gt;
==== Related to integration with restore_controller &amp;amp; general behavior ====&lt;br /&gt;
&lt;br /&gt;
* R0401: I see what you are trying to get at here, but seems like over architecting IMO.  For example, you have something that goes from FOO &amp;gt; BAR &amp;gt; MOODLE2 (CONVERTPATH1) and then you have something that goes to FOO &amp;gt; MOODLE2 (CONVERTPATH2) both installed, then your proposal would be necessary.  Though, why would you have both installed?  CONVERTPATH2 would replace CONVERTPATH1 making CONVERTPATH1 obsolete and never used anyways.  Anyways, I&#039;d say let&#039;s hold this off as a fun project after everything else is done.&lt;br /&gt;
::The problem with current implementation is that, right now, nothing guarantees [[Development:Backup 2.0 multiple formats|multiple formats]] to be supported, so if we want to have (real example) IMSCC =&amp;gt; BCK19 =&amp;gt; BCK20 current stuff can / cannot work, it depends exclusively on the order returned by convert_factory::converters(). And that doesn&#039;t seem to be reliable at all. That&#039;s the reason for suggesting some simple &amp;quot;best path&amp;quot; implementation (Dijkstra or similar), just to keep out the &amp;quot;random factor&amp;quot; above. Also, note that, in the future, we can also create converters which origin is, exactly, moodle2, and the target can be IMSCC / BCK19 / WHATEVER (aka exporters), so potentially we could provide automatic conversion between any of them transparently. Say, convert one BCK19 package into one IMSCC or whatever. Just a matter of using the corresponding (best) path.&lt;br /&gt;
* R0402: I don&#039;t see much of an advantage here as by moving to static you then loose access to all of your instance variables and methods.  Cost of creating a new instance shouldn&#039;t be that terrible.  If this is required, fine, let&#039;s do it.&lt;br /&gt;
::Surely it&#039;s not important now, as far as current converter (moodle1) have nothing important on its constructor. And we have not hundreds of converters. But anything can grow and seems like a logic requirement to avoid instantiation of non-used stuff.&lt;br /&gt;
** As for checking the environment, I think that can be done in can_convert right?  Part of figuring out if it can handle the conversion.&lt;br /&gt;
::But what if one converter needs to create one webservice request over, say, SOAP before performing the conversion, or requires SSL... and the server does not fulfill those requirements. Once again static separated methods sound like the best solution.&lt;br /&gt;
* R0403-5: These are fine.  We should probably make our own converter_exceptions, what do you think?&lt;br /&gt;
:: Yes. I think one abstract converter_exception (exactly like backup_exception) is ok, then each converter extends it. Also, the steps/tasks/plans need their exceptions, surely extending base_xxxx_exception&lt;br /&gt;
&lt;br /&gt;
==== Related to the converters/moodle1 infrastructure ====&lt;br /&gt;
&lt;br /&gt;
* R0408: There is execute_after_convert but really, that&#039;s called after the XML has been processed.  Execution flow is kind of weird due to the processor.  We could add another stage of processing, though I do think execution flow will greatly improve once start/end callbacks are being used.&lt;br /&gt;
* R0410: I&#039;m not sure what this is.&lt;br /&gt;
* Rest are fine.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Related to coding in general ====&lt;br /&gt;
&lt;br /&gt;
* Sounds fine.&lt;/div&gt;</summary>
		<author><name>Stronk7</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/2x/pl/index.php?title=Broken/Backup_2.0_-_Converters_review_2011-04&amp;diff=83095</id>
		<title>Broken/Backup 2.0 - Converters review 2011-04</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/2x/pl/index.php?title=Broken/Backup_2.0_-_Converters_review_2011-04&amp;diff=83095"/>
		<updated>2011-04-28T18:52:46Z</updated>

		<summary type="html">&lt;p&gt;Stronk7: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Please, for discussing any of the points in the page, do it in the corresponding MDL-xxx issue in the Tracker. TIA! --[[User:Eloy Lafuente (stronk7)|Eloy Lafuente (stronk7)]] 22:45, 26 April 2011 (WST)&lt;br /&gt;
&lt;br /&gt;
=== Ongoing discussion Eloy &amp;amp; Mark (20110428) ===&lt;br /&gt;
&lt;br /&gt;
Three (3) targets are planned, no action on next target will be performed before completing the previous one:&lt;br /&gt;
&lt;br /&gt;
* The &amp;quot;basic&amp;quot; (1st): Be able to restore everything but user-related information.&lt;br /&gt;
* The &amp;quot;desirable&amp;quot; (2nd): Be able to restore activity user-related information.&lt;br /&gt;
* The &amp;quot;complete&amp;quot; (3rd): Rest of information.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
From the review, points 01-19 must be analyzed, discussed and implemented, specially the ones detected as blockers for the consecution of the targets above. The ones not being considered blockers can be left for later, once the &amp;quot;basic&amp;quot; (1st) target has been fulfilled. The review page will show which ones are considered blockers and where (MDL-xxxx) their implementation is going to happen.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Immediate plan, something like:&lt;br /&gt;
* you take a look to those points and add any objection / comment / missing point in the last section of the page.&lt;br /&gt;
* I also take a look to the thing and start implementing some stuff, like the start/end dispatchers and some tests to have them under control.&lt;br /&gt;
* Next day, availability of parties determined, we share thoughts.&lt;br /&gt;
* Next-next day, we start &amp;quot;doing&amp;quot; things :-)&lt;/div&gt;</summary>
		<author><name>Stronk7</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/2x/pl/index.php?title=Broken/Backup_2.0_-_Converters_review_2011-04&amp;diff=83094</id>
		<title>Broken/Backup 2.0 - Converters review 2011-04</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/2x/pl/index.php?title=Broken/Backup_2.0_-_Converters_review_2011-04&amp;diff=83094"/>
		<updated>2011-04-28T18:40:24Z</updated>

		<summary type="html">&lt;p&gt;Stronk7: /* Ongoing discussion Eloy &amp;amp; Mark (20110428) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Please, for discussing any of the points in the page, do it in the corresponding MDL-xxx issue in the Tracker. TIA! --[[User:Eloy Lafuente (stronk7)|Eloy Lafuente (stronk7)]] 22:45, 26 April 2011 (WST)&lt;br /&gt;
&lt;br /&gt;
=== Ongoing discussion Eloy &amp;amp; Mark (20110428) ===&lt;br /&gt;
&lt;br /&gt;
Three (3) targets are planned, no action on next target will be performed before completing the previous one:&lt;br /&gt;
&lt;br /&gt;
* The &amp;quot;basic&amp;quot; (1st): Be able to restore everything but user-related information.&lt;br /&gt;
* The &amp;quot;desirable&amp;quot; (2nd): Be able to restore activity user-related information.&lt;br /&gt;
* The &amp;quot;complete&amp;quot; (3rd): Rest of information.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
From the review, points 01-19 must be analyzed, discussed and implemented, specially the ones detected as blockers for the consecution of the targets above. The ones not being considered blockers can be left for later, once the &amp;quot;basic&amp;quot; (1st) target has been fulfilled. The review page will show which ones are considered blockers and where (MDL-xxxx) their implementation is going to happen.&lt;/div&gt;</summary>
		<author><name>Stronk7</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/2x/pl/index.php?title=Broken/Backup_2.0_-_Converters_review_2011-04&amp;diff=83093</id>
		<title>Broken/Backup 2.0 - Converters review 2011-04</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/2x/pl/index.php?title=Broken/Backup_2.0_-_Converters_review_2011-04&amp;diff=83093"/>
		<updated>2011-04-28T18:40:10Z</updated>

		<summary type="html">&lt;p&gt;Stronk7: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Please, for discussing any of the points in the page, do it in the corresponding MDL-xxx issue in the Tracker. TIA! --[[User:Eloy Lafuente (stronk7)|Eloy Lafuente (stronk7)]] 22:45, 26 April 2011 (WST)&lt;br /&gt;
&lt;br /&gt;
=== Ongoing discussion Eloy &amp;amp; Mark (20110428) ===&lt;br /&gt;
&lt;br /&gt;
Three (3) targets are planned, no action on next target will be performed before completing the previous one:&lt;br /&gt;
&lt;br /&gt;
* The &amp;quot;basic&amp;quot; (1st): Be able to restore everything but user-related information.&lt;br /&gt;
* The &amp;quot;desirable&amp;quot; (2nd): Be able to restore activity user-related information.&lt;br /&gt;
* The &amp;quot;complete&amp;quot; (3rd): Rest of information.&lt;br /&gt;
&lt;br /&gt;
From the review, points 01-19 must be analyzed, discussed and implemented, specially the ones detected as blockers for the consecution of the targets above. The ones not being considered blockers can be left for later, once the &amp;quot;basic&amp;quot; (1st) target has been fulfilled. The review page will show which ones are considered blockers and where (MDL-xxxx) their implementation is going to happen.&lt;/div&gt;</summary>
		<author><name>Stronk7</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/2x/pl/index.php?title=Broken/Backup_2.0_-_Converters_review_2011-04&amp;diff=83092</id>
		<title>Broken/Backup 2.0 - Converters review 2011-04</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/2x/pl/index.php?title=Broken/Backup_2.0_-_Converters_review_2011-04&amp;diff=83092"/>
		<updated>2011-04-28T18:36:45Z</updated>

		<summary type="html">&lt;p&gt;Stronk7: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Please, for discussing any of the points in the page, do it in the corresponding MDL-xxx issue in the Tracker. TIA! --[[User:Eloy Lafuente (stronk7)|Eloy Lafuente (stronk7)]] 22:45, 26 April 2011 (WST)&lt;br /&gt;
&lt;br /&gt;
=== Ongoing discussion Eloy &amp;amp; Mark ===&lt;br /&gt;
&lt;br /&gt;
Three (3) targets are planned, no action on next target will be performed before completing the previous one:&lt;br /&gt;
&lt;br /&gt;
* The &amp;quot;basic&amp;quot; (1st): Be able to restore everything but user-related information.&lt;br /&gt;
* The &amp;quot;desirable&amp;quot; (2nd): Be able to restore activity user-related information.&lt;br /&gt;
* The &amp;quot;complete&amp;quot; (3rd): Rest of information.&lt;/div&gt;</summary>
		<author><name>Stronk7</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/2x/pl/index.php?title=Backup_2.0_-_Converters_review_2011-04&amp;diff=83091</id>
		<title>Backup 2.0 - Converters review 2011-04</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/2x/pl/index.php?title=Backup_2.0_-_Converters_review_2011-04&amp;diff=83091"/>
		<updated>2011-04-28T18:22:24Z</updated>

		<summary type="html">&lt;p&gt;Stronk7: /* Related to pending &amp;amp; tricky areas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Development:Backup 2.0|Backup 2.0]] &amp;gt; [[Development:Backup 2.0 - Provide upwards compatibility of Moodle 1.9.x backups|Backup 1.9 =&amp;gt; 2.x main page]] &amp;gt; Review 2011-04&lt;br /&gt;
{{Template:Development:Backup 2.0}}{{Moodle_2.1}}&lt;br /&gt;
&lt;br /&gt;
This page summarizes the results of the review performed (on April 2011) over the code available at https://github.com/mrmark/moodle related to the implementation of a general solution for the creation and support of moodle restore converters and its first implementation as one Moodle 1.9 =&amp;gt; 2.x converter.&lt;br /&gt;
&lt;br /&gt;
=== References ===&lt;br /&gt;
&lt;br /&gt;
* MDL-22414 - the main tracker issue for this task.&lt;br /&gt;
* [[Development:Backup 2.0 - Provide upwards compatibility of Moodle 1.9.x backups|Backup 1.9 =&amp;gt; 2.x article]] in Moodle Docs.&lt;br /&gt;
* [http://tracker.moodle.org/secure/attachment/23241/Moodle1.9to2.0Restore.pdf PDF with initial implementation plan].&lt;br /&gt;
* [https://github.com/mrmark/moodle/compare/master...converters_wip Development branch changes] &lt;br /&gt;
&lt;br /&gt;
=== Nomenclature ===&lt;br /&gt;
&lt;br /&gt;
* The review results are shown below as one list of numbered points, briefly explained, with link to corresponding MDL-xxxx (subtask of MDL-22414), where any discussion / agreement / coding should happen.&lt;br /&gt;
* All the MDL-xxxx issue created will begin with R04xx to note they have been ignited as part of this review process and the point they correspond to.&lt;br /&gt;
* Each point below includes one short &amp;quot;status&amp;quot; message in order to know the immediate actions that must be performed on it.&lt;br /&gt;
* New points can be added to the review as long as discussion / agreement happens, if necessary.&lt;br /&gt;
&lt;br /&gt;
=== Global summary ===&lt;br /&gt;
&lt;br /&gt;
* Overall, all code seems to be in correct places and be correct code.&lt;br /&gt;
* The main infrastructure parts (base/plan/moodle1 converters and plan/task/step architectures) are ok, though their APIs would need some improvements detailed below.&lt;br /&gt;
* There are a lot of stuff missing / todo. Files, users, enrolments, plugins, tricky activities, comments, grades...&lt;br /&gt;
* We need to push-push-push (4 weeks to freeze!).&lt;br /&gt;
&lt;br /&gt;
=== The list ===&lt;br /&gt;
&lt;br /&gt;
==== Related to integration with restore_controller &amp;amp; general behavior ====&lt;br /&gt;
&lt;br /&gt;
* R0401: status: to code. Right now, the to_moodle2_format() performs instantiation of all available converters + simple loop to get the conversions to perform. Instead, it should be possible to use exclusively static methods, returning origin format, target format and cost of the conversion, and then finding the best path or so. Note this is trivial right now but can be a useful general approach if new converters arrive (core and 3rd part).&lt;br /&gt;
&lt;br /&gt;
* R0402: status: to code. The can_convert() function can be static too, passing tempdir as param. Also, the same function (or another one, mandatory) should check if all the PHP/server requirements are satisfied or no (some converters can need extra stuff available in order to be able to perform conversions).&lt;br /&gt;
&lt;br /&gt;
* R0403: status: to discuss. After each conversion, the original source directory is deleted and replaced by the converted one. This makes things complex to trace or perform repeated conversions and also, doesn&#039;t observe the $CFG-&amp;gt;keeptempdirectoriesonbackup completely. We should be able to keep temp stuff undeleted if desired and, perhaps too, be able to instruct the restore controller about tempdir changes.&lt;br /&gt;
&lt;br /&gt;
* R0404: status: to code. Exceptions: It needs to be decided if we are going to use own converter_exception/s or restore_exception/s and use them constantly along all the code base.&lt;br /&gt;
&lt;br /&gt;
* R0405: status: to code. Logging: Converters stuff must inherit / use restore_controller logging facilities.&lt;br /&gt;
&lt;br /&gt;
==== Related to the converters/moodle1 infrastructure ====&lt;br /&gt;
&lt;br /&gt;
* R0406: status: to discuss. All the parser / processor / path_elelement stuff is part of the abstract plan_converter. That stuff should be moved to moodle1_converter as far as it is highly dependent / tidied with the conversion particularities.&lt;br /&gt;
&lt;br /&gt;
* R0407: status: to discuss (not important). About converters, should class names and file names match, i.e. converter.class.php =&amp;gt; moodle1_converter.class.php&lt;br /&gt;
&lt;br /&gt;
* R0408: status: to discuss. On restore, we have both after_restore() methods available in steps (executed when the step execution ends) and in tasks (executed when the whole plan execution ends). Do we need this duality in plan_converter, or is it enough with current one. Right now it seems that we are using a lot these methods to do the work, and process_xxx() should be used instead (together with next point).&lt;br /&gt;
&lt;br /&gt;
* R0409: status: to code. Since some weeks ago the notify_path_start/end() methods are available in the xml processor, should we start using them to call some stuff in converter, able to dispatch to start_xxxx() and end_xxxx() methods in the converter steps. It would help a lot with both starting/closing XML tags, creating and closing xml files, or any other pre/post stuff needing to be executed at certain stages.&lt;br /&gt;
&lt;br /&gt;
* R0410: status: to discuss. The deprecated/new/renamed elements / mutate_datum stuff. Perhaps it should be moved from steps to path_elements instead, so each path element autocontains the basic transformations to be performed on data and they are applied automatically. It seems a better place for that definitions. Or, alternatively, we&#039;ll need deprecated/new/renamed/mutate_xxxx() methods, one for each path.&lt;br /&gt;
&lt;br /&gt;
* R0411: status: to code. After looking current uses of the xml writer, it seems clear that we need some extra methods, able to print one tag completely, push/pop last open tag and other commodities in order to make coding easier.&lt;br /&gt;
&lt;br /&gt;
* R0412: status: to code. The &amp;quot;trick&amp;quot; in the parser about dynamically modify /MOD paths seems ok (I cannot imagine another way to implement it). Similar magic will be needed for blocks and surely, the start/end implementation above will need a similar way to handle/dispatch processing.&lt;br /&gt;
&lt;br /&gt;
* R0413: status: to code. Some raw accesses to the backup_ids_temp DB stuff must be modified to use helper functions. Also, the use of the table in get_context() can be really slow (text comparison). Look for some alternative.&lt;br /&gt;
&lt;br /&gt;
* R0414: status: to code. The convert_file() method uses the backup_ids_temp to get sequential fileid values. It should be enough (completely safe), to use one static (in memory) generator instead. No concurrence problems at all IMO.&lt;br /&gt;
&lt;br /&gt;
* R0415: status: to discuss. Support for plugins is a must as far as at least qtypes require it. Note that question types are going to suffer one major revamp on Moodle 2.1, so their final architecture is unknown right now (different from both 1.9 and 2.0).&lt;br /&gt;
&lt;br /&gt;
* R0416: status: to code (tiny detail). In current moodle1_conversion, original_site_identifier should be generated only if there is one original identifier. Right now it saves one &amp;quot;?&amp;quot; that can lead to wrong results detecting same sites.&lt;br /&gt;
&lt;br /&gt;
==== Related to coding in general ====&lt;br /&gt;
&lt;br /&gt;
* R0417: status: to code. Copyright messages are required on each new file. It must be the standard one with GPL3 msg and MR/Mark/whatever copyright.&lt;br /&gt;
&lt;br /&gt;
* R0418: status: to code. We should have as many tests as possible, specially testing all the infrastructure stuff, in order to guarantee it continues working as expected after any refactor / modification. Right now it&#039;s practically inexistent.&lt;br /&gt;
&lt;br /&gt;
* R0419: status: to do periodically. We need to keep the main repo for all the project &amp;quot;converters_wip&amp;quot; in sync (merged) with current moodle.git master branch in order to ensure stuff will land properly (conflicts-free) and converters will be able to use any new feature / improvement available.&lt;br /&gt;
&lt;br /&gt;
==== Related to pending &amp;amp; tricky areas ====&lt;br /&gt;
&lt;br /&gt;
* R0420: status: to code. There are a lot of areas which coding hasn&#039;t been ignited yet (surely to pending work in the list above, don&#039;t worry). Here there is a brief ordered list, annotating the ones that will be really tricky:&lt;br /&gt;
** Users and enrollments: All the users with their complete information must be saved to new users.xml file and each process_xxx() method must, continuously, be annotating needed uses in order to generate proper inforef.xml files. Enrolments will be all moved to manual ones (this needs confirmation).&lt;br /&gt;
** Workshop activity: Completely revamped in 2.0. It has proper subplugins. Upgrade code needs to be deeply analyzed and XML differences too to know how to implement it. (contact: David).&lt;br /&gt;
** Wiki activity: Also brand new in 2.0. Upgrade needs analysis and XML differences too. (contact: Dongsheng).&lt;br /&gt;
** Resource activity: Split into  file/folder/page/url activities. The structure is simple (no user data) but the split makes it really tricky. Also very file-intensive. Upgrade code needs analysis and XML differences (contact: Petr).&lt;br /&gt;
** Files: 1.9 files can had site/course files (apart from the ones &amp;quot;owned&amp;quot; by the module @ moddata). They must be annotated and moved to new files.xml &amp;amp; storage. There is some code already but is not used in the general converter helper stuff (should be moodle1 converter specific instead?).&lt;br /&gt;
** Gradebook: There are important differences between how 1.9 and 2.0 backup information is handled. Scales / outcomes / grade items need annotation in inforef.xml files and also there are new xml files designed to store specifically grades (categories, items, grades...) information. Need analysis. (contact: Andrew).&lt;br /&gt;
&lt;br /&gt;
====After review, organization====&lt;br /&gt;
&lt;br /&gt;
This section will be used to annotate any agreement / conclusion / organization for the next weeks in case the Tracker isn&#039;t enough to do so. Feel free to use it, beloved colleagues, always using the R04xx nomenclature for referencing exact stuff, plz.&lt;br /&gt;
&lt;br /&gt;
=== See also ===&lt;br /&gt;
&lt;br /&gt;
* Go back to [[Development:Backup 2.0|Backup 2.0]] &amp;gt; [[Development:Backup 2.0 - Provide upwards compatibility of Moodle 1.9.x backups|Backup 1.9 =&amp;gt; 2.x main page]].&lt;/div&gt;</summary>
		<author><name>Stronk7</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/2x/pl/index.php?title=Backup_2.0_-_Converters_review_2011-04&amp;diff=83082</id>
		<title>Backup 2.0 - Converters review 2011-04</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/2x/pl/index.php?title=Backup_2.0_-_Converters_review_2011-04&amp;diff=83082"/>
		<updated>2011-04-28T10:17:32Z</updated>

		<summary type="html">&lt;p&gt;Stronk7: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Development:Backup 2.0|Backup 2.0]] &amp;gt; [[Development:Backup 2.0 - Provide upwards compatibility of Moodle 1.9.x backups|Backup 1.9 =&amp;gt; 2.x main page]] &amp;gt; Review 2011-04&lt;br /&gt;
{{Template:Development:Backup 2.0}}{{Moodle_2.1}}&lt;br /&gt;
&lt;br /&gt;
This page summarizes the results of the review performed (on April 2011) over the code available at https://github.com/mrmark/moodle related to the implementation of a general solution for the creation and support of moodle restore converters and its first implementation as one Moodle 1.9 =&amp;gt; 2.x converter.&lt;br /&gt;
&lt;br /&gt;
=== References ===&lt;br /&gt;
&lt;br /&gt;
* MDL-22414 - the main tracker issue for this task.&lt;br /&gt;
* [[Development:Backup 2.0 - Provide upwards compatibility of Moodle 1.9.x backups|Backup 1.9 =&amp;gt; 2.x article]] in Moodle Docs.&lt;br /&gt;
* [http://tracker.moodle.org/secure/attachment/23241/Moodle1.9to2.0Restore.pdf PDF with initial implementation plan].&lt;br /&gt;
* [https://github.com/mrmark/moodle/compare/master...converters_wip Development branch changes] &lt;br /&gt;
&lt;br /&gt;
=== Nomenclature ===&lt;br /&gt;
&lt;br /&gt;
* The review results are shown below as one list of numbered points, briefly explained, with link to corresponding MDL-xxxx (subtask of MDL-22414), where any discussion / agreement / coding should happen.&lt;br /&gt;
* All the MDL-xxxx issue created will begin with R04xx to note they have been ignited as part of this review process and the point they correspond to.&lt;br /&gt;
* Each point below includes one short &amp;quot;status&amp;quot; message in order to know the immediate actions that must be performed on it.&lt;br /&gt;
* New points can be added to the review as long as discussion / agreement happens, if necessary.&lt;br /&gt;
&lt;br /&gt;
=== Global summary ===&lt;br /&gt;
&lt;br /&gt;
* Overall, all code seems to be in correct places and be correct code.&lt;br /&gt;
* The main infrastructure parts (base/plan/moodle1 converters and plan/task/step architectures) are ok, though their APIs would need some improvements detailed below.&lt;br /&gt;
* There are a lot of stuff missing / todo. Files, users, enrolments, plugins, tricky activities, comments, grades...&lt;br /&gt;
* We need to push-push-push (4 weeks to freeze!).&lt;br /&gt;
&lt;br /&gt;
=== The list ===&lt;br /&gt;
&lt;br /&gt;
==== Related to integration with restore_controller &amp;amp; general behavior ====&lt;br /&gt;
&lt;br /&gt;
* R0401: status: to code. Right now, the to_moodle2_format() performs instantiation of all available converters + simple loop to get the conversions to perform. Instead, it should be possible to use exclusively static methods, returning origin format, target format and cost of the conversion, and then finding the best path or so. Note this is trivial right now but can be a useful general approach if new converters arrive (core and 3rd part).&lt;br /&gt;
&lt;br /&gt;
* R0402: status: to code. The can_convert() function can be static too, passing tempdir as param. Also, the same function (or another one, mandatory) should check if all the PHP/server requirements are satisfied or no (some converters can need extra stuff available in order to be able to perform conversions).&lt;br /&gt;
&lt;br /&gt;
* R0403: status: to discuss. After each conversion, the original source directory is deleted and replaced by the converted one. This makes things complex to trace or perform repeated conversions and also, doesn&#039;t observe the $CFG-&amp;gt;keeptempdirectoriesonbackup completely. We should be able to keep temp stuff undeleted if desired and, perhaps too, be able to instruct the restore controller about tempdir changes.&lt;br /&gt;
&lt;br /&gt;
* R0404: status: to code. Exceptions: It needs to be decided if we are going to use own converter_exception/s or restore_exception/s and use them constantly along all the code base.&lt;br /&gt;
&lt;br /&gt;
* R0405: status: to code. Logging: Converters stuff must inherit / use restore_controller logging facilities.&lt;br /&gt;
&lt;br /&gt;
==== Related to the converters/moodle1 infrastructure ====&lt;br /&gt;
&lt;br /&gt;
* R0406: status: to discuss. All the parser / processor / path_elelement stuff is part of the abstract plan_converter. That stuff should be moved to moodle1_converter as far as it is highly dependent / tidied with the conversion particularities.&lt;br /&gt;
&lt;br /&gt;
* R0407: status: to discuss (not important). About converters, should class names and file names match, i.e. converter.class.php =&amp;gt; moodle1_converter.class.php&lt;br /&gt;
&lt;br /&gt;
* R0408: status: to discuss. On restore, we have both after_restore() methods available in steps (executed when the step execution ends) and in tasks (executed when the whole plan execution ends). Do we need this duality in plan_converter, or is it enough with current one. Right now it seems that we are using a lot these methods to do the work, and process_xxx() should be used instead (together with next point).&lt;br /&gt;
&lt;br /&gt;
* R0409: status: to code. Since some weeks ago the notify_path_start/end() methods are available in the xml processor, should we start using them to call some stuff in converter, able to dispatch to start_xxxx() and end_xxxx() methods in the converter steps. It would help a lot with both starting/closing XML tags, creating and closing xml files, or any other pre/post stuff needing to be executed at certain stages.&lt;br /&gt;
&lt;br /&gt;
* R0410: status: to discuss. The deprecated/new/renamed elements / mutate_datum stuff. Perhaps it should be moved from steps to path_elements instead, so each path element autocontains the basic transformations to be performed on data and they are applied automatically. It seems a better place for that definitions. Or, alternatively, we&#039;ll need deprecated/new/renamed/mutate_xxxx() methods, one for each path.&lt;br /&gt;
&lt;br /&gt;
* R0411: status: to code. After looking current uses of the xml writer, it seems clear that we need some extra methods, able to print one tag completely, push/pop last open tag and other commodities in order to make coding easier.&lt;br /&gt;
&lt;br /&gt;
* R0412: status: to code. The &amp;quot;trick&amp;quot; in the parser about dynamically modify /MOD paths seems ok (I cannot imagine another way to implement it). Similar magic will be needed for blocks and surely, the start/end implementation above will need a similar way to handle/dispatch processing.&lt;br /&gt;
&lt;br /&gt;
* R0413: status: to code. Some raw accesses to the backup_ids_temp DB stuff must be modified to use helper functions. Also, the use of the table in get_context() can be really slow (text comparison). Look for some alternative.&lt;br /&gt;
&lt;br /&gt;
* R0414: status: to code. The convert_file() method uses the backup_ids_temp to get sequential fileid values. It should be enough (completely safe), to use one static (in memory) generator instead. No concurrence problems at all IMO.&lt;br /&gt;
&lt;br /&gt;
* R0415: status: to discuss. Support for plugins is a must as far as at least qtypes require it. Note that question types are going to suffer one major revamp on Moodle 2.1, so their final architecture is unknown right now (different from both 1.9 and 2.0).&lt;br /&gt;
&lt;br /&gt;
* R0416: status: to code (tiny detail). In current moodle1_conversion, original_site_identifier should be generated only if there is one original identifier. Right now it saves one &amp;quot;?&amp;quot; that can lead to wrong results detecting same sites.&lt;br /&gt;
&lt;br /&gt;
==== Related to coding in general ====&lt;br /&gt;
&lt;br /&gt;
* R0417: status: to code. Copyright messages are required on each new file. It must be the standard one with GPL3 msg and MR/Mark/whatever copyright.&lt;br /&gt;
&lt;br /&gt;
* R0418: status: to code. We should have as many tests as possible, specially testing all the infrastructure stuff, in order to guarantee it continues working as expected after any refactor / modification. Right now it&#039;s practically inexistent.&lt;br /&gt;
&lt;br /&gt;
* R0419: status: to do periodically. We need to keep the main repo for all the project &amp;quot;converters_wip&amp;quot; in sync (merged) with current moodle.git master branch in order to ensure stuff will land properly (conflicts-free) and converters will be able to use any new feature / improvement available.&lt;br /&gt;
&lt;br /&gt;
==== Related to pending &amp;amp; tricky areas ====&lt;br /&gt;
&lt;br /&gt;
* R020: status: to code. There are a lot of areas which coding hasn&#039;t been ignited yet (surely to pending work in the list above, don&#039;t worry). Here there is a brief ordered list, annotating the ones that will be really tricky:&lt;br /&gt;
** Users and enrollments: All the users with their complete information must be saved to new users.xml file and each process_xxx() method must, continuously, be annotating needed uses in order to generate proper inforef.xml files. Enrolments will be all moved to manual ones (this needs confirmation).&lt;br /&gt;
** Workshop activity: Completely revamped in 2.0. It has proper subplugins. Upgrade code needs to be deeply analyzed and XML differences too to know how to implement it. (contact: David).&lt;br /&gt;
** Wiki activity: Also brand new in 2.0. Upgrade needs analysis and XML differences too. (contact: Dongsheng).&lt;br /&gt;
** Resource activity: Split into  file/folder/page/url activities. The structure is simple (no user data) but the split makes it really tricky. Also very file-intensive. Upgrade code needs analysis and XML differences (contact: Petr).&lt;br /&gt;
** Files: 1.9 files can had site/course files (apart from the ones &amp;quot;owned&amp;quot; by the module @ moddata). They must be annotated and moved to new files.xml &amp;amp; storage. There is some code already but is not used in the general converter helper stuff (should be moodle1 converter specific instead?).&lt;br /&gt;
** Gradebook: There are important differences between how 1.9 and 2.0 backup information is handled. Scales / outcomes / grade items need annotation in inforef.xml files and also there are new xml files designed to store specifically grades (categories, items, grades...) information. Need analysis. (contact: Andrew).&lt;br /&gt;
&lt;br /&gt;
====After review, organization====&lt;br /&gt;
&lt;br /&gt;
This section will be used to annotate any agreement / conclusion / organization for the next weeks in case the Tracker isn&#039;t enough to do so. Feel free to use it, beloved colleagues, always using the R04xx nomenclature for referencing exact stuff, plz.&lt;br /&gt;
&lt;br /&gt;
=== See also ===&lt;br /&gt;
&lt;br /&gt;
* Go back to [[Development:Backup 2.0|Backup 2.0]] &amp;gt; [[Development:Backup 2.0 - Provide upwards compatibility of Moodle 1.9.x backups|Backup 1.9 =&amp;gt; 2.x main page]].&lt;/div&gt;</summary>
		<author><name>Stronk7</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/2x/pl/index.php?title=Backup_2.0_-_Provide_upwards_compatibility_of_Moodle_1.9.x_backups&amp;diff=82987</id>
		<title>Backup 2.0 - Provide upwards compatibility of Moodle 1.9.x backups</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/2x/pl/index.php?title=Backup_2.0_-_Provide_upwards_compatibility_of_Moodle_1.9.x_backups&amp;diff=82987"/>
		<updated>2011-04-26T14:47:25Z</updated>

		<summary type="html">&lt;p&gt;Stronk7: /* See also */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Development:Backup 2.0}}{{Moodle_2.0}}{{Work in progress}}&lt;br /&gt;
&lt;br /&gt;
While the [[Development:Backup 2.0 multiple formats|Backup 2.0 multiple formats]] document describes how different formats will be supported by the restore process in Moodle 2.0, it&#039;s going to be a highly complex task to perform the transformation of Moodle 1.9.x backups into the new, improved, Moodle 2.x backup format. &lt;br /&gt;
&lt;br /&gt;
Too many things have changed between both versions to be able to achieve this easily. Surely it&#039;s computable (as long as upgrade is being able to apply the correct logic, so restore will) but it is going to be handled as a separate development that will allow us to 1) be centered in the 2.0 backup/restore and 2) be free (both in mind and implementation) from any 1.9.x XML format dependency.&lt;br /&gt;
&lt;br /&gt;
=== Goals and basis ===&lt;br /&gt;
&lt;br /&gt;
* The main goal is to create one &#039;&#039;&#039;conversion&#039;&#039;&#039; tool, able to get any Moodle 1.9 backup file and convert it to one Moodle 2.0 backup file. The tool &#039;&#039;&#039;will not perform any modification&#039;&#039;&#039; in the Moodle instance where it is being executed (i.e.the tool won&#039;t import anything). Once the conversion has finished, the standard Moodle 2.0 restore functionality will perform its job.&lt;br /&gt;
* The tool will get one already-uncompressed directory containing one Moodle 1.9 backup file and will create all the needed stuff in the same directory.&lt;br /&gt;
* The tool will have one unique entry point to perform the conversion and will be able to be invoked from within Moodle 2.0 (restore, performing conversion on the fly) or standalone (from CLI interface of any sort of batch processing).&lt;br /&gt;
* The tool will be built using as much infrastructure from Moodle 2.0 as possible (xml processors, plugins, core stuff, logging, debugging...) and will be full OOP (and php, of course).&lt;br /&gt;
* Ideally the conversion will happen in only 1-pass of xml parsing.&lt;br /&gt;
* The tool will be licensed under GPL3 or later and bundled with future releases of Moodle.&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
Before any further analysis is highly recommended to:&lt;br /&gt;
&lt;br /&gt;
* Know as much as possible about the Moodle 2.0 backup infrastructure. Reading the [[Development:Backup 2.0 general architecture| general architecture page]], looking at all the stuff available under the backup/moodle2 directories (each plugin has its own) and understanding how information flows and is stored.&lt;br /&gt;
* Pay special attention and understand these parts of the Moodle 2.0 backup infrastructure:&lt;br /&gt;
** XML parser: In charge of reading all the XML file and dispatching pieces to different processors (backup/util/xml/parser).&lt;br /&gt;
** XML writer: In charge of writing XML files (util/xml/xml_writer.class.php and util/xml/output)&lt;br /&gt;
** Chained loggers: To output any information about the process (backup/util/loggers).&lt;br /&gt;
** Temporary tables, to store transient information if needed.&lt;br /&gt;
&lt;br /&gt;
==== Physical differences ====&lt;br /&gt;
&lt;br /&gt;
After reading the [[Development:Backup 2.0 general architecture| general architecture page]], it&#039;s clear that there are huge differences between the XML used in Moodle 1.9 backups and their Moodle 2.0 counterparts. Let&#039;s dissect them briefly:&lt;br /&gt;
&lt;br /&gt;
* We have changed from one unique monolithic &#039;&#039;&#039;moodle.xml&#039;&#039;&#039; file to a multiple xml files (and directories) alternative.&lt;br /&gt;
* The course, each section and each activity has its own directory.&lt;br /&gt;
* There are some top-level XML files (groups, users, files, questions, roles, scales...) acting as &amp;quot;containers&amp;quot; of information referenced from any course/section/activity (by their inforef.xml files).&lt;br /&gt;
* We have moved from uppercase tags to lowercase everywhere&lt;br /&gt;
* We are using XML attributes for some pieces of information (mainly ids).&lt;br /&gt;
* When possible (modules mainly) the old XML-tree structure has been observed.&lt;br /&gt;
&lt;br /&gt;
==== Logical differences ====&lt;br /&gt;
&lt;br /&gt;
A lot of things have changed from Moodle 1.9 to Moodle 2.0, causing a lot of modifications in the DB schema and, as backup is highly dependent of that (it&#039;s basically one representation of the DB), the information present in the physical xml files above has changed in a noticeable way too.&lt;br /&gt;
&lt;br /&gt;
One good exercise is to create one, more or less, complete test course, backup it in Moodle 1.9, upgrade the site to Moodle 2.0 and backup it again. That way you&#039;ll see where each bit of information has ended in the new format. Also is a good task, in order to understand the changes, to read all the db/upgrade.php scripts present in Moodle 2.0. They show all the modifications performed along the time.&lt;br /&gt;
&lt;br /&gt;
At this point it&#039;s important to avoid get stressed, yes, there are many differences and tons of modifications, some of them really complex. But good news is that, if the upgrade.php scripts have been able to perform the change then, for sure, it is computable and the conversion tool will be able to do the same.&lt;br /&gt;
&lt;br /&gt;
Back to the logical differences, there are some of them needing special attention since day 0 (now):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;files:&#039;&#039;&#039; Under Moodle 1.9, files were stored both in the named &amp;quot;course files&amp;quot; directory (one physical directory) and also under the &amp;quot;moddata&amp;quot; directory (files belonging to modules, like forum attachments, assignment submissions...). Under Moodle 2.0, all the files are physically stored into one file pool (a really cryptic hash-based storage solution) with one logical store in DB, with contexts, components, file areas, hashes and items. The conversion tool will need one sort of &amp;quot;file conversion tool&amp;quot; able to handle any transformation from the old to the new approach, used everywhere.&lt;br /&gt;
* &#039;&#039;&#039;roles and enrolments:&#039;&#039;&#039; Moodle 1.9 enrolments were, simply, some role assignments performed at course level. This has been changed to a more powerful (dual) structure of both role assignments and proper enrollment-plugins. The conversion toll will need to do some &amp;quot;assumptions&amp;quot; in order to convert this information. Also it&#039;s important to note that, while in Moodle 1.9 backups the complete roles were being sent to XML (with all their capabilities and friends), this doesn&#039;t&#039; happen anymore in Moodle 2.0 (where we only store basic information about them).&lt;br /&gt;
* &#039;&#039;&#039;contexts:&#039;&#039;&#039; Under Moodle 1.9, the use of contexts (the course, each activity, each user is one, unique context) was really limited (basically only used for roles and capabilities. Under Moodle 2.0, there are way more information based on contexts (files, comments, ratings, filters, blocks...). Hence we&#039;ll need to assign one context for each component in the backup to be able to associate information to it along the conversion.&lt;br /&gt;
* &#039;&#039;&#039;categories and questions:&#039;&#039;&#039; while the internal representation is pretty similar, now they are handled via standard plugins backup &amp;amp; restore in Moodle 2.0 (see question/type/xxxx/backup/moodle2) so some extra information (extra xml-levels) is required. The tool also should be handling the conversion in a plugin way, allowing other 3rd-part question types conversions to be implemented.&lt;br /&gt;
* &#039;&#039;&#039;blocks:&#039;&#039;&#039; 90% of blocks haven&#039;t any special DB representation nor need especial processing, but the rest (see, for example, the html block or the rss_client one) need custom conversion. So the tool must allow conversion of blocks also in a plugin way.&lt;br /&gt;
* &#039;&#039;&#039;activities:&#039;&#039;&#039; This is the most important part, where all the (educational POV) information resides. Of course, it must work in a plugin way. Here we&#039;ll find activities really easy to convert, because the only noticeable change has been their conversion to the new &amp;quot;files&amp;quot; (commented above). For example, the choice, glossary, forum... modules are good candidates to start with. But there are also some activities that have been completely rewritten / modified since Moodle 1.9. And they will be, without doubts, the most difficult ones to be handled by the conversion tool. Let&#039;s see some of them:&lt;br /&gt;
** &#039;&#039;&#039;resource:&#039;&#039;&#039; Under Moodle 1.9 all we had were types of resources (page, directory...) but all them being types of the (unique) resource module. Under Moodle 2.0, the the module has been split into different modules, each one with its own DB representation and unique features (file, folder, page and url). This split will need to be detected and handled specially by the conversion tool.&lt;br /&gt;
** &#039;&#039;&#039;wiki:&#039;&#039;&#039; Completely rewritten from scratch. Will need important changes both in the xml representation (100% different DB structure) and special process of all the contents (to translate from the old ewiki dialect to the new html implementation). Not to talk about binary contents that will also need special handling.&lt;br /&gt;
** &#039;&#039;&#039;workshop:&#039;&#039;&#039; Also completely rewritten from scratch. Will need important changes in the xml representation, use of subplugins and special process of some contents.&lt;br /&gt;
&lt;br /&gt;
=== Overall process ===&lt;br /&gt;
&lt;br /&gt;
Here there is one ordered list that could serve as technical/development roadmap for the analysis and implementation of the Moodle 1.9 conversion tool. Surely some (practically all) the points below can be split into smaller tasks in order to allow work to advance in parallel. Ideally all them should have one representation as subtasks of MDL-22414. Each task has one alphanumeric code to be used as reference in the future:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;A&#039;&#039;&#039;: Preliminary Tasks&lt;br /&gt;
** &#039;&#039;&#039;A1&#039;&#039;&#039;: Initial report (this document)&lt;br /&gt;
** &#039;&#039;&#039;A2&#039;&#039;&#039;: Organization / roles / actors involved&lt;br /&gt;
** &#039;&#039;&#039;A3&#039;&#039;&#039;: Initial timeline specification&lt;br /&gt;
** &#039;&#039;&#039;A4&#039;&#039;&#039;: Documentation / research / learn&lt;br /&gt;
** &#039;&#039;&#039;A5&#039;&#039;&#039;: Testing use cases, QA specifications&lt;br /&gt;
* &#039;&#039;&#039;B&#039;&#039;&#039;: Infrastructure Tasks&lt;br /&gt;
** &#039;&#039;&#039;B1&#039;&#039;&#039;: XML Parser&lt;br /&gt;
** &#039;&#039;&#039;B2&#039;&#039;&#039;: Conversion dispatcher&lt;br /&gt;
** &#039;&#039;&#039;B3&#039;&#039;&#039;: XML writer&lt;br /&gt;
** &#039;&#039;&#039;B4&#039;&#039;&#039;: Support for plugins (questions, blocks, modules...)&lt;br /&gt;
** &#039;&#039;&#039;B5&#039;&#039;&#039;: Support for subplugins (workshop, assignments...)&lt;br /&gt;
** &#039;&#039;&#039;B6&#039;&#039;&#039;: Integration with Moodle 2.0 restore, logging, output...&lt;br /&gt;
** &#039;&#039;&#039;B7&#039;&#039;&#039;: Progress review / discuss / adjust / timeline&lt;br /&gt;
* &#039;&#039;&#039;C&#039;&#039;&#039;: Conversion Development Tasks&lt;br /&gt;
** &#039;&#039;&#039;C1&#039;&#039;&#039;: Globals (files / users / groups / scales / outcomes / roles / gradebook ...)&lt;br /&gt;
** &#039;&#039;&#039;C2&#039;&#039;&#039;: Course level information&lt;br /&gt;
** &#039;&#039;&#039;C3&#039;&#039;&#039;: Section level information&lt;br /&gt;
** &#039;&#039;&#039;C4&#039;&#039;&#039;: Activity level information&lt;br /&gt;
** &#039;&#039;&#039;C5&#039;&#039;&#039;: Commons (comments / completion / filters / grades / roles /logs ...)&lt;br /&gt;
&lt;br /&gt;
===Followups===&lt;br /&gt;
&lt;br /&gt;
* [[Development:Backup 2.0 - Converters review 2011-04|Review April 2011]]&lt;br /&gt;
&lt;br /&gt;
===See also===&lt;br /&gt;
&lt;br /&gt;
* MDL-22414 - the main tracker issue for this task&lt;/div&gt;</summary>
		<author><name>Stronk7</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/2x/pl/index.php?title=Broken/Backup_2.0_-_Converters_review_2011-04&amp;diff=82986</id>
		<title>Broken/Backup 2.0 - Converters review 2011-04</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/2x/pl/index.php?title=Broken/Backup_2.0_-_Converters_review_2011-04&amp;diff=82986"/>
		<updated>2011-04-26T14:45:18Z</updated>

		<summary type="html">&lt;p&gt;Stronk7: Created page with &amp;quot;Please, for discussing any of the points in the page, do it in the corresponding MDL-xxx issue in the Tracker. TIA! --~~~~&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Please, for discussing any of the points in the page, do it in the corresponding MDL-xxx issue in the Tracker. TIA! --[[User:Eloy Lafuente (stronk7)|Eloy Lafuente (stronk7)]] 22:45, 26 April 2011 (WST)&lt;/div&gt;</summary>
		<author><name>Stronk7</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/2x/pl/index.php?title=Backup_2.0_-_Converters_review_2011-04&amp;diff=82985</id>
		<title>Backup 2.0 - Converters review 2011-04</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/2x/pl/index.php?title=Backup_2.0_-_Converters_review_2011-04&amp;diff=82985"/>
		<updated>2011-04-26T14:44:35Z</updated>

		<summary type="html">&lt;p&gt;Stronk7: Created page with &amp;quot;Backup 2.0 &amp;gt; Backup 1.9 =&amp;gt; 2.x main page &amp;gt; Review 2011-04 {{Template...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Development:Backup 2.0|Backup 2.0]] &amp;gt; [[Development:Backup 2.0 - Provide upwards compatibility of Moodle 1.9.x backups|Backup 1.9 =&amp;gt; 2.x main page]] &amp;gt; Review 2011-04&lt;br /&gt;
{{Template:Development:Backup 2.0}}{{Moodle_2.1}}{{Work in progress}}&lt;br /&gt;
&lt;br /&gt;
This page summarizes the results of the review performed (on April 2011) over the code available at https://github.com/mrmark/moodle related to the implementation of a general solution for the creation and support of moodle restore converters and its first implementation as one Moodle 1.9 =&amp;gt; 2.x converter.&lt;br /&gt;
&lt;br /&gt;
=== References ===&lt;br /&gt;
&lt;br /&gt;
* MDL-22414 - the main tracker issue for this task.&lt;br /&gt;
* [[Development:Backup 2.0 - Provide upwards compatibility of Moodle 1.9.x backups|Backup 1.9 =&amp;gt; 2.x article]] in Moodle Docs.&lt;br /&gt;
* [http://tracker.moodle.org/secure/attachment/23241/Moodle1.9to2.0Restore.pdf PDF with initial implementation plan].&lt;br /&gt;
* [https://github.com/mrmark/moodle/compare/master...converters_wip Development branch changes] &lt;br /&gt;
&lt;br /&gt;
=== Nomenclature ===&lt;br /&gt;
&lt;br /&gt;
* The review results are shown below as one list of numbered points, briefly explained, with link to corresponding MDL-xxxx (subtask of MDL-22414), where any discussion / agreement / coding should happen.&lt;br /&gt;
* All the MDL-xxxx issue created will begin with R04 to note they have been ignited as part of this review process.&lt;br /&gt;
* Each point below includes one short &amp;quot;status&amp;quot; message in order to know the immediate actions that must be performed on it.&lt;br /&gt;
* New points can be added to the review as long as discussion / agreement happens, if necessary.&lt;br /&gt;
&lt;br /&gt;
=== Global summary ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== The list ===&lt;br /&gt;
&lt;br /&gt;
=== See also ===&lt;br /&gt;
&lt;br /&gt;
* Go back to [[Development:Backup 2.0|Backup 2.0]] &amp;gt; [[Development:Backup 2.0 - Provide upwards compatibility of Moodle 1.9.x backups|Backup 1.9 =&amp;gt; 2.x main page]].&lt;/div&gt;</summary>
		<author><name>Stronk7</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/2x/pl/index.php?title=Backup_2.0_for_developers&amp;diff=82981</id>
		<title>Backup 2.0 for developers</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/2x/pl/index.php?title=Backup_2.0_for_developers&amp;diff=82981"/>
		<updated>2011-04-26T10:04:09Z</updated>

		<summary type="html">&lt;p&gt;Stronk7: /* Other components that can be backed up */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Development:Backup 2.0}}{{Moodle_2.0}}{{Work in progress}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
This page tries to explain, from a development perspective, &#039;&#039;&#039;how to implement&#039;&#039;&#039; the backup feature for various Moodle 2.x plugins, mainly, modules and blocks. &lt;br /&gt;
&lt;br /&gt;
Note that, at the time of writing this, the backup &amp;amp; restore subsystem itself is &#039;&#039;&#039;under development&#039;&#039;&#039;, so still there are some missing bits, specially about the way to handle &#039;&#039;&#039;subplugins&#039;&#039;&#039; (question types, data fields...) under the new backup infrastructure, so any module using such artifacts, like data, assignment, quiz, workshop, aren&#039;t  good candidates right now. This will be addressed (and this Docs updated) once we have determined how each subplugin is expected to work (from a DB / backup perspective).&lt;br /&gt;
&lt;br /&gt;
Everything in backup &#039;&#039;&#039;is about tasks and steps&#039;&#039;&#039; (see [[Development:Backup 2.0 general architecture|Backup 2.0 general architecture]] for more information), all them conforming one backup plan. Each module instance and each block instance will be backup by one backup task instance that is, basically, one collection of backup steps. How steps are organized within the task will dictate to the backup system what to do and in which order.&lt;br /&gt;
&lt;br /&gt;
Another important point is that Moodle backup 2.0, supports &#039;&#039;&#039;multiple backup formats&#039;&#039;&#039; (&amp;quot;moodle2&amp;quot;, &amp;quot;imscc&amp;quot;...) each one having its own tasks/steps, completely unrelated between them. In any case, for now, we are focusing all the explanations below in the &amp;quot;moodle2&amp;quot; format, that is the one required in order to keep any module/block &#039;&#039;&#039;transportable between Moodle instances&#039;&#039;&#039; without any loss of data. Surely, for the rest of formats, we&#039;ll end with other documents describing them, as far as each one can have its own particularities.&lt;br /&gt;
&lt;br /&gt;
Talking about backup steps we must differentiate &#039;&#039;&#039;two type of steps&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Execution steps&#039;&#039;&#039;: That, simply, execute arbitrary PHP code. They are useful to prepare different structures, create directories, whatever have to be done not involving the generation of XML files. Normally you won&#039;t need them.&lt;br /&gt;
* &#039;&#039;&#039;Structure steps&#039;&#039;&#039;: That, using one PHP API (detailed below) define completely the XML structure to be exported and its contents. Hopefully, &amp;quot;normal&amp;quot; modules only will have to use one step of this type in order to have the backup functionality 100% implemented.&lt;br /&gt;
&lt;br /&gt;
Said that, in the next steps we are going through all the steps necessary to create the backup of one simple module and one block, in order to get all the possibilities covered.&lt;br /&gt;
&lt;br /&gt;
== How to backup one module ==&lt;br /&gt;
&lt;br /&gt;
For this section, we have selected one simple module (choice) that requires practically all the backup &amp;quot;machinery&amp;quot; to be used, so it will get explained as we progress in the development. The only point not covered here are the &amp;quot;subplugin&amp;quot; facilities, covered later in a separate section.&lt;br /&gt;
&lt;br /&gt;
=== Prerequisites ===&lt;br /&gt;
&lt;br /&gt;
In order to achieve the backup implementation for the module, some prerequisites should be fulfilled. They are just recommendations but, specially while getting used to backup, it&#039;s good to follow them. Let&#039;s see:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Learn about the module&#039;&#039;&#039;. If you aren&#039;t the creator of the module, spend some time playing with the module, creating and using it, exploring each one of its functionalities. By doing this you will end with some &amp;quot;real&amp;quot; data in the module instances that will be really useful when testing / debugging how the module backup is being generated.&lt;br /&gt;
# &#039;&#039;&#039;Draw one schema of the module&#039;&#039;&#039; DB structures. While you are playing with the module, look continuously to the DB, how records are saved and which are the relations between the module&#039;s tables. As far a backup is, basically, one &amp;quot;selective dump&amp;quot; of those tables, knowing the maximum about them is highly recommended. At the end, you must end with one tree structure will be the basis for the generated XML file.&lt;br /&gt;
# &#039;&#039;&#039;Annotate which tables contain user-related info&#039;&#039;&#039; and which ones don&#039;t. One of the core functionalities that must be present on each module is the ability to include user related information or skipping it, so you will need that information later.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tip&#039;&#039;&#039;: If the module already existed before Moodle 2.0, it can be a &#039;&#039;&#039;good idea&#039;&#039;&#039; to take a look to its 1.9 backuplib.php file, as far as the structure is already defined there and can help to understand the organization better and, at the same time, &#039;&#039;&#039;keeping the XML structure as similar as possible&#039;&#039;&#039;, that will, definitively, &#039;&#039;&#039;make things easier&#039;&#039;&#039; when converting 1.9 backup files to the new backup 2.0 format.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: It&#039;s important to highlight that the structure schema, once decided, should be as stable as possible along the time, because any change in the structure makes restore really way-more-more complex to be implemented. There isn&#039;t problems adding / deleting fields, nor adding new elements to the structure. But &#039;&#039;&#039;the structure (tree) itself must persist as stable as possible&#039;&#039;&#039;, so please, be careful when deciding it.&lt;br /&gt;
&lt;br /&gt;
So, applying these pre-requisites to our candidate module (choice), here it&#039;s the corresponding schema. We&#039;ll use it along the whole process.&lt;br /&gt;
&lt;br /&gt;
=== Schema ===&lt;br /&gt;
&lt;br /&gt;
In the schema, you must try to put as much information as possible, so that will produce the coding process later to be quicker and easier while keeping the final results free from errors and missing bits. So, once more, don&#039;t start coding immediately, instead spend some time with the requisites above, understanding how the module works and designing the final structure that represents it better.&lt;br /&gt;
&lt;br /&gt;
==== The (correct) candidate ====&lt;br /&gt;
&lt;br /&gt;
[[Image:Backup20 choice alt.png‎|left|Alternative choice backup structure]]&lt;br /&gt;
&lt;br /&gt;
The tree on the left shows the ER/DB structure of the choice module, where one choice have one or more options and each option is answered by users one or more times (note: ignore cardinality accuracy in the previous phrase).&lt;br /&gt;
&lt;br /&gt;
And that&#039;s the best schema representing the structure of the module, with each element properly nested so, we won&#039;t have any problem with restore as far as the order required by restore (1, 2, 3) are naturally given. &lt;br /&gt;
&lt;br /&gt;
Looks easy, cool, but follow reading… you will get surprised! :-)&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== The (chosen) candidate ====&lt;br /&gt;
&lt;br /&gt;
Instead we are going to use the (complete this time) diagram below. See the rationale about that after the image.&lt;br /&gt;
&lt;br /&gt;
[[Image:Backup20 choice.png‎|center|Used choice backup structure]]&lt;br /&gt;
&lt;br /&gt;
The main reason to use this tree (instead of the &amp;quot;correct&amp;quot;) one is that this is the structure that has been used by Moodle 1.9 backup since ages ago for the choice module and, of course have done its work ok. As commented above we must &#039;&#039;&#039;try to reduce the number of structural changes&#039;&#039;&#039; in one module backup in order to keep the restore operations working along the time (the same is applicable for the conversion of 1.9 backup files to the new 2.0 format). Finally, this is a good example about how one module &#039;&#039;&#039;can have different XML representations&#039;&#039;&#039; and we need to try to get that best one (this is not the case) on each case. So, once more, &#039;&#039;&#039;spending some time analyzing&#039;&#039;&#039; the activity is worth it.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s analyze the schema with some detail:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Detecting user information&#039;&#039;&#039;: We must be able to define the entities (tables) in the diagram that are used to store user information. One of the core features of the backup subsystem since its early days have been the ability to produce backup with and without user information. So we need that info. Hence, the &amp;quot;no user info&amp;quot; in the choice and choice_options elements (they are configuration, user-independent), while the choice_answers is marked as &amp;quot;user info&amp;quot; (contains user&#039;s answers to the choice).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Determining the correct order of backup&#039;&#039;&#039;: This, while simple, is critical too (especially from a restore perspective). As far as the restore reads progressively the xml file and performs actions in that order, we &#039;&#039;&#039;must guarantee that the &amp;quot;read order&amp;quot; is the correct&#039;&#039;&#039; one, fulfilling any possible dependency. Back to our schema it&#039;s clear that we need to backup the &amp;quot;choice&amp;quot; element at first, and then the &amp;quot;choice_options&amp;quot; and &amp;quot;choice_answers&amp;quot; ones. More yet, the &amp;quot;choice_options&amp;quot; must be backup before &amp;quot;choice_answers&amp;quot; as far as the later needs to save the values of the former (the &amp;quot;optionid&amp;quot; information). Be noted, that, as commented some paragraphs above, the &amp;quot;correct&amp;quot; alternative really gave us that order information easily. Doesn&#039;t matter as far as we have been able to establish it also in the &amp;quot;chosen&amp;quot; schema.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Attributes and elements&#039;&#039;&#039;: Now it&#039;s time to decide which fields will be considered attributes in the resulting XML file and which ones will be child elements (tags). The rule is simple: &#039;&#039;&#039;All the &amp;quot;id&amp;quot; fields must (should) be defined as attributes&#039;&#039;&#039;. Note this is just one arbitrary rule without much rationale behind it as far as, from a restore perspective, everything (attributes and child tags) will be handled in the same way (object attributes). So, in our schema, all the &amp;quot;id&amp;quot; fields have been marked as &amp;quot;attr&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Not needed elements&#039;&#039;&#039;: If we have designed properly the schema, we&#039;ll detect that some fields aren&#039;t necessary, as far as such information is already included in some parent element. In our schema, the field &amp;quot;choiceid&amp;quot;, pointing to the &amp;quot;choice-&amp;gt;id&amp;quot;, both in the options and in the answer elements have been marked as &amp;quot;not needed&amp;quot; as far as their parent &amp;quot;choice&amp;quot; already contains it. Something similar happens with the &amp;quot;course&amp;quot; field in the choice element, it doesn&#039;t need to be included in the backup file as far as something above it (course element, out from the module scope) already has it defined. Finally, there is one element marked as &amp;quot;needed&amp;quot; that shows us, once more, that the schema we are using is not the best. In the &amp;quot;chosen&amp;quot; one, as far as &amp;quot;choice_answers&amp;quot; isn&#039;t nested under &amp;quot;choice_options&amp;quot; we must keep that field in the backup, or restore won&#039;t know to which option each answer belongs to. Instead, with the &amp;quot;correct&amp;quot; schema, where answers are nested under options, that field is not needed. Summarizing, &#039;&#039;&#039;any field, but those already existing in parent elements must be included in backup&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Detecting file areas used by the module&#039;&#039;&#039;: Along the module we can be using various file areas in different elements and fields. We need to know exactly which file area is handled by which element and the (optional) itemid information used for that file area. In general, &#039;&#039;&#039;anything being one text field, or anything looking like one attachment&#039;&#039;&#039; has high chances to have one (hidden) file area associated. In our schema, we have one file area detected (choice_intro) corresponding to the introduction of the module and available to put any images or whatever in that field. Also, in general, all the &amp;quot;xxx_intro&amp;quot; file areas use to have no itemid, as far as the module&#039;s context is enough to define them without ambiguities. So, we mark the choice-&amp;gt;intro as &amp;quot;choice_intro&amp;quot; file area and &amp;quot;no itemid&amp;quot;). From our expertise playing with the module we know there aren&#039;t more file areas at all.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;annotate_is_important&amp;quot;&amp;gt;&#039;&#039;&#039;Annotating some important bits&#039;&#039;&#039;:&amp;lt;/span&amp;gt; Due to the modularity of the backup and in order to know exactly which information must be saved (because it&#039;s used) and which one can be skipped, &#039;&#039;&#039;it&#039;s important to annotate some important elements along the whole backup&#039;&#039;&#039; process. So, back to our schema, we have marked the &amp;quot;choice_answer-&amp;gt;userid&amp;quot; field as &amp;quot;annotation&amp;quot; (so backup will, automatically, add all the information for that user). Here it&#039;s the list of elements that we must not forget to annotate (or we could end with non-restorable backups). Note that we must, always, be annotating &amp;quot;id&amp;quot; values and not other types of data:&lt;br /&gt;
** &#039;&#039;&#039;user&#039;&#039;&#039;: Any field pointing to one user-&amp;gt;id present along the schema (as said above, our schema has one).&lt;br /&gt;
** &#039;&#039;&#039;grouping&#039;&#039;&#039;: Any field pointing to one grouping-&amp;gt;id&lt;br /&gt;
** &#039;&#039;&#039;group&#039;&#039;&#039;: Any field pointing to one group-&amp;gt;id&lt;br /&gt;
** &#039;&#039;&#039;role&#039;&#039;&#039;: Any field pointing to one role-&amp;gt;id&lt;br /&gt;
** &#039;&#039;&#039;scale&#039;&#039;&#039;: Any field pointing to one scale-&amp;gt;id&lt;br /&gt;
** &#039;&#039;&#039;outcome&#039;&#039;&#039;: Any field pointing to one outcome-&amp;gt;id&lt;br /&gt;
&lt;br /&gt;
And this is all the information we need to know, before starting to code. Surely, once used to backup and restore, you will be able to start coding sooner, but &#039;&#039;&#039;don&#039;t forget about the importance of choosing one good and stable structure&#039;&#039;&#039; before anything else. It&#039;s really the critical part of any module&#039;s backup.&lt;br /&gt;
&lt;br /&gt;
Said that, let&#039;s see how to code all this information in order to get one cool backup for our beloved module.&lt;br /&gt;
&lt;br /&gt;
=== Coding ===&lt;br /&gt;
&lt;br /&gt;
Already here? Have you read, al least once, all the explanations and comments in the previous sections? Yes? Sure? I can imagine it&#039;s hard to read so much text, just imagine how hard is to write it! Go, go, go and read it!&lt;br /&gt;
&lt;br /&gt;
Jokes apart, in this section we are going to code the module&#039;s (choice) backup code. As you&#039;ll see soon, all the information gathered in previous steps is really important and will make the coding task easier and less prone to errors.&lt;br /&gt;
&lt;br /&gt;
==== Setting up the environment ====&lt;br /&gt;
&lt;br /&gt;
By default, any backup operation will end with one .zip file stored in some course / section / activity area. That means that, each time you execute one backup, you&#039;ll need to go across the web interface to that file area, download the generated .zip file, uncompress it and then, see how things have been generated. And you will be executing a bunch of backup files until you get everything working as expected, so the whole develop / test process isn&#039;t really &amp;quot;agile&amp;quot;. To improve things a bit, there is one $CFG setting that you should consider using &#039;&#039;&#039;in your development environment&#039;&#039;&#039;. Just put this in your config.php:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
$CFG-&amp;gt;keeptempdirectoriesonbackup = true;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With this setting enabled, backup won&#039;t delete the temporary directory where everything is calculated, so you will be able to access to it directly, skipping all the ui / download / unzip steps above. Those temp directories are under $CFG-&amp;gt;dataroot/temp/backup. Note that, for each backup invocation, a new directory is created.&lt;br /&gt;
&lt;br /&gt;
Also, in order to be able to execute backups quickly (instead of navigating along the UI), you can, simply, put one script like this in your $CFG-&amp;gt;dirroot directory:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
require_once(&#039;config.php&#039;);&lt;br /&gt;
require_once($CFG-&amp;gt;dirroot . &#039;/backup/util/includes/backup_includes.php&#039;);&lt;br /&gt;
&lt;br /&gt;
$course_module_to_backup = XX; // Set this to one existing choice cmid in your dev site&lt;br /&gt;
$user_doing_the_backup   = YY; // Set this to the id of your admin accouun&lt;br /&gt;
&lt;br /&gt;
$bc = new backup_controller(backup::TYPE_1ACTIVITY, $course_module_to_backup, backup::FORMAT_MOODLE,&lt;br /&gt;
                            backup::INTERACTIVE_NO, backup::MODE_GENERAL, $user_doing_the_backup);&lt;br /&gt;
$bc-&amp;gt;execute_plan();&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
just set proper values for XX and YY above and execute it from your browser. If you get one error about one not found class (with the name of your module) everything is ok.&lt;br /&gt;
&lt;br /&gt;
==== Required stuff ====&lt;br /&gt;
&lt;br /&gt;
The first thing you need to make is to, explicitly, declare that your module (choice in our example) is going to support the MOODLE2 backup format, to do so, you need to go to mod/choice/lib.php and, in the choice_supports() function add one new feature by adding this line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
case FEATURE_BACKUP_MOODLE2:          return true;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you execute another backup (with the script provided above, you will continue getting one error, as far as we haven&#039;t still coded anything related to backup, that&#039;s ok.&lt;br /&gt;
&lt;br /&gt;
Next step is to create the directory where all the backup code for the choice module will be. Just create the directory(s) mod/choice/backup/moodle2&lt;br /&gt;
&lt;br /&gt;
At this point, we have all the required stuff ready and all the pending tasks will be done under that recently created directory.&lt;br /&gt;
&lt;br /&gt;
==== Settings, Steps and Tasks ====&lt;br /&gt;
&lt;br /&gt;
In the introduction of the tutorial, we commented about backup being structured into tasks, each one being one collection of steps (and potentially using some custom settings). Those are, exactly, the objects that we need to create to achieve the backup functionality in our module.&lt;br /&gt;
&lt;br /&gt;
First of all, lets&#039; create the settings file, where all the custom settings to be used by our module will be defined and implemented. It must be named &#039;&#039;&#039;mod/choice/backup/moodle2/backup_choice_settingslib.php&#039;&#039;&#039; and their contents are really meaningful:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
// This file is part of Moodle - http://moodle.org/&lt;br /&gt;
//&lt;br /&gt;
// Moodle is free software: you can redistribute it and/or modify&lt;br /&gt;
// it under the terms of the GNU General Public License as published by&lt;br /&gt;
// the Free Software Foundation, either version 3 of the License, or&lt;br /&gt;
// (at your option) any later version.&lt;br /&gt;
//&lt;br /&gt;
// Moodle is distributed in the hope that it will be useful,&lt;br /&gt;
// but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
// GNU General Public License for more details.&lt;br /&gt;
//&lt;br /&gt;
// You should have received a copy of the GNU General Public License&lt;br /&gt;
// along with Moodle.  If not, see &amp;lt;http://www.gnu.org/licenses/&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @package moodlecore&lt;br /&gt;
 * @subpackage backup-moodle2&lt;br /&gt;
 * @copyright 2010 onwards YOUR_NAME_GOES_HERE {@link YOUR_URL_GOES_HERE}&lt;br /&gt;
 * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
 // This activity has not particular settings but the inherited from the generic&lt;br /&gt;
 // backup_activity_task so here there isn&#039;t any class definition, like the ones&lt;br /&gt;
 // existing in /backup/moodle2/backup_settingslib.php (activities section)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Looks simple, isn&#039;t it? Nothing but a few comments. This is looking really easy. For now, we aren&#039;t going to introduce any custom setting for any module, only the &amp;quot;core activity settings&amp;quot; will be used. Once backup and Moodle 2.0 is stable we can start analyzing useful settings to customize how the module&#039;s backup is performed. For now, just leave it blank, please. In fact, if it&#039;s empty,&#039;&#039;&#039; you can safely not create it&#039;&#039;&#039; at all. It&#039;s here just for explanation purposes.&lt;br /&gt;
&lt;br /&gt;
Side note: To save some space, we only will be showing the © message/license in the code above. Just add it to each file created.&lt;br /&gt;
&lt;br /&gt;
Now we are going to create the steps file, where all the steps to be executed by our backup activity task will be defined and implemented. It must be named &#039;&#039;&#039;mod/choice/backup/moodle2/backup_choice_stepslib.php&#039;&#039;&#039; and their contents are these:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Define all the backup steps that will be used by the backup_choice_activity_task&lt;br /&gt;
 */&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Yes, it&#039;s another empty file. No worries we&#039;ll fill it later.&lt;br /&gt;
&lt;br /&gt;
Finally we need to create the task file, where our just created settings and steps files will be included and used. It must be named &#039;&#039;&#039;mod/choice/backup/moodle2/backup_choice_activity_task.class.php&#039;&#039;&#039; and their contents are these:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
require_once($CFG-&amp;gt;dirroot . &#039;/mod/choice/backup/moodle2/backup_choice_stepslib.php&#039;); // Because it exists (must)&lt;br /&gt;
require_once($CFG-&amp;gt;dirroot . &#039;/mod/choice/backup/moodle2/backup_choice_settingslib.php&#039;); // Because it exists (optional)&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * choice backup task that provides all the settings and steps to perform one&lt;br /&gt;
 * complete backup of the activity&lt;br /&gt;
 */&lt;br /&gt;
class backup_choice_activity_task extends backup_activity_task {&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Define (add) particular settings this activity can have&lt;br /&gt;
     */&lt;br /&gt;
    protected function define_my_settings() {&lt;br /&gt;
        // No particular settings for this activity&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Define (add) particular steps this activity can have&lt;br /&gt;
     */&lt;br /&gt;
    protected function define_my_steps() {&lt;br /&gt;
        // Choice only has one structure step&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Code the transformations to perform in the activity in&lt;br /&gt;
     * order to get transportable (encoded) links&lt;br /&gt;
     */&lt;br /&gt;
    static public function encode_content_links($content) {&lt;br /&gt;
        return $content;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the main file (class) of the choice backup and it will be used to define any setting (define_my_settings()  method) and any step (define_my_steps() method) to be executed in the backup process. It also contains one 3rd method (encode_content_links($content)) that will allow manually URLs pointing to the choice to be properly converted when the choice is moved to other site / course using the backup / restore functionality.&lt;br /&gt;
&lt;br /&gt;
As you see, for now, the three required methods are doing nothing. Just execute the backup again. Wow, no errors anymore. We have already fulfilled all the minimum coding needs in order to have the choice backup working. &lt;br /&gt;
&lt;br /&gt;
Now you should go to your $CFG-&amp;gt;dataroot/temp/backup/xxxx directory (the more recent) and spend some time looking what has been created under the activities/choice_XX directory. There is already a lot of stuff that backup has generated for you: comments, blocks, logs, grades, module info, roles... some of them empty and others already showing real information.&lt;br /&gt;
&lt;br /&gt;
In any case, now, we need to add one important file there, the &amp;quot;choice.xml&amp;quot; where the real information for your module will be present, following the specs given by the schema we decided some sections above.&lt;br /&gt;
&lt;br /&gt;
So, let&#039;s go, it&#039;s time to create our choice structure step. To do so, we edit the &#039;&#039;&#039;mod/choice/backup/moodle2/backup_choice_stepslib.php&#039;&#039;&#039; file and add this code after the existing comments:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * Define the complete choice structure for backup, with file and id annotations&lt;br /&gt;
 */     &lt;br /&gt;
class backup_choice_activity_structure_step extends backup_activity_structure_step {&lt;br /&gt;
&lt;br /&gt;
    protected function define_structure() {&lt;br /&gt;
&lt;br /&gt;
        // To know if we are including userinfo&lt;br /&gt;
        $userinfo = $this-&amp;gt;get_setting_value(&#039;userinfo&#039;);&lt;br /&gt;
&lt;br /&gt;
        // Define each element separated&lt;br /&gt;
&lt;br /&gt;
        // Build the tree&lt;br /&gt;
&lt;br /&gt;
        // Define sources&lt;br /&gt;
&lt;br /&gt;
        // Define id annotations&lt;br /&gt;
&lt;br /&gt;
        // Define file annotations&lt;br /&gt;
&lt;br /&gt;
        // Return the root element (choice), wrapped into standard activity structure&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So, we have defined one structure step that will be the responsible, using one PHP API to provide backup with all the information needed to generate the choice.xml file. Now, go back to the task file and add these contents in the define_my_steps() methods:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
        $this-&amp;gt;add_step(new backup_choice_activity_structure_step(&#039;choice_structure&#039;, &#039;choice.xml&#039;));&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That way, our choice task knows it must execute one new step, the one involving the generation of the choice.xml file. Let&#039;s execute one new backup and see results.You should be getting one new error with something like that &amp;quot;backup_structure_step_wrong_structure&amp;quot;. It means that everything is ok up to now, the task has tried to execute the structure step, but this is not properly defined.&lt;br /&gt;
&lt;br /&gt;
===== Defining each element =====&lt;br /&gt;
&lt;br /&gt;
So, next step is about to define the choice structure. Going back to our step, under the &#039;&#039;// Define each element separate&#039;&#039; comment we&#039;ll add this code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
        $choice = new backup_nested_element(&#039;choice&#039;, array(&#039;id&#039;), array(&lt;br /&gt;
            &#039;name&#039;, &#039;intro&#039;, &#039;introformat&#039;, &#039;publish&#039;,&lt;br /&gt;
            &#039;showresults&#039;, &#039;display&#039;, &#039;allowupdate&#039;, &#039;allowunanswered&#039;,&lt;br /&gt;
            &#039;limitanswers&#039;, &#039;timeopen&#039;, &#039;timeclose&#039;, &#039;timemodified&#039;));&lt;br /&gt;
&lt;br /&gt;
        $options = new backup_nested_element(&#039;options&#039;);&lt;br /&gt;
&lt;br /&gt;
        $option = new backup_nested_element(&#039;option&#039;, array(&#039;id&#039;), array(&lt;br /&gt;
            &#039;text&#039;, &#039;maxanswers&#039;, &#039;timemodified&#039;));&lt;br /&gt;
&lt;br /&gt;
        $answers = new backup_nested_element(&#039;answers&#039;);&lt;br /&gt;
&lt;br /&gt;
        $answer = new backup_nested_element(&#039;answer&#039;, array(&#039;id&#039;), array(&lt;br /&gt;
            &#039;userid&#039;, &#039;optionid&#039;, &#039;timemodified&#039;));&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Return the root element =====&lt;br /&gt;
&lt;br /&gt;
And also, in order to get it working, let&#039;s define the return element, so, after the &#039;&#039;// Return the root element&#039;&#039; comment, add this code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
        return $this-&amp;gt;prepare_activity_structure($choice);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now we can execute the backup again and, a long as we have already defined the root element of the module, should have now one choice.xml file created (without proper contents but must be there).&lt;br /&gt;
&lt;br /&gt;
About the code above, all we have done is to define, separately each element that will be part of the choice.xml file. Special note about the $options and $answers elements. Since Moodle 1.9 we use to enclose real elements (the singular ones) inside one extra plural element, hence we create them here (as empty elements without attributes nor child tags). About the rest (the singular ones) we use 3 params in the instantiation:&lt;br /&gt;
* The name of the element&lt;br /&gt;
* One array of attributes of the element&lt;br /&gt;
* One array of child tags (fields) of the element.&lt;br /&gt;
And we include all the fields that previously we had defined in our schema &#039;&#039;&#039;but&#039;&#039;&#039; the ones marked as &#039;&#039;&#039;not needed&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===== Building the tree =====&lt;br /&gt;
&lt;br /&gt;
Now it&#039;s time to declare the relations between all those elements, so, after the &#039;&#039;// Build the tree&#039;&#039; comment we&#039;ll add this code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
        $choice-&amp;gt;add_child($options);&lt;br /&gt;
        $options-&amp;gt;add_child($option);&lt;br /&gt;
&lt;br /&gt;
        $choice-&amp;gt;add_child($answers);&lt;br /&gt;
        $answers-&amp;gt;add_child($answer);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Self explanatory, using $choice as root element, we define the whole tree using the add_child() method. And, of course, we respect &#039;&#039;&#039;the order&#039;&#039;&#039; that we had decided, so $options will be &#039;&#039;&#039;physically&#039;&#039;&#039; before $answers in the tree (and in the generated XML).&lt;br /&gt;
&lt;br /&gt;
===== Defining the sources =====&lt;br /&gt;
&lt;br /&gt;
After this, it&#039;s the moment to instruct our tree about how to fetch information from DB in order to generate the choice.xml file, so after the &#039;&#039;// Define sources&#039;&#039; comment, we&#039;ll add this code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
        $choice-&amp;gt;set_source_table(&#039;choice&#039;, array(&#039;id&#039; =&amp;gt; backup::VAR_ACTIVITYID));&lt;br /&gt;
&lt;br /&gt;
        $option-&amp;gt;set_source_sql(&#039;&lt;br /&gt;
            SELECT *&lt;br /&gt;
              FROM {choice_options}&lt;br /&gt;
             WHERE choiceid = ?&#039;,&lt;br /&gt;
            array(backup::VAR_PARENTID));&lt;br /&gt;
&lt;br /&gt;
        // All the rest of elements only happen if we are including user info&lt;br /&gt;
        if ($userinfo) {&lt;br /&gt;
            $answer-&amp;gt;set_source_table(&#039;choice_answers&#039;, array(&#039;choiceid&#039; =&amp;gt; &#039;../../id&#039;));&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So we define the source for the $choice element as the information present in the &#039;choice&#039; table for the id that is being backup (backup::VAR_ACTIVITYID). Or we define the source for the $option element like one SQL (could have been one table too, just to show more possibilities of the API, using the parent (the choice one) as value for the query (backup::VAR_PARENTID).&lt;br /&gt;
&lt;br /&gt;
And finally, conditionally, if user information is going to be included, we define the source for the $answer (note we had already annotated in our schema that this element was dependent of that). &lt;br /&gt;
&lt;br /&gt;
And we define the source condition as having the &#039;choiceid&#039; field matching the value of the &#039;id&#039; field two levels above (../../id). If you follow the tree created in the previous code section, that&#039;s exactly the choice-&amp;gt;id (remember we have introduced one extra level (the plural one between the &#039;choice&#039; and the &#039;answer&#039; singular elements). Note this is 100% equivalent to use backup::VAR_PARENTID (as we have done in the $option source) just used to show possibilities of the API.&lt;br /&gt;
&lt;br /&gt;
Summarizing, with the API, we have these 3 method for defining sources:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;set_source_table($tablename, array $conditions)&#039;&#039;&#039;: When the information is get straight from one table (vast majority of cases in backup)&lt;br /&gt;
* &#039;&#039;&#039;set_source_sql($sql, array $params)&#039;&#039;&#039;: When the information doesn&#039;t map one table directly and we need something more complex&lt;br /&gt;
* &#039;&#039;&#039;set_source_array($array)&#039;&#039;&#039;: When we have some fixed information to backup. Not really useful in nested information, but used by core here and there.&lt;br /&gt;
&lt;br /&gt;
Note that both the $conditions and $params above only accept one limited number of constants or values (not all available in all backups!), mainly:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;backup::VAR_COURSEID&#039;&#039;&#039;: The id of the course this activity belongs to / the course id being backup&lt;br /&gt;
* &#039;&#039;&#039;backup::VAR_SECTIONID&#039;&#039;&#039;: The id of the section this activity belongs to / the section id being backup&lt;br /&gt;
* &#039;&#039;&#039;backup::VAR_ACTIVITYID&#039;&#039;&#039;: The id of the activity id being backup&lt;br /&gt;
* &#039;&#039;&#039;backup::VAR_MODID&#039;&#039;&#039;: The id of the course_module being backup&lt;br /&gt;
* &#039;&#039;&#039;backup::VAR_MODULENAME&#039;&#039;&#039;: The name of the module being backup&lt;br /&gt;
* &#039;&#039;&#039;backup::VAR_BLOCKID&#039;&#039;&#039;: The id of the block being backup&lt;br /&gt;
* &#039;&#039;&#039;backup::VAR_BLOCKNAME&#039;&#039;&#039;: The name of the block being backup&lt;br /&gt;
* &#039;&#039;&#039;backup::VAR_CONTEXTID&#039;&#039;&#039;: The context id of the activity / course being backup&lt;br /&gt;
* &#039;&#039;&#039;backup::VAR_PARENTID&#039;&#039;&#039;: The value of the first parent id found in the structure.&lt;br /&gt;
* &#039;&#039;&#039;../some/path/to/parent&#039;&#039;&#039;: To manually point to other value of any parent.&lt;br /&gt;
&lt;br /&gt;
Is important to note that, in 99% of the case we should be using, exclusively, some of the constants above, and backup, automatically will handle them properly. In case we have any other condition or param to be added like, for example, the number 23, or the string &#039;user&#039;, we cannot add them directly, but enclose them with the helper &#039;&#039;&#039;backup_helper::is_sqlparam(23)&#039;&#039;&#039; or &#039;&#039;&#039;backup_helper::is_sqlparam(&#039;user&#039;)&#039;&#039;&#039;. That way backup will know they are raw SQL params not needing any special handling, like the constants above.&lt;br /&gt;
&lt;br /&gt;
Well, now it&#039;s time to run backup again and take a look to our activities/choice_XX/choice.xml file. Now everything should be there, properly nested, the choice, the options and the answers. We are really near finishing now.&lt;br /&gt;
&lt;br /&gt;
===== Annotating IDs =====&lt;br /&gt;
&lt;br /&gt;
Now it&#039;s time to perform all the annotations that we had already detected in our analysis of the module. So, after the &#039;&#039;// Define id annotations&#039;&#039; comment we&#039;ll be adding:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
        $answer-&amp;gt;annotate_ids(&#039;user&#039;, &#039;userid&#039;);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It simply means, annotate for each $answer element, the value of the &#039;userid&#039; field as one &#039;user&#039; to be backup. In other words we are instructing backup that there is one new user to include later, when generating the users information and, at the same time, we are determining that those users are needed for the choice XX, so, if on restore we decide to skip that choice and such user isn&#039;t necessary for any other module / subsystem, it won&#039;t be restored. All this &amp;quot;uses&amp;quot; information is handled by the &amp;quot;inforef.xml&amp;quot; files within each activity backup, just in case you&#039;re interested to take a look to them. Else, just consider them, &amp;quot;dark magic&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: If you&#039;re not sure about which elements must be annotated, review [[Development:Backup 2.0 for developers #annotate_is_important|&amp;quot;Annotating some important bits&amp;quot;]] above for details about &#039;&#039;&#039;must-be-done&#039;&#039;&#039; annotations.&lt;br /&gt;
&lt;br /&gt;
===== Annotating files =====&lt;br /&gt;
&lt;br /&gt;
And, finally, reviewing our ellaborated and detailed schema, the last thing we need to take rid of are the file areas used, so, after the &#039;&#039;// Define file annotations&#039;&#039; comment we&#039;ll add:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
        $choice-&amp;gt;annotate_files(&#039;mod_choice&#039;, &#039;intro&#039;, null); // This file area hasn&#039;t itemid&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That means that, within the $choice element we have one file area in use, of course belonging to the &#039;mod_choice&#039; component (where all the choice module files belong to), named &#039;intro&#039; and not using itemid (null). Note that, as far as it is possible to have multiple file areas in the same element (table), you may end having multiple calls to that method, one for each filearea to be added to backup. About the third parameter, in case we need it, it must be the name of one of the attributes or fields of the $choice element (usually, in the vast majority of cases, the &#039;id&#039; of the element), otherwise we&#039;ll use null.&lt;br /&gt;
&lt;br /&gt;
=== One encoded wor(l)d ===&lt;br /&gt;
&lt;br /&gt;
Already out from the step definition, that should be working ok now, with the choice.xml file being generated and all the annotations being processed and added to the inforef.xml file, there is one more point to fulfill before considering choice&#039;s backup 100% finished.&lt;br /&gt;
&lt;br /&gt;
And it&#039;s about how to provide the ability to transform some links to the choice module when the backup file is restored into another server / course. That is automatically handled by a two-step approach:&lt;br /&gt;
# On backup, we transform as many well-know URLs as possible to one encoded form.&lt;br /&gt;
# On restore, we transform those encoded URLS back to their original form, but pointing to their new targets.&lt;br /&gt;
&lt;br /&gt;
So, in backup, we must provide services for the point 1 above, and that is done by adding some &amp;quot;encoding&amp;quot; conversions to the &#039;&#039;&#039;encode_content_links()&#039;&#039;&#039; method in our &#039;&#039;&#039;backup_choice_activity_task&#039;&#039;&#039;. So, define it to look like this&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
    /**&lt;br /&gt;
     * Code the transformations to perform in the activity in&lt;br /&gt;
     * order to get transportable (encoded) links&lt;br /&gt;
     */&lt;br /&gt;
    static public function encode_content_links($content) {&lt;br /&gt;
        global $CFG;&lt;br /&gt;
&lt;br /&gt;
        $base = preg_quote($CFG-&amp;gt;wwwroot,&amp;quot;/&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        // Link to the list of choices&lt;br /&gt;
        $search=&amp;quot;/(&amp;quot;.$base.&amp;quot;\/mod\/choice\/index.php\?id\=)([0-9]+)/&amp;quot;;&lt;br /&gt;
        $content= preg_replace($search, &#039;$@CHOICEINDEX*$2@$&#039;, $content);&lt;br /&gt;
&lt;br /&gt;
        // Link to choice view by moduleid&lt;br /&gt;
        $search=&amp;quot;/(&amp;quot;.$base.&amp;quot;\/mod\/choice\/view.php\?id\=)([0-9]+)/&amp;quot;;&lt;br /&gt;
        $content= preg_replace($search, &#039;$@CHOICEVIEWBYID*$2@$&#039;, $content);&lt;br /&gt;
&lt;br /&gt;
        return $content;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Básically, it gets any URL (manually written) in any content of the backup being generated and transform some (well-known) URLs to one encoded alternative. In this case we are encoding:&lt;br /&gt;
* Any URL pointing to the list of choices in a course == is changed to ==&amp;gt; $@CHOICEINDEX*XX@$&lt;br /&gt;
* Any URL pointing to one exact choice == is changed to ==&amp;gt; $@CHOICEVIEWBYID*YY@$&lt;br /&gt;
&lt;br /&gt;
In restore, well have the opposite conversions happening, replacing the XX and YY above to their new equivalents, so those links will be transportable via backup/restore without any need to edit them manually later.&lt;br /&gt;
&lt;br /&gt;
Tip: Don&#039;t forget to look to the module&#039;s 1.9 backup code, as far as there you&#039;ll find which conversions must be considered to be added here.&lt;br /&gt;
&lt;br /&gt;
=== Final notes ===&lt;br /&gt;
&lt;br /&gt;
* Don&#039;t get stressed, it&#039;s really more difficult / longer to explain than to do it. 100% guaranteed, else we&#039;ll return your money. :-P&lt;br /&gt;
* If you&#039;ve become lost, or your code is not working properly, you always can [http://cvs.moodle.org/moodle/mod/choice/backup/moodle2/ see the complete choice working code in CVS]. Or, alternatively, look to other well known modules, like [http://cvs.moodle.org/moodle/mod/forum/backup/moodle2/ forum] or also the [http://cvs.moodle.org/moodle/backup/moodle2/backup_stepslib.php?view=markup big core library of steps], where you will find all sort of uses of the API.&lt;br /&gt;
* If you are going to implement backup for module XXXX, just copy this document, replace any &amp;quot;choice&amp;quot; occurrence within it by XXXX and follow it from the beginning to the end. Should work.&lt;br /&gt;
* If the module already existed in Moodle 1.x, try to follow the same structure if possible, that will make things easier for restore / conversion.&lt;br /&gt;
* Right now there are some pending tasks related with different exceptions that will be thrown if you code something wrongly (bad nesting, incorrect field names, bad constant/sql param uses...) and how they are shown. Fix for that will be coming soon.&lt;br /&gt;
* Also, as stated at the beginning of this tutorial, we are still missing &amp;quot;subplugins&amp;quot; final support in modules, so try to avoid implementing backup on them for now. Once ready, there will be one new section in this document about them.&lt;br /&gt;
* Any question / improvement / comment, feel free to contact with Moodle HQ, better if using the Tracker or, alternatively, forums / email / direct contact with your very-best-developer-friend. Note this is version x.0 (dot zero) of the backup API, so sure there are possibilities to improve it along the time.&lt;br /&gt;
&lt;br /&gt;
== Other components that can be backed up ==&lt;br /&gt;
&lt;br /&gt;
Most plugins which can be added to a course can also include data in a course backup. Some examples:&lt;br /&gt;
&lt;br /&gt;
* Course formats&lt;br /&gt;
* Themes: [[Development: Backup 2.0 theme data| Backup 2.0 theme data]]&lt;br /&gt;
* Plagiarism plugins&lt;/div&gt;</summary>
		<author><name>Stronk7</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/2x/pl/index.php?title=Broken/Commit_cheat_sheet&amp;diff=82835</id>
		<title>Broken/Commit cheat sheet</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/2x/pl/index.php?title=Broken/Commit_cheat_sheet&amp;diff=82835"/>
		<updated>2011-04-18T00:13:27Z</updated>

		<summary type="html">&lt;p&gt;Stronk7: Created page with &amp;quot;=== MDL-xxxxx code area: short description of the patch ===  Cannot we, please, stop inventing things continuously? Where did the new colons come from? Mars? LOL  I thought a lot...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== MDL-xxxxx code area: short description of the patch ===&lt;br /&gt;
&lt;br /&gt;
Cannot we, please, stop inventing things continuously? Where did the new colons come from? Mars? LOL&lt;br /&gt;
&lt;br /&gt;
I thought a lot of us were using, since ages ago:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
MDL-xxxxx code area - short description of the patch&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In any case, as far as it&#039;s one recommendation, it doesn&#039;t matter too much (or yes, I really cannot believe the iterations we are having here). Please stop innovating and/or clarify it, grrr. With love, --[[User:Eloy Lafuente (stronk7)|Eloy Lafuente (stronk7)]] 08:13, 18 April 2011 (WST)&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Stronk7</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/2x/pl/index.php?title=MediaWiki_TeX_test&amp;diff=82760</id>
		<title>MediaWiki TeX test</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/2x/pl/index.php?title=MediaWiki_TeX_test&amp;diff=82760"/>
		<updated>2011-04-14T16:45:43Z</updated>

		<summary type="html">&lt;p&gt;Stronk7: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This should look like some maths:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\int_{-\infty}^\infty \psi^{-x^{tim}}\,dx = \sqrt{hunt^4}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(This page was created for the benefit of MDLSITE-649.)&lt;br /&gt;
&lt;br /&gt;
Heavy test:&lt;br /&gt;
&lt;br /&gt;
== Functions, symbols, special characters ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Eight symbols per line seems to be optimal--&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |&amp;lt;h3&amp;gt;Accents/Diacritics&amp;lt;/h3&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\acute{a} \grave{a} \hat{a} \tilde{a} \breve{a}&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\acute{a} \grave{a} \hat{a} \tilde{a} \breve{a}\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\check{a} \bar{a} \ddot{a} \dot{a}&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\check{a} \bar{a} \ddot{a} \dot{a}\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Standard functions&amp;lt;/h3&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\sin a \cos b \tan c&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\sin a \cos b \tan c\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\sec d \csc e \cot f&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\sec d \csc e \cot f\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\arcsin h \arccos i \arctan j&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\arcsin h \arccos i \arctan j\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\sinh k \cosh l \tanh m \coth n\!&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\sinh k \cosh l \tanh m \coth n\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\operatorname{sh}\,o\,\operatorname{ch}\,p\,\operatorname{th}\,q\!&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\operatorname{sh}\,o\,\operatorname{ch}\,p\,\operatorname{th}\,q\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\operatorname{arsinh}\,r\,\operatorname{arcosh}\,s\,\operatorname{artanh}\,t&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\operatorname{arsinh}\,r\,\operatorname{arcosh}\,s\,\operatorname{artanh}\,t\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\lim u \limsup v \liminf w \min x \max y\!&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\lim u \limsup v \liminf w \min x \max y\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\inf z \sup a \exp b \ln c \lg d \log e \log_{10} f \ker g\!&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\inf z \sup a \exp b \ln c \lg d \log e \log_{10} f \ker g\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\deg h \gcd i \Pr j \det k \hom l \arg m \dim n&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\deg h \gcd i \Pr j \det k \hom l \arg m \dim n\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Modular arithmetic&amp;lt;/h3&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;s_k \equiv 0 \pmod{m}&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;s_k \equiv 0 \pmod{m}\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;a\,\bmod\,b&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;a\,\bmod\,b\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; | &amp;lt;h3&amp;gt;Derivatives&amp;lt;/h3&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\nabla \, \partial x \, dx \, \dot x \, \ddot y\, dy/dx\, \frac{dy}{dx}\, \frac{\partial^2 y}{\partial x_1\,\partial x_2}&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\nabla \, \partial x \, dx \, \dot x \, \ddot y\, dy/dx\, \frac{dy}{dx}\, \frac{\partial^2 y}{\partial x_1\,\partial x_2}&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Sets&amp;lt;/h3&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\forall \exists \empty \emptyset \varnothing&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\forall \exists \empty \emptyset \varnothing\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\in \ni \not \in \notin \subset \subseteq \supset \supseteq&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\in \ni \not \in \notin \subset \subseteq \supset \supseteq\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\cap \bigcap \cup \bigcup \biguplus \setminus \smallsetminus&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\cap \bigcap \cup \bigcup \biguplus \setminus \smallsetminus\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\sqsubset \sqsubseteq \sqsupset \sqsupseteq \sqcap \sqcup \bigsqcup&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\sqsubset \sqsubseteq \sqsupset \sqsupseteq \sqcap \sqcup \bigsqcup\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Operators&amp;lt;/h3&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;+ \oplus \bigoplus \pm \mp - &amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;+ \oplus \bigoplus \pm \mp - \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\times \otimes \bigotimes \cdot \circ \bullet \bigodot&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\times \otimes \bigotimes \cdot \circ \bullet \bigodot\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\star * / \div \frac{1}{2}&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\star * / \div \frac{1}{2}\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Logic&amp;lt;/h3&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\land (or \and) \wedge \bigwedge \bar{q} \to p&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\land \wedge \bigwedge \bar{q} \to p\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\lor \vee \bigvee \lnot \neg q \And&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\lor \vee \bigvee \lnot \neg q \And\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Root&amp;lt;/h3&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\sqrt{2} \sqrt[n]{x}&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\sqrt{2} \sqrt[n]{x}\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; | &amp;lt;h3&amp;gt;Relations&amp;lt;/h3&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\sim \approx \simeq \cong \dot=  \overset{\underset{\mathrm{def}}{}}{=}&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\sim \approx \simeq \cong \dot=  \overset{\underset{\mathrm{def}}{}}{=}\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\le &amp;lt; \ll \gg \ge &amp;gt; \equiv \not\equiv \ne \mbox{or} \neq \propto&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\le &amp;lt; \ll \gg \ge &amp;gt; \equiv \not\equiv \ne \mbox{or} \neq \propto\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Geometric&amp;lt;/h3&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\Diamond \Box \triangle \angle \perp \mid \nmid \| 45^\circ&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\Diamond \, \Box \, \triangle \, \angle \perp \, \mid \; \nmid \, \| 45^\circ\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Arrows&amp;lt;/h3&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\leftarrow (or \gets) \rightarrow (or \to) \nleftarrow \nrightarrow \leftrightarrow \nleftrightarrow \longleftarrow \longrightarrow \longleftrightarrow&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\leftarrow \rightarrow \nleftarrow \not\to \leftrightarrow \nleftrightarrow \longleftarrow \longrightarrow \longleftrightarrow \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\Leftarrow \Rightarrow \nLeftarrow \nRightarrow \Leftrightarrow \nLeftrightarrow \Longleftarrow \Longrightarrow \Longleftrightarrow (or \iff)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\Leftarrow \Rightarrow \nLeftarrow \nRightarrow \Leftrightarrow \nLeftrightarrow \Longleftarrow \Longrightarrow \Longleftrightarrow \!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\uparrow \downarrow \updownarrow \Uparrow \Downarrow \Updownarrow  \nearrow \searrow \swarrow \nwarrow&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\uparrow \downarrow \updownarrow \Uparrow \Downarrow \Updownarrow  \nearrow \searrow \swarrow \nwarrow \!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\rightharpoonup \rightharpoondown \leftharpoonup \leftharpoondown \upharpoonleft \upharpoonright \downharpoonleft \downharpoonright \rightleftharpoons \leftrightharpoons&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\rightharpoonup \rightharpoondown \leftharpoonup \leftharpoondown \upharpoonleft \upharpoonright \downharpoonleft \downharpoonright \rightleftharpoons \leftrightharpoons \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\curvearrowleft \circlearrowleft \Lsh \upuparrows \rightrightarrows \rightleftarrows \Rrightarrow \rightarrowtail \looparrowright&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\curvearrowleft \circlearrowleft \Lsh \upuparrows \rightrightarrows \rightleftarrows \Rrightarrow \rightarrowtail \looparrowright \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\curvearrowright \circlearrowright \Rsh \downdownarrows \leftleftarrows \leftrightarrows \Lleftarrow \leftarrowtail \looparrowleft&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\curvearrowright \circlearrowright \Rsh \downdownarrows \leftleftarrows \leftrightarrows \Lleftarrow \leftarrowtail \looparrowleft \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\mapsto \longmapsto \hookrightarrow \hookleftarrow \multimap \leftrightsquigarrow \rightsquigarrow &amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mapsto \longmapsto \hookrightarrow \hookleftarrow \multimap \leftrightsquigarrow \rightsquigarrow \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Special&amp;lt;/h3&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\And \eth \S \P \% \dagger \ddagger \ldots \cdots&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\And \eth \S \P \% \dagger \ddagger \ldots \cdots\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\smile \frown \wr \triangleleft \triangleright \infty \bot \top&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\smile \frown \wr \triangleleft \triangleright \infty \bot \top\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\vdash \vDash \Vdash \models \lVert \rVert \imath \hbar&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\vdash \vDash \Vdash \models \lVert \rVert \imath \hbar\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\ell \mho \Finv \Re \Im \wp \complement&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\ell \mho \Finv \Re \Im \wp \complement\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\diamondsuit \heartsuit \clubsuit \spadesuit \Game \flat \natural \sharp&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\diamondsuit \heartsuit \clubsuit \spadesuit \Game \flat \natural \sharp\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Unsorted (new stuff)&amp;lt;/h3&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt; \vartriangle \triangledown \lozenge \circledS \measuredangle \nexists \Bbbk \backprime \blacktriangle \blacktriangledown&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt; \vartriangle \triangledown \lozenge \circledS \measuredangle \nexists \Bbbk \backprime \blacktriangle \blacktriangledown&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt; \blacksquare \blacklozenge \bigstar \sphericalangle \diagup \diagdown \dotplus \Cap \Cup \barwedge&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt; \blacksquare \blacklozenge \bigstar \sphericalangle \diagup \diagdown \dotplus \Cap \Cup \barwedge\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt; \veebar \doublebarwedge \boxminus \boxtimes \boxdot \boxplus \divideontimes \ltimes \rtimes \leftthreetimes&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt; \veebar \doublebarwedge \boxminus \boxtimes \boxdot \boxplus \divideontimes \ltimes \rtimes \leftthreetimes&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt; \rightthreetimes \curlywedge \curlyvee \circleddash \circledast \circledcirc \centerdot \intercal \leqq \leqslant&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt; \rightthreetimes \curlywedge \curlyvee \circleddash \circledast \circledcirc \centerdot \intercal \leqq \leqslant&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt; \eqslantless \lessapprox \approxeq \lessdot \lll \lessgtr \lesseqgtr \lesseqqgtr \doteqdot \risingdotseq&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt; \eqslantless \lessapprox \approxeq \lessdot \lll \lessgtr \lesseqgtr \lesseqqgtr \doteqdot \risingdotseq&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt; \fallingdotseq \backsim \backsimeq \subseteqq \Subset \preccurlyeq \curlyeqprec \precsim \precapprox \vartriangleleft&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt; \fallingdotseq \backsim \backsimeq \subseteqq \Subset \preccurlyeq \curlyeqprec \precsim \precapprox \vartriangleleft&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt; \Vvdash \bumpeq \Bumpeq \geqq \geqslant \eqslantgtr \gtrsim \gtrapprox \eqsim \gtrdot&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt; \Vvdash \bumpeq \Bumpeq \geqq \geqslant \eqslantgtr \gtrsim \gtrapprox \eqsim \gtrdot&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt; \ggg \gtrless \gtreqless \gtreqqless \eqcirc \circeq \triangleq \thicksim \thickapprox \supseteqq&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt; \ggg \gtrless \gtreqless \gtreqqless \eqcirc \circeq \triangleq \thicksim \thickapprox \supseteqq&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt; \Supset \succcurlyeq \curlyeqsucc \succsim \succapprox \vartriangleright \shortmid \shortparallel \between \pitchfork&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt; \Supset \succcurlyeq \curlyeqsucc \succsim \succapprox \vartriangleright \shortmid \shortparallel \between \pitchfork&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt; \varpropto \blacktriangleleft \therefore \backepsilon \blacktriangleright \because \nleqslant \nleqq \lneq \lneqq&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt; \varpropto \blacktriangleleft \therefore \backepsilon \blacktriangleright \because \nleqslant \nleqq \lneq \lneqq&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt; \lvertneqq \lnsim \lnapprox \nprec \npreceq \precneqq \precnsim \precnapprox \nsim \nshortmid&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt; \lvertneqq \lnsim \lnapprox \nprec \npreceq \precneqq \precnsim \precnapprox \nsim \nshortmid&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt; \nvdash \nVdash \ntriangleleft \ntrianglelefteq \nsubseteq \nsubseteqq \varsubsetneq \subsetneqq \varsubsetneqq \ngtr&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt; \nvdash \nVdash \ntriangleleft \ntrianglelefteq \nsubseteq \nsubseteqq \varsubsetneq \subsetneqq \varsubsetneqq \ngtr&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\subsetneq&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\subsetneq&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt; \ngeqslant \ngeqq \gneq \gneqq \gvertneqq \gnsim \gnapprox \nsucc \nsucceq \succneqq&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt; \ngeqslant \ngeqq \gneq \gneqq \gvertneqq \gnsim \gnapprox \nsucc \nsucceq \succneqq&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt; \succnsim \succnapprox \ncong \nshortparallel \nparallel \nvDash \nVDash \ntriangleright \ntrianglerighteq \nsupseteq&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt; \succnsim \succnapprox \ncong \nshortparallel \nparallel \nvDash \nVDash \ntriangleright \ntrianglerighteq \nsupseteq&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt; \nsupseteqq \varsupsetneq \supsetneqq \varsupsetneqq&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt; \nsupseteqq \varsupsetneq \supsetneqq \varsupsetneqq&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\jmath \surd \ast \uplus \diamond \bigtriangleup \bigtriangledown \ominus&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\jmath \surd \ast \uplus \diamond \bigtriangleup \bigtriangledown \ominus\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\oslash \odot \bigcirc \amalg \prec \succ \preceq \succeq&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\oslash \odot \bigcirc \amalg \prec \succ \preceq \succeq\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\dashv \asymp \doteq \parallel&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\dashv \asymp \doteq \parallel\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\ulcorner \urcorner \llcorner \lrcorner&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\ulcorner \urcorner \llcorner \lrcorner&amp;lt;/math&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Larger Expressions ==&lt;br /&gt;
=== Subscripts, superscripts, integrals ===&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse;&amp;quot;&lt;br /&gt;
!rowspan=&amp;quot;2&amp;quot;|Feature!!rowspan=&amp;quot;2&amp;quot;|Syntax!!colspan=&amp;quot;2&amp;quot;|How it looks rendered&lt;br /&gt;
|-&lt;br /&gt;
!HTML!!PNG&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|Superscript||&amp;lt;code&amp;gt;a^2&amp;lt;/code&amp;gt;||&amp;lt;math&amp;gt;a^2&amp;lt;/math&amp;gt;||&amp;lt;math&amp;gt;a^2 \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Subscript||&amp;lt;code&amp;gt;a_2&amp;lt;/code&amp;gt;||&amp;lt;math&amp;gt;a_2&amp;lt;/math&amp;gt;||&amp;lt;math&amp;gt;a_2 \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=2|Grouping||&amp;lt;code&amp;gt;a^{2+2}&amp;lt;/code&amp;gt;||&amp;lt;math&amp;gt;a^{2+2}&amp;lt;/math&amp;gt;||&amp;lt;math&amp;gt;a^{2+2}\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;a_{i,j}&amp;lt;/code&amp;gt;||&amp;lt;math&amp;gt;a_{i,j}&amp;lt;/math&amp;gt;||&amp;lt;math&amp;gt;a_{i,j}\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=2|Combining sub &amp;amp; super without and with horizontal separation||&amp;lt;code&amp;gt;x_2^3&amp;lt;/code&amp;gt;||&amp;lt;math&amp;gt;x_2^3&amp;lt;/math&amp;gt;||&amp;lt;math&amp;gt;x_2^3 \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;{x_2}^3&amp;lt;/code&amp;gt;||&amp;lt;math&amp;gt;{x_2}^3&amp;lt;/math&amp;gt;||&amp;lt;math&amp;gt;{x_2}^3 \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Super super||&amp;lt;code&amp;gt;10^{10^{ \,\!{8} }&amp;lt;/code&amp;gt;||colspan=2|&amp;lt;math&amp;gt;10^{10^{ \,\! 8 } }&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Super super||&amp;lt;code&amp;gt;10^{10^{ \overset{8}{} }}&amp;lt;/code&amp;gt;||colspan=2|&amp;lt;math&amp;gt;10^{10^{ \overset{8}{} }}&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Super super (wrong in HTML in some browsers)||&amp;lt;code&amp;gt;10^{10^8}&amp;lt;/code&amp;gt; ||colspan=2|&amp;lt;math&amp;gt;10^{10^8}&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot;|Preceding and/or Additional sub &amp;amp; super||&amp;lt;code&amp;gt;\sideset{_1^2}{_3^4}\prod_a^b&amp;lt;/code&amp;gt;||colspan=2|&amp;lt;math&amp;gt;\sideset{_1^2}{_3^4}\prod_a^b&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;{}_1^2\!\Omega_3^4&amp;lt;/code&amp;gt;||colspan=2|&amp;lt;math&amp;gt;{}_1^2\!\Omega_3^4&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;4&amp;quot;|Stacking&lt;br /&gt;
|&amp;lt;code&amp;gt;\overset{\alpha}{\omega}&amp;lt;/code&amp;gt;||colspan=&amp;quot;2&amp;quot;|&amp;lt;math&amp;gt;\overset{\alpha}{\omega}&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\underset{\alpha}{\omega}&amp;lt;/code&amp;gt;||colspan=&amp;quot;2&amp;quot;|&amp;lt;math&amp;gt;\underset{\alpha}{\omega}&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\overset{\alpha}{\underset{\gamma}{\omega}}&amp;lt;/code&amp;gt;||colspan=&amp;quot;2&amp;quot;|&amp;lt;math&amp;gt;\overset{\alpha}{\underset{\gamma}{\omega}}&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\stackrel{\alpha}{\omega}&amp;lt;/code&amp;gt;||colspan=&amp;quot;2&amp;quot;|&amp;lt;math&amp;gt;\stackrel{\alpha}{\omega}&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Derivative (forced PNG)||&amp;lt;code&amp;gt;x&#039;, y&amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt;, f&#039;, f&amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt;\!&amp;lt;/code&amp;gt;||&amp;amp;nbsp;||&amp;lt;math&amp;gt;x&#039;, y&#039;&#039;, f&#039;, f&#039;&#039;\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Derivative (f in italics may overlap primes in HTML)||&amp;lt;code&amp;gt;x&#039;, y&amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt;, f&#039;, f&amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;||&amp;lt;math&amp;gt;x&#039;, y&#039;&#039;, f&#039;, f&#039;&#039;&amp;lt;/math&amp;gt;||&amp;lt;math&amp;gt;x&#039;, y&#039;&#039;, f&#039;, f&#039;&#039;\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Derivative (wrong in HTML)||&amp;lt;code&amp;gt;x^\prime, y^{\prime\prime}&amp;lt;/code&amp;gt;||&amp;lt;math&amp;gt;x^\prime, y^{\prime\prime}&amp;lt;/math&amp;gt;||&amp;lt;math&amp;gt;x^\prime, y^{\prime\prime}\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Derivative (wrong in PNG)||&amp;lt;code&amp;gt;x\prime, y\prime\prime&amp;lt;/code&amp;gt;||&amp;lt;math&amp;gt;x\prime, y\prime\prime&amp;lt;/math&amp;gt;||&amp;lt;math&amp;gt;x\prime, y\prime\prime\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Derivative dots||&amp;lt;code&amp;gt;\dot{x}, \ddot{x}&amp;lt;/code&amp;gt;||colspan=2|&amp;lt;math&amp;gt;\dot{x}, \ddot{x}&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;3&amp;quot;|Underlines, overlines, vectors||&amp;lt;code&amp;gt;\hat a \ \bar b \ \vec c&amp;lt;/code&amp;gt;||colspan=2|&amp;lt;math&amp;gt;\hat a \ \bar b \ \vec c&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\overrightarrow{a b} \ \overleftarrow{c d} \ \widehat{d e f}&amp;lt;/code&amp;gt;||colspan=2|&amp;lt;math&amp;gt;\overrightarrow{a b} \ \overleftarrow{c d} \ \widehat{d e f}&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\overline{g h i} \ \underline{j k l}&amp;lt;/code&amp;gt;||colspan=2|&amp;lt;math&amp;gt;\overline{g h i} \ \underline{j k l}&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Arrows||&amp;lt;code&amp;gt; A \xleftarrow{n+\mu-1} B \xrightarrow[T]{n\pm i-1} C&amp;lt;/code&amp;gt;||colspan=2|&amp;lt;math&amp;gt; A \xleftarrow{n+\mu-1} B \xrightarrow[T]{n\pm i-1} C&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Overbraces||&amp;lt;code&amp;gt;\overbrace{ 1+2+\cdots+100 }^{5050}&amp;lt;/code&amp;gt;||colspan=2|&amp;lt;math&amp;gt;\overbrace{ 1+2+\cdots+100 }^{5050}&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Underbraces||&amp;lt;code&amp;gt;\underbrace{ a+b+\cdots+z }_{26}&amp;lt;/code&amp;gt;||colspan=2|&amp;lt;math&amp;gt;\underbrace{ a+b+\cdots+z }_{26}&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Sum||&amp;lt;code&amp;gt;\sum_{k=1}^N k^2&amp;lt;/code&amp;gt;||colspan=2|&amp;lt;math&amp;gt;\sum_{k=1}^N k^2&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Sum (force&amp;amp;nbsp;&amp;lt;code&amp;gt;\textstyle&amp;lt;/code&amp;gt;)||&amp;lt;code&amp;gt;\textstyle \sum_{k=1}^N k^2 &amp;lt;/code&amp;gt;||colspan=2|&amp;lt;math&amp;gt;\textstyle \sum_{k=1}^N k^2&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Product||&amp;lt;code&amp;gt;\prod_{i=1}^N x_i&amp;lt;/code&amp;gt;||colspan=2|&amp;lt;math&amp;gt;\prod_{i=1}^N x_i&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Product (force&amp;amp;nbsp;&amp;lt;code&amp;gt;\textstyle&amp;lt;/code&amp;gt;)||&amp;lt;code&amp;gt;\textstyle \prod_{i=1}^N x_i&amp;lt;/code&amp;gt;||colspan=2|&amp;lt;math&amp;gt;\textstyle \prod_{i=1}^N x_i&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Coproduct||&amp;lt;code&amp;gt;\coprod_{i=1}^N x_i&amp;lt;/code&amp;gt;||colspan=2|&amp;lt;math&amp;gt;\coprod_{i=1}^N x_i&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Coproduct (force&amp;amp;nbsp;&amp;lt;code&amp;gt;\textstyle&amp;lt;/code&amp;gt;)||&amp;lt;code&amp;gt;\textstyle \coprod_{i=1}^N x_i&amp;lt;/code&amp;gt;||colspan=2|&amp;lt;math&amp;gt;\textstyle \coprod_{i=1}^N x_i&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Limit||&amp;lt;code&amp;gt;\lim_{n \to \infty}x_n&amp;lt;/code&amp;gt;||colspan=2|&amp;lt;math&amp;gt;\lim_{n \to \infty}x_n&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Limit (force&amp;amp;nbsp;&amp;lt;code&amp;gt;\textstyle&amp;lt;/code&amp;gt;)||&amp;lt;code&amp;gt;\textstyle \lim_{n \to \infty}x_n&amp;lt;/code&amp;gt;||colspan=2|&amp;lt;math&amp;gt;\textstyle \lim_{n \to \infty}x_n&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Integral||&amp;lt;code&amp;gt;\int\limits_{1}^{3}\frac{e^3/x}{x^2}\, dx&amp;lt;/code&amp;gt;||colspan=2|&amp;lt;math&amp;gt;\int\limits_{1}^{3}\frac{e^3/x}{x^2}\, dx&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Integral (alternate limits style)||&amp;lt;code&amp;gt;\int_{1}^{3}\frac{e^3/x}{x^2}\, dx&amp;lt;/code&amp;gt;||colspan=2|&amp;lt;math&amp;gt;\int_{1}^{3}\frac{e^3/x}{x^2}\, dx&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Integral (force&amp;amp;nbsp;&amp;lt;code&amp;gt;\textstyle&amp;lt;/code&amp;gt;)||&amp;lt;code&amp;gt;\textstyle \int\limits_{-N}^{N} e^x\, dx&amp;lt;/code&amp;gt;||colspan=2|&amp;lt;math&amp;gt;\textstyle \int\limits_{-N}^{N} e^x\, dx&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Integral (force&amp;amp;nbsp;&amp;lt;code&amp;gt;\textstyle&amp;lt;/code&amp;gt;, alternate limits style)||&amp;lt;code&amp;gt;\textstyle \int_{-N}^{N} e^x\, dx&amp;lt;/code&amp;gt;||colspan=2|&amp;lt;math&amp;gt;\textstyle \int_{-N}^{N} e^x\, dx&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Double integral||&amp;lt;code&amp;gt;\iint\limits_D \, dx\,dy&amp;lt;/code&amp;gt;||colspan=2|&amp;lt;math&amp;gt;\iint\limits_D \, dx\,dy&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Triple integral||&amp;lt;code&amp;gt;\iiint\limits_E \, dx\,dy\,dz&amp;lt;/code&amp;gt;||colspan=2|&amp;lt;math&amp;gt;\iiint\limits_E \, dx\,dy\,dz&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Quadruple integral||&amp;lt;code&amp;gt;\iiiint\limits_F \, dx\,dy\,dz\,dt&amp;lt;/code&amp;gt;||colspan=2|&amp;lt;math&amp;gt;\iiiint\limits_F \, dx\,dy\,dz\,dt&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Line or path integral||&amp;lt;code&amp;gt;\int_C x^3\, dx + 4y^2\, dy&amp;lt;/code&amp;gt;||colspan=2|&amp;lt;math&amp;gt;\int_C x^3\, dx + 4y^2\, dy&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Closed line or path integral||&amp;lt;code&amp;gt;\oint_C x^3\, dx + 4y^2\, dy&amp;lt;/code&amp;gt;||colspan=2|&amp;lt;math&amp;gt;\oint_C x^3\, dx + 4y^2\, dy&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Intersections||&amp;lt;code&amp;gt;\bigcap_1^n p&amp;lt;/code&amp;gt;||colspan=2|&amp;lt;math&amp;gt;\bigcap_1^n p&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Unions||&amp;lt;code&amp;gt;\bigcup_1^k p&amp;lt;/code&amp;gt;||colspan=2|&amp;lt;math&amp;gt;\bigcup_1^k p&amp;lt;/math&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Fractions, matrices, multilines ===&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Feature&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Syntax&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;How it looks rendered&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Fractions&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;\frac{2}{4}=0.5&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;\frac{2}{4}=0.5&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Small Fractions&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;\tfrac{2}{4} = 0.5&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;\tfrac{2}{4} = 0.5&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Large (normal) Fractions&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;\dfrac{2}{4} = 0.5 \qquad \dfrac{2}{c + \dfrac{2}{d + \dfrac{2}{4}}} = a &amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;\dfrac{2}{4} = 0.5 \qquad \dfrac{2}{c + \dfrac{2}{d + \dfrac{2}{4}}} = a&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Large (nested) Fractions&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;\cfrac{2}{c + \cfrac{2}{d + \cfrac{2}{4}}} = a&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;\cfrac{2}{c + \cfrac{2}{d + \cfrac{2}{4}}} = a&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Binomial coefficients&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;\binom{n}{k}&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;\binom{n}{k}&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Small Binomial coefficients&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;\tbinom{n}{k}&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;\tbinom{n}{k}&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Large (normal) Binomial coefficients&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;\dbinom{n}{k}&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;\dbinom{n}{k}&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td rowspan=&amp;quot;7&amp;quot;&amp;gt;Matrices&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;pre&amp;gt;\begin{matrix}&lt;br /&gt;
  x &amp;amp; y \\&lt;br /&gt;
  z &amp;amp; v &lt;br /&gt;
\end{matrix}&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;\begin{matrix} x &amp;amp; y \\ z &amp;amp; v&lt;br /&gt;
\end{matrix}&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;pre&amp;gt;\begin{vmatrix}&lt;br /&gt;
  x &amp;amp; y \\&lt;br /&gt;
  z &amp;amp; v &lt;br /&gt;
\end{vmatrix}&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;\begin{vmatrix} x &amp;amp; y \\ z &amp;amp; v&lt;br /&gt;
\end{vmatrix}&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;pre&amp;gt;\begin{Vmatrix}&lt;br /&gt;
  x &amp;amp; y \\&lt;br /&gt;
  z &amp;amp; v&lt;br /&gt;
\end{Vmatrix}&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;\begin{Vmatrix} x &amp;amp; y \\ z &amp;amp; v&lt;br /&gt;
\end{Vmatrix}&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;pre&amp;gt;\begin{bmatrix}&lt;br /&gt;
  0      &amp;amp; \cdots &amp;amp; 0      \\&lt;br /&gt;
  \vdots &amp;amp; \ddots &amp;amp; \vdots \\ &lt;br /&gt;
  0      &amp;amp; \cdots &amp;amp; 0&lt;br /&gt;
\end{bmatrix}&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;\begin{bmatrix} 0 &amp;amp; \cdots &amp;amp; 0 \\ \vdots&lt;br /&gt;
&amp;amp; \ddots &amp;amp; \vdots \\ 0 &amp;amp; \cdots &amp;amp;&lt;br /&gt;
0\end{bmatrix} &amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;pre&amp;gt;\begin{Bmatrix}&lt;br /&gt;
  x &amp;amp; y \\&lt;br /&gt;
  z &amp;amp; v&lt;br /&gt;
\end{Bmatrix}&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;\begin{Bmatrix} x &amp;amp; y \\ z &amp;amp; v&lt;br /&gt;
\end{Bmatrix}&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;pre&amp;gt;\begin{pmatrix}&lt;br /&gt;
  x &amp;amp; y \\&lt;br /&gt;
  z &amp;amp; v &lt;br /&gt;
\end{pmatrix}&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;\begin{pmatrix} x &amp;amp; y \\ z &amp;amp; v&lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
\bigl( \begin{smallmatrix}&lt;br /&gt;
  a&amp;amp;b\\ c&amp;amp;d&lt;br /&gt;
\end{smallmatrix} \bigr)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
\bigl( \begin{smallmatrix}&lt;br /&gt;
  a&amp;amp;b\\ c&amp;amp;d&lt;br /&gt;
\end{smallmatrix} \bigr)&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Case distinctions&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
f(n) = &lt;br /&gt;
\begin{cases} &lt;br /&gt;
  n/2,  &amp;amp; \mbox{if }n\mbox{ is even} \\&lt;br /&gt;
  3n+1, &amp;amp; \mbox{if }n\mbox{ is odd} &lt;br /&gt;
\end{cases}&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;f(n) = &lt;br /&gt;
\begin{cases}&lt;br /&gt;
  n/2,  &amp;amp; \mbox{if }n\mbox{ is even} \\ &lt;br /&gt;
  3n+1, &amp;amp; \mbox{if }n\mbox{ is odd} &lt;br /&gt;
\end{cases} &amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td rowspan=&amp;quot;2&amp;quot;&amp;gt;Multiline equations&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
 f(x) &amp;amp; = (a+b)^2 \\&lt;br /&gt;
      &amp;amp; = a^2+2ab+b^2 \\&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
 f(x) &amp;amp; = (a+b)^2 \\&lt;br /&gt;
      &amp;amp; = a^2+2ab+b^2 \\&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
\begin{alignat}{2}&lt;br /&gt;
 f(x) &amp;amp; = (a-b)^2 \\&lt;br /&gt;
      &amp;amp; = a^2-2ab+b^2 \\&lt;br /&gt;
\end{alignat}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{alignat}{2}&lt;br /&gt;
 f(x) &amp;amp; = (a-b)^2 \\&lt;br /&gt;
      &amp;amp; = a^2-2ab+b^2 \\&lt;br /&gt;
\end{alignat}&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Multiline equations &amp;lt;small&amp;gt;(must define number of colums used ({lcr}) &amp;lt;small&amp;gt;(should not be used unless needed)&amp;lt;/small&amp;gt;&amp;lt;/small&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
\begin{array}{lcl}&lt;br /&gt;
  z        &amp;amp; = &amp;amp; a \\&lt;br /&gt;
  f(x,y,z) &amp;amp; = &amp;amp; x + y + z  &lt;br /&gt;
\end{array}&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;\begin{array}{lcl}&lt;br /&gt;
  z        &amp;amp; = &amp;amp; a \\&lt;br /&gt;
  f(x,y,z) &amp;amp; = &amp;amp; x + y + z  &lt;br /&gt;
\end{array}&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Multiline equations (more)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
\begin{array}{lcr}&lt;br /&gt;
  z        &amp;amp; = &amp;amp; a \\&lt;br /&gt;
  f(x,y,z) &amp;amp; = &amp;amp; x + y + z     &lt;br /&gt;
\end{array}&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;\begin{array}{lcr}&lt;br /&gt;
  z        &amp;amp; = &amp;amp; a \\&lt;br /&gt;
  f(x,y,z) &amp;amp; = &amp;amp; x + y + z     &lt;br /&gt;
\end{array}&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Breaking up a long expression so that it wraps when necessary, at the expense of destroying correct spacing&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;f(x) \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;= \sum_{n=0}^\infty a_n x^n &amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;= a_0+a_1x+a_2x^2+\cdots&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;f(x) \,\!&amp;lt;/math&amp;gt;&amp;lt;math&amp;gt;= \sum_{n=0}^\infty a_n x^n &amp;lt;/math&amp;gt;&amp;lt;math&amp;gt;= a_0 +a_1x+a_2x^2+\cdots&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Simultaneous equations&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;pre&amp;gt;\begin{cases}&lt;br /&gt;
    3x + 5y +  z \\&lt;br /&gt;
    7x - 2y + 4z \\&lt;br /&gt;
   -6x + 3y + 2z &lt;br /&gt;
\end{cases}&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;\begin{cases} 3x + 5y + z \\ 7x - 2y + 4z \\ -6x + 3y + 2z \end{cases}&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Arrays&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
\begin{array}{|c|c||c|} a &amp;amp; b &amp;amp; S \\&lt;br /&gt;
\hline&lt;br /&gt;
0&amp;amp;0&amp;amp;1\\&lt;br /&gt;
0&amp;amp;1&amp;amp;1\\&lt;br /&gt;
1&amp;amp;0&amp;amp;1\\&lt;br /&gt;
1&amp;amp;1&amp;amp;0\\&lt;br /&gt;
\end{array}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{array}{|c|c||c|} a &amp;amp; b &amp;amp; S \\&lt;br /&gt;
\hline&lt;br /&gt;
0&amp;amp;0&amp;amp;1\\&lt;br /&gt;
0&amp;amp;1&amp;amp;1\\&lt;br /&gt;
1&amp;amp;0&amp;amp;1\\&lt;br /&gt;
1&amp;amp;1&amp;amp;0\\&lt;br /&gt;
\end{array}&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Parenthesizing big expressions, brackets, bars ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Feature !! Syntax !! How it looks rendered&lt;br /&gt;
|-&lt;br /&gt;
| Bad&lt;br /&gt;
| &amp;lt;code&amp;gt;( \frac{1}{2} )&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;math&amp;gt;( \frac{1}{2} )&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Good&lt;br /&gt;
| &amp;lt;code&amp;gt;\left ( \frac{1}{2} \right )&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;math&amp;gt;\left ( \frac{1}{2} \right )&amp;lt;/math&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You can use various delimiters with \left and \right: &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Feature&lt;br /&gt;
! Syntax&lt;br /&gt;
! How it looks rendered&lt;br /&gt;
|-&lt;br /&gt;
| Parentheses&lt;br /&gt;
| &amp;lt;code&amp;gt;\left ( \frac{a}{b} \right )&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;math&amp;gt;\left ( \frac{a}{b} \right )&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Brackets&lt;br /&gt;
| &amp;lt;code&amp;gt;\left [ \frac{a}{b} \right ] \quad \left \lbrack \frac{a}{b} \right \rbrack&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;math&amp;gt;\left [ \frac{a}{b} \right ] \quad \left \lbrack \frac{a}{b} \right \rbrack&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Braces&lt;br /&gt;
| &amp;lt;code&amp;gt;\left \{ \frac{a}{b} \right \} \quad \left \lbrace \frac{a}{b} \right \rbrace&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;math&amp;gt;\left \{ \frac{a}{b} \right \} \quad \left \lbrace \frac{a}{b} \right \rbrace&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Angle brackets&lt;br /&gt;
| &amp;lt;code&amp;gt;\left \langle \frac{a}{b} \right \rangle&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;math&amp;gt;\left \langle \frac{a}{b} \right \rangle&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Bars and double bars&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\left | \frac{a}{b} \right \vert \left \Vert \frac{c}{d} \right \|&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;math&amp;gt;\left | \frac{a}{b} \right \vert \left \Vert \frac{c}{d} \right \|&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Floor and ceiling functions:&lt;br /&gt;
| &amp;lt;code&amp;gt;\left \lfloor \frac{a}{b} \right \rfloor \left \lceil \frac{c}{d} \right \rceil&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;math&amp;gt;\left \lfloor \frac{a}{b} \right \rfloor \left \lceil \frac{c}{d} \right \rceil&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Slashes and backslashes&lt;br /&gt;
| &amp;lt;code&amp;gt;\left / \frac{a}{b} \right \backslash&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;math&amp;gt;\left / \frac{a}{b} \right \backslash&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Up, down and up-down arrows&lt;br /&gt;
| &amp;lt;code&amp;gt;\left \uparrow \frac{a}{b} \right \downarrow \quad \left \Uparrow \frac{a}{b} \right \Downarrow \quad \left \updownarrow \frac{a}{b} \right \Updownarrow&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;math&amp;gt;\left \uparrow \frac{a}{b} \right \downarrow \quad \left \Uparrow \frac{a}{b} \right \Downarrow \quad \left \updownarrow \frac{a}{b} \right \Updownarrow&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Delimiters can be mixed,&amp;lt;br/&amp;gt;as long as \left and \right match&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\left [ 0,1 \right )&amp;lt;/code&amp;gt; &amp;lt;br/&amp;gt; &amp;lt;code&amp;gt;\left \langle \psi \right |&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;math&amp;gt;\left [ 0,1 \right )&amp;lt;/math&amp;gt; &amp;lt;br/&amp;gt; &amp;lt;math&amp;gt;\left \langle \psi \right |&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Use \left. and \right. if you don&#039;t&amp;lt;br/&amp;gt;want a delimiter to appear:&lt;br /&gt;
| &amp;lt;code&amp;gt;\left . \frac{A}{B} \right \} \to X&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;math&amp;gt;\left . \frac{A}{B} \right \} \to X&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;7&amp;quot; | Size of the delimiters&lt;br /&gt;
| &amp;lt;code&amp;gt;\big( \Big( \bigg( \Bigg( \dots \Bigg] \bigg] \Big] \big]/&amp;lt;code&amp;gt;&lt;br /&gt;
| &amp;lt;math&amp;gt;\big( \Big( \bigg( \Bigg( \dots \Bigg] \bigg] \Big] \big]&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;\big\{ \Big\{ \bigg\{ \Bigg\{ \dots \Bigg\rangle \bigg\rangle \Big\rangle \big\rangle&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;math&amp;gt;\big\{ \Big\{ \bigg\{ \Bigg\{ \dots \Bigg\rangle \bigg\rangle \Big\rangle \big\rangle&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\big\| \Big\| \bigg\| \Bigg\| \dots \Bigg| \bigg| \Big| \big|&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;math&amp;gt;\big\| \Big\| \bigg\| \Bigg\| \dots \Bigg| \bigg| \Big| \big|&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;\big\lfloor \Big\lfloor \bigg\lfloor \Bigg\lfloor \dots \Bigg\rceil \bigg\rceil \Big\rceil \big\rceil&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;math&amp;gt;\big\lfloor \Big\lfloor \bigg\lfloor \Bigg\lfloor \dots \Bigg\rceil \bigg\rceil \Big\rceil \big\rceil&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;\big\uparrow \Big\uparrow \bigg\uparrow \Bigg\uparrow \dots \Bigg\Downarrow \bigg\Downarrow \Big\Downarrow \big\Downarrow&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;math&amp;gt;\big\uparrow \Big\uparrow \bigg\uparrow \Bigg\uparrow \dots \Bigg\Downarrow \bigg\Downarrow \Big\Downarrow \big\Downarrow&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;\big\updownarrow \Big\updownarrow \bigg\updownarrow \Bigg\updownarrow \dots \Bigg\Updownarrow \bigg\Updownarrow \Big\Updownarrow \big\Updownarrow&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;math&amp;gt;\big\updownarrow \Big\updownarrow \bigg\updownarrow \Bigg\updownarrow \dots \Bigg\Updownarrow \bigg\Updownarrow \Big\Updownarrow \big\Updownarrow&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;\big / \Big / \bigg / \Bigg / \dots \Bigg\backslash \bigg\backslash \Big\backslash \big\backslash&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;math&amp;gt;\big / \Big / \bigg / \Bigg / \dots \Bigg\backslash \bigg\backslash \Big\backslash \big\backslash&amp;lt;/math&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Alphabets and typefaces == &lt;br /&gt;
[[w:Texvc|Texvc]] cannot render arbitrary [[w:Unicode|Unicode]] characters. Those it can handle can be entered by the expressions below.&lt;br /&gt;
For others, such as [[w:Cyrillic|Cyrillic]], they can be entered as Unicode or HTML entities in running text, but cannot be used in displayed formulas.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; | Greek alphabet&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\Alpha \Beta \Gamma \Delta \Epsilon \Zeta&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\Alpha \Beta \Gamma \Delta \Epsilon \Zeta \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\Eta \Theta \Iota \Kappa \Lambda \Mu&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\Eta \Theta \Iota \Kappa \Lambda \Mu \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\Nu \Xi \Pi \Rho \Sigma \Tau&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\Nu \Xi \Pi \Rho \Sigma \Tau\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\Upsilon \Phi \Chi \Psi \Omega&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\Upsilon \Phi \Chi \Psi \Omega \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\alpha \beta \gamma \delta \epsilon \zeta&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\alpha \beta \gamma \delta \epsilon \zeta \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\eta \theta \iota \kappa \lambda \mu&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\eta \theta \iota \kappa \lambda \mu \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\nu \xi \pi \rho \sigma \tau&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\nu \xi \pi \rho \sigma \tau \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\upsilon \phi \chi \psi \omega&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\upsilon \phi \chi \psi \omega \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\varepsilon \digamma \vartheta \varkappa&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\varepsilon \digamma \vartheta \varkappa \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\varpi \varrho \varsigma \varphi&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\varpi \varrho \varsigma \varphi\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; | Blackboard Bold/Scripts&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathbb{A} \mathbb{B} \mathbb{C} \mathbb{D} \mathbb{E} \mathbb{F} \mathbb{G}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathbb{A} \mathbb{B} \mathbb{C} \mathbb{D} \mathbb{E} \mathbb{F} \mathbb{G} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathbb{H} \mathbb{I} \mathbb{J} \mathbb{K} \mathbb{L} \mathbb{M}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathbb{H} \mathbb{I} \mathbb{J} \mathbb{K} \mathbb{L} \mathbb{M} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathbb{N} \mathbb{O} \mathbb{P} \mathbb{Q} \mathbb{R} \mathbb{S} \mathbb{T}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathbb{N} \mathbb{O} \mathbb{P} \mathbb{Q} \mathbb{R} \mathbb{S} \mathbb{T} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathbb{U} \mathbb{V} \mathbb{W} \mathbb{X} \mathbb{Y} \mathbb{Z}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathbb{U} \mathbb{V} \mathbb{W} \mathbb{X} \mathbb{Y} \mathbb{Z}\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; | boldface (vectors)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathbf{A} \mathbf{B} \mathbf{C} \mathbf{D} \mathbf{E} \mathbf{F} \mathbf{G}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathbf{A} \mathbf{B} \mathbf{C} \mathbf{D} \mathbf{E} \mathbf{F} \mathbf{G} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathbf{H} \mathbf{I} \mathbf{J} \mathbf{K} \mathbf{L} \mathbf{M}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathbf{H} \mathbf{I} \mathbf{J} \mathbf{K} \mathbf{L} \mathbf{M} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathbf{N} \mathbf{O} \mathbf{P} \mathbf{Q} \mathbf{R} \mathbf{S} \mathbf{T}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathbf{N} \mathbf{O} \mathbf{P} \mathbf{Q} \mathbf{R} \mathbf{S} \mathbf{T} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathbf{U} \mathbf{V} \mathbf{W} \mathbf{X} \mathbf{Y} \mathbf{Z}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathbf{U} \mathbf{V} \mathbf{W} \mathbf{X} \mathbf{Y} \mathbf{Z} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathbf{a} \mathbf{b} \mathbf{c} \mathbf{d} \mathbf{e} \mathbf{f} \mathbf{g}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathbf{a} \mathbf{b} \mathbf{c} \mathbf{d} \mathbf{e} \mathbf{f} \mathbf{g} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathbf{h} \mathbf{i} \mathbf{j} \mathbf{k} \mathbf{l} \mathbf{m}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathbf{h} \mathbf{i} \mathbf{j} \mathbf{k} \mathbf{l} \mathbf{m} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathbf{n} \mathbf{o} \mathbf{p} \mathbf{q} \mathbf{r} \mathbf{s} \mathbf{t}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathbf{n} \mathbf{o} \mathbf{p} \mathbf{q} \mathbf{r} \mathbf{s} \mathbf{t} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathbf{u} \mathbf{v} \mathbf{w} \mathbf{x} \mathbf{y} \mathbf{z}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathbf{u} \mathbf{v} \mathbf{w} \mathbf{x} \mathbf{y} \mathbf{z} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathbf{0} \mathbf{1} \mathbf{2} \mathbf{3} \mathbf{4}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathbf{0} \mathbf{1} \mathbf{2} \mathbf{3} \mathbf{4} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathbf{5} \mathbf{6} \mathbf{7} \mathbf{8} \mathbf{9}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathbf{5} \mathbf{6} \mathbf{7} \mathbf{8} \mathbf{9}\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; | Boldface (greek)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\boldsymbol{\Alpha} \boldsymbol{\Beta} \boldsymbol{\Gamma} \boldsymbol{\Delta} \boldsymbol{\Epsilon} \boldsymbol{\Zeta}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\boldsymbol{\Alpha} \boldsymbol{\Beta} \boldsymbol{\Gamma} \boldsymbol{\Delta} \boldsymbol{\Epsilon} \boldsymbol{\Zeta} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\boldsymbol{\Eta} \boldsymbol{\Theta} \boldsymbol{\Iota} \boldsymbol{\Kappa} \boldsymbol{\Lambda} \boldsymbol{\Mu}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\boldsymbol{\Eta} \boldsymbol{\Theta} \boldsymbol{\Iota} \boldsymbol{\Kappa} \boldsymbol{\Lambda} \boldsymbol{\Mu}\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\boldsymbol{\Nu} \boldsymbol{\Xi} \boldsymbol{\Pi} \boldsymbol{\Rho} \boldsymbol{\Sigma} \boldsymbol{\Tau}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\boldsymbol{\Nu} \boldsymbol{\Xi} \boldsymbol{\Pi} \boldsymbol{\Rho} \boldsymbol{\Sigma} \boldsymbol{\Tau}\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\boldsymbol{\Upsilon} \boldsymbol{\Phi} \boldsymbol{\Chi} \boldsymbol{\Psi} \boldsymbol{\Omega}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\boldsymbol{\Upsilon} \boldsymbol{\Phi} \boldsymbol{\Chi} \boldsymbol{\Psi} \boldsymbol{\Omega}\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\boldsymbol{\alpha} \boldsymbol{\beta} \boldsymbol{\gamma} \boldsymbol{\delta} \boldsymbol{\epsilon} \boldsymbol{\zeta}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\boldsymbol{\alpha} \boldsymbol{\beta} \boldsymbol{\gamma} \boldsymbol{\delta} \boldsymbol{\epsilon} \boldsymbol{\zeta}\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\boldsymbol{\eta} \boldsymbol{\theta} \boldsymbol{\iota} \boldsymbol{\kappa} \boldsymbol{\lambda} \boldsymbol{\mu}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\boldsymbol{\eta} \boldsymbol{\theta} \boldsymbol{\iota} \boldsymbol{\kappa} \boldsymbol{\lambda} \boldsymbol{\mu}\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\boldsymbol{\nu} \boldsymbol{\xi} \boldsymbol{\pi} \boldsymbol{\rho} \boldsymbol{\sigma} \boldsymbol{\tau}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\boldsymbol{\nu} \boldsymbol{\xi} \boldsymbol{\pi} \boldsymbol{\rho} \boldsymbol{\sigma} \boldsymbol{\tau}\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\boldsymbol{\upsilon} \boldsymbol{\phi} \boldsymbol{\chi} \boldsymbol{\psi} \boldsymbol{\omega}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\boldsymbol{\upsilon} \boldsymbol{\phi} \boldsymbol{\chi} \boldsymbol{\psi} \boldsymbol{\omega}\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\boldsymbol{\varepsilon} \boldsymbol{\digamma} \boldsymbol{\vartheta} \boldsymbol{\varkappa}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\boldsymbol{\varepsilon} \boldsymbol{\digamma} \boldsymbol{\vartheta} \boldsymbol{\varkappa} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\boldsymbol{\varpi} \boldsymbol{\varrho} \boldsymbol{\varsigma} \boldsymbol{\varphi}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\boldsymbol{\varpi} \boldsymbol{\varrho} \boldsymbol{\varsigma} \boldsymbol{\varphi}\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; | Italics&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathit{A} \mathit{B} \mathit{C} \mathit{D} \mathit{E} \mathit{F} \mathit{G}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathit{A} \mathit{B} \mathit{C} \mathit{D} \mathit{E} \mathit{F} \mathit{G} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathit{H} \mathit{I} \mathit{J} \mathit{K} \mathit{L} \mathit{M}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathit{H} \mathit{I} \mathit{J} \mathit{K} \mathit{L} \mathit{M} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathit{N} \mathit{O} \mathit{P} \mathit{Q} \mathit{R} \mathit{S} \mathit{T}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathit{N} \mathit{O} \mathit{P} \mathit{Q} \mathit{R} \mathit{S} \mathit{T} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathit{U} \mathit{V} \mathit{W} \mathit{X} \mathit{Y} \mathit{Z}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathit{U} \mathit{V} \mathit{W} \mathit{X} \mathit{Y} \mathit{Z} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathit{a} \mathit{b} \mathit{c} \mathit{d} \mathit{e} \mathit{f} \mathit{g}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathit{a} \mathit{b} \mathit{c} \mathit{d} \mathit{e} \mathit{f} \mathit{g} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathit{h} \mathit{i} \mathit{j} \mathit{k} \mathit{l} \mathit{m}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathit{h} \mathit{i} \mathit{j} \mathit{k} \mathit{l} \mathit{m} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathit{n} \mathit{o} \mathit{p} \mathit{q} \mathit{r} \mathit{s} \mathit{t}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathit{n} \mathit{o} \mathit{p} \mathit{q} \mathit{r} \mathit{s} \mathit{t} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathit{u} \mathit{v} \mathit{w} \mathit{x} \mathit{y} \mathit{z}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathit{u} \mathit{v} \mathit{w} \mathit{x} \mathit{y} \mathit{z} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathit{0} \mathit{1} \mathit{2} \mathit{3} \mathit{4}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathit{0} \mathit{1} \mathit{2} \mathit{3} \mathit{4} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathit{5} \mathit{6} \mathit{7} \mathit{8} \mathit{9}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathit{5} \mathit{6} \mathit{7} \mathit{8} \mathit{9}\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; | Roman typeface&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathrm{A} \mathrm{B} \mathrm{C} \mathrm{D} \mathrm{E} \mathrm{F} \mathrm{G}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathrm{A} \mathrm{B} \mathrm{C} \mathrm{D} \mathrm{E} \mathrm{F} \mathrm{G} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathrm{H} \mathrm{I} \mathrm{J} \mathrm{K} \mathrm{L} \mathrm{M}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathrm{H} \mathrm{I} \mathrm{J} \mathrm{K} \mathrm{L} \mathrm{M} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathrm{N} \mathrm{O} \mathrm{P} \mathrm{Q} \mathrm{R} \mathrm{S} \mathrm{T}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathrm{N} \mathrm{O} \mathrm{P} \mathrm{Q} \mathrm{R} \mathrm{S} \mathrm{T} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathrm{U} \mathrm{V} \mathrm{W} \mathrm{X} \mathrm{Y} \mathrm{Z}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathrm{U} \mathrm{V} \mathrm{W} \mathrm{X} \mathrm{Y} \mathrm{Z} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathrm{a} \mathrm{b} \mathrm{c} \mathrm{d} \mathrm{e} \mathrm{f} \mathrm{g}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathrm{a} \mathrm{b} \mathrm{c} \mathrm{d} \mathrm{e} \mathrm{f} \mathrm{g}\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathrm{h} \mathrm{i} \mathrm{j} \mathrm{k} \mathrm{l} \mathrm{m}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathrm{h} \mathrm{i} \mathrm{j} \mathrm{k} \mathrm{l} \mathrm{m} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathrm{n} \mathrm{o} \mathrm{p} \mathrm{q} \mathrm{r} \mathrm{s} \mathrm{t}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathrm{n} \mathrm{o} \mathrm{p} \mathrm{q} \mathrm{r} \mathrm{s} \mathrm{t} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathrm{u} \mathrm{v} \mathrm{w} \mathrm{x} \mathrm{y} \mathrm{z}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathrm{u} \mathrm{v} \mathrm{w} \mathrm{x} \mathrm{y} \mathrm{z} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathrm{0} \mathrm{1} \mathrm{2} \mathrm{3} \mathrm{4}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathrm{0} \mathrm{1} \mathrm{2} \mathrm{3} \mathrm{4} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathrm{5} \mathrm{6} \mathrm{7} \mathrm{8} \mathrm{9}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathrm{5} \mathrm{6} \mathrm{7} \mathrm{8} \mathrm{9}\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; | Fraktur typeface&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathfrak{A} \mathfrak{B} \mathfrak{C} \mathfrak{D} \mathfrak{E} \mathfrak{F} \mathfrak{G}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathfrak{A} \mathfrak{B} \mathfrak{C} \mathfrak{D} \mathfrak{E} \mathfrak{F} \mathfrak{G} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathfrak{H} \mathfrak{I} \mathfrak{J} \mathfrak{K} \mathfrak{L} \mathfrak{M}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathfrak{H} \mathfrak{I} \mathfrak{J} \mathfrak{K} \mathfrak{L} \mathfrak{M} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathfrak{N} \mathfrak{O} \mathfrak{P} \mathfrak{Q} \mathfrak{R} \mathfrak{S} \mathfrak{T}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathfrak{N} \mathfrak{O} \mathfrak{P} \mathfrak{Q} \mathfrak{R} \mathfrak{S} \mathfrak{T} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathfrak{U} \mathfrak{V} \mathfrak{W} \mathfrak{X} \mathfrak{Y} \mathfrak{Z}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathfrak{U} \mathfrak{V} \mathfrak{W} \mathfrak{X} \mathfrak{Y} \mathfrak{Z} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathfrak{a} \mathfrak{b} \mathfrak{c} \mathfrak{d} \mathfrak{e} \mathfrak{f} \mathfrak{g}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathfrak{a} \mathfrak{b} \mathfrak{c} \mathfrak{d} \mathfrak{e} \mathfrak{f} \mathfrak{g} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathfrak{h} \mathfrak{i} \mathfrak{j} \mathfrak{k} \mathfrak{l} \mathfrak{m}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathfrak{h} \mathfrak{i} \mathfrak{j} \mathfrak{k} \mathfrak{l} \mathfrak{m} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathfrak{n} \mathfrak{o} \mathfrak{p} \mathfrak{q} \mathfrak{r} \mathfrak{s} \mathfrak{t}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathfrak{n} \mathfrak{o} \mathfrak{p} \mathfrak{q} \mathfrak{r} \mathfrak{s} \mathfrak{t} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathfrak{u} \mathfrak{v} \mathfrak{w} \mathfrak{x} \mathfrak{y} \mathfrak{z}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathfrak{u} \mathfrak{v} \mathfrak{w} \mathfrak{x} \mathfrak{y} \mathfrak{z} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathfrak{0} \mathfrak{1} \mathfrak{2} \mathfrak{3} \mathfrak{4}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathfrak{0} \mathfrak{1} \mathfrak{2} \mathfrak{3} \mathfrak{4} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathfrak{5} \mathfrak{6} \mathfrak{7} \mathfrak{8} \mathfrak{9}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathfrak{5} \mathfrak{6} \mathfrak{7} \mathfrak{8} \mathfrak{9}\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; | Calligraphy/Script&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathcal{A} \mathcal{B} \mathcal{C} \mathcal{D} \mathcal{E} \mathcal{F} \mathcal{G}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathcal{A} \mathcal{B} \mathcal{C} \mathcal{D} \mathcal{E} \mathcal{F} \mathcal{G} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathcal{H} \mathcal{I} \mathcal{J} \mathcal{K} \mathcal{L} \mathcal{M}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathcal{H} \mathcal{I} \mathcal{J} \mathcal{K} \mathcal{L} \mathcal{M} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathcal{N} \mathcal{O} \mathcal{P} \mathcal{Q} \mathcal{R} \mathcal{S} \mathcal{T}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathcal{N} \mathcal{O} \mathcal{P} \mathcal{Q} \mathcal{R} \mathcal{S} \mathcal{T} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathcal{U} \mathcal{V} \mathcal{W} \mathcal{X} \mathcal{Y} \mathcal{Z}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathcal{U} \mathcal{V} \mathcal{W} \mathcal{X} \mathcal{Y} \mathcal{Z}\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; | Hebrew&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\aleph \beth \gimel \daleth&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\aleph \beth \gimel \daleth\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Feature&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Syntax&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th colspan=&amp;quot;2&amp;quot;&amp;gt;How it looks rendered&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;non-italicised characters&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;\mbox{abc}&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;\mbox{abc}&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;\mbox{abc} \,\!&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;mixed italics (bad)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;\mbox{if} n \mbox{is even}&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;\mbox{if} n \mbox{is even}&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;\mbox{if} n \mbox{is even} \,\!&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;mixed italics (good)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;\mbox{if }n\mbox{ is even}&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;\mbox{if }n\mbox{ is even}&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;\mbox{if }n\mbox{ is even} \,\!&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;mixed italics (more legible: ~ is a non-breaking space, while &amp;quot;\ &amp;quot; forces a space)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;\mbox{if}~n\ \mbox{is even}&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;\mbox{if}~n\ \mbox{is even}&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;\mbox{if}~n\ \mbox{is even} \,\!&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Color ==&lt;br /&gt;
&lt;br /&gt;
Equations can use color:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;{\color{Blue}x^2}+{\color{YellowOrange}2x}-{\color{OliveGreen}1}&amp;lt;/code&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;{\color{Blue}x^2}+{\color{YellowOrange}2x}-{\color{OliveGreen}1}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;x_{1,2}=\frac{-b\pm\sqrt{\color{Red}b^2-4ac}}{2a}&amp;lt;/code&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;x_{1,2}=\frac{-b\pm\sqrt{\color{Red}b^2-4ac}}{2a}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See here for [http://oregonstate.edu/%7Epeterseb/tex/samples/docs/color-package-demo.pdf all named colors] supported by LaTeX.&lt;br /&gt;
&lt;br /&gt;
Note that color should not be used as the &#039;&#039;only&#039;&#039; way to identify something, because it will become meaningless on black-and-white media or for color-blind people.  See [[en:Wikipedia:Manual of Style#Color coding]].&lt;br /&gt;
&lt;br /&gt;
== Formatting issues ==&lt;br /&gt;
=== Spacing ===&lt;br /&gt;
Note that TeX handles most spacing automatically, but you may sometimes want manual control. &lt;br /&gt;
&amp;lt;table border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Feature&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Syntax&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;How it looks rendered&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;double quad space&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;a \qquad b&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;a \qquad b&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;quad space&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;a \quad b&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;a \quad b&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;text space&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;a\ b&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;a\ b&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;text space without PNG conversion&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;a \mbox{ } b&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;a \mbox{ } b&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;large space&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;a\;b&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;a\;b&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;medium space&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;a\&amp;amp;gt;b&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[not supported]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;small space&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;a\,b&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;a\,b&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;no space&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;ab&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;ab\,&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;small negative space&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;a\!b&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;a\!b&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Alignment with normal text flow ===&lt;br /&gt;
Due to the default css&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;img.tex { vertical-align: middle; }&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
an inline expression like &amp;lt;math&amp;gt;\int_{-N}^{N} e^x\, dx&amp;lt;/math&amp;gt; should look good.&lt;br /&gt;
&lt;br /&gt;
If you need to align it otherwise, use &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;math style=&amp;quot;vertical-align:-100%;&amp;quot;&amp;gt;...&amp;lt;/math&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; and play with the &amp;lt;code&amp;gt;vertical-align&amp;lt;/code&amp;gt; argument until you get it right; however, how it looks may depend on the browser and the browser settings.&lt;br /&gt;
&lt;br /&gt;
Also note that if you rely on this workaround, if/when the rendering on the server gets fixed in future releases, as a result of this extra manual offset your formulae will suddenly be aligned incorrectly. So use it sparingly, if at all.&lt;br /&gt;
&lt;br /&gt;
=== Forced PNG rendering ===&lt;br /&gt;
&lt;br /&gt;
To force the formula to render as PNG, add &amp;lt;code&amp;gt;\,&amp;lt;/code&amp;gt; (small space) at the end of the formula (where it is not rendered).  This will force PNG if the user is in &amp;quot;HTML if simple&amp;quot; mode, but not for &amp;quot;HTML if possible&amp;quot; mode.&lt;br /&gt;
&lt;br /&gt;
You can also use &amp;lt;code&amp;gt;\,\!&amp;lt;/code&amp;gt; (small space and negative space, which cancel out) anywhere inside the math tags.  This &#039;&#039;does&#039;&#039; force PNG even in &amp;quot;HTML if possible&amp;quot; mode, unlike &amp;lt;code&amp;gt;\,&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This could be useful to keep the rendering of formulae in a proof consistent, for example, or to fix formulae that render incorrectly in HTML (at one time, a^{2+2} rendered with an extra underscore), or to demonstrate how something is rendered when it would normally show up as HTML (as in the examples above).&lt;br /&gt;
&lt;br /&gt;
For instance:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Syntax&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;How it looks rendered&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;a^{c+2}&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;a^{c+2}&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;a^{c+2} \,&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;a^{c+2} \,&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;a^{\,\!c+2}&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;a^{\,\!c+2}&amp;lt;/math&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;a^{b^{c+2}}&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;a^{b^{c+2}}&amp;lt;/math&amp;gt; (WRONG with option &amp;quot;HTML if possible or else PNG&amp;quot;!)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;a^{b^{c+2}} \,&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;a^{b^{c+2}} \,&amp;lt;/math&amp;gt; (WRONG with option &amp;quot;HTML if possible or else PNG&amp;quot;!)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;a^{b^{c+2}}\approx 5&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;a^{b^{c+2}}\approx 5&amp;lt;/math&amp;gt; (due to &amp;quot;&amp;lt;math&amp;gt;\approx&amp;lt;/math&amp;gt;&amp;quot; correctly displayed, no code &amp;quot;\,\!&amp;quot; needed)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;a^{b^{\,\!c+2}}&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;a^{b^{\,\!c+2}}&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;\int_{-N}^{N} e^x\, dx&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;\int_{-N}^{N} e^x\, dx&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This has been tested with most of the formulae on this page, and seems to work perfectly.&lt;br /&gt;
&lt;br /&gt;
You might want to include a comment in the HTML so people don&#039;t &amp;quot;correct&amp;quot; the formula by removing it:&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&amp;lt;nowiki&amp;gt;&amp;lt;!-- The \,\! is to keep the formula rendered as PNG instead of HTML.  Please don&#039;t remove it.--&amp;gt;&amp;lt;/nowiki&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
===Quadratic Polynomial===&lt;br /&gt;
 &amp;lt;math&amp;gt;ax^2 + bx + c = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;math&amp;gt;ax^2 + bx + c = 0&amp;lt;/math&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Quadratic Polynomial (Force PNG Rendering)===&lt;br /&gt;
 &amp;lt;math&amp;gt;ax^2 + bx + c = 0\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;math&amp;gt;ax^2 + bx + c = 0\,\!&amp;lt;/math&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Quadratic Formula===&lt;br /&gt;
 &amp;lt;math&amp;gt;x=\frac{-b\pm\sqrt{b^2-4ac}}{2a}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;math&amp;gt;x=\frac{-b\pm\sqrt{b^2-4ac}}{2a}&amp;lt;/math&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Tall Parentheses and Fractions ===&lt;br /&gt;
 &amp;lt;math&amp;gt;2 = \left( \frac{\left(3-x\right) \times 2}{3-x} \right)&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;math&amp;gt;2 = \left(&lt;br /&gt;
 \frac{\left(3-x\right) \times 2}{3-x}&lt;br /&gt;
 \right)&amp;lt;/math&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;S_{\text{new}} = S_{\text{old}} - \frac{ \left( 5-T \right) ^2} {2}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;S_{\text{new}} = S_{\text{old}} - \frac{ \left( 5-T \right) ^2} {2}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Integrals===&lt;br /&gt;
 &amp;lt;math&amp;gt;\int_a^x \!\!\!\int_a^s f(y)\,dy\,ds = \int_a^x f(y)(x-y)\,dy&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;math&amp;gt;\int_a^x \!\!\!\int_a^s f(y)\,dy\,ds&lt;br /&gt;
 = \int_a^x f(y)(x-y)\,dy&amp;lt;/math&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Summation===&lt;br /&gt;
 &amp;lt;math&amp;gt;\sum_{m=1}^\infty\sum_{n=1}^\infty\frac{m^2\,n}{3^m\left(m\,3^n+n\,3^m\right)}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;math&amp;gt;\sum_{m=1}^\infty\sum_{n=1}^\infty\frac{m^2\,n}&lt;br /&gt;
 {3^m\left(m\,3^n+n\,3^m\right)}&amp;lt;/math&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Differential Equation ===&lt;br /&gt;
 &amp;lt;math&amp;gt;u&#039;&#039; + p(x)u&#039; + q(x)u=f(x),\quad x&amp;gt;a&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;math&amp;gt;u&#039;&#039; + p(x)u&#039; + q(x)u=f(x),\quad x&amp;gt;a&amp;lt;/math&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Complex numbers===&lt;br /&gt;
 &amp;lt;math&amp;gt;|\bar{z}| = |z|, |(\bar{z})^n| = |z|^n, \arg(z^n) = n \arg(z)&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;math&amp;gt;|\bar{z}| = |z|,&lt;br /&gt;
 |(\bar{z})^n| = |z|^n,&lt;br /&gt;
 \arg(z^n) = n \arg(z)&amp;lt;/math&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Limits===&lt;br /&gt;
 &amp;lt;math&amp;gt;\lim_{z\rightarrow z_0} f(z)=f(z_0)&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;math&amp;gt;\lim_{z\rightarrow z_0} f(z)=f(z_0)&amp;lt;/math&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Integral Equation===&lt;br /&gt;
 &amp;lt;math&amp;gt;\phi_n(\kappa)&lt;br /&gt;
 = \frac{1}{4\pi^2\kappa^2} \int_0^\infty \frac{\sin(\kappa R)}{\kappa R}  \frac{\partial}{\partial R}  \left[R^2\frac{\partial D_n(R)}{\partial R}\right]\,dR&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;math&amp;gt;\phi_n(\kappa) =&lt;br /&gt;
 \frac{1}{4\pi^2\kappa^2} \int_0^\infty&lt;br /&gt;
 \frac{\sin(\kappa R)}{\kappa R}&lt;br /&gt;
 \frac{\partial}{\partial R}&lt;br /&gt;
 \left[R^2\frac{\partial D_n(R)}{\partial R}\right]\,dR&amp;lt;/math&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Example===&lt;br /&gt;
 &amp;lt;math&amp;gt;\phi_n(\kappa) = 0.033C_n^2\kappa^{-11/3},\quad \frac{1}{L_0}\ll\kappa\ll\frac{1}{l_0}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;math&amp;gt;\phi_n(\kappa) = &lt;br /&gt;
 0.033C_n^2\kappa^{-11/3},\quad&lt;br /&gt;
 \frac{1}{L_0}\ll\kappa\ll\frac{1}{l_0}&amp;lt;/math&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Continuation and cases===&lt;br /&gt;
 &amp;lt;math&amp;gt;f(x) = \begin{cases}1 &amp;amp; -1 \le x &amp;lt; 0 \\&lt;br /&gt;
 \frac{1}{2} &amp;amp; x = 0 \\ 1 - x^2 &amp;amp; \mbox{otherwise}\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
 f(x) =&lt;br /&gt;
 \begin{cases}&lt;br /&gt;
 1 &amp;amp; -1 \le x &amp;lt; 0 \\&lt;br /&gt;
 \frac{1}{2} &amp;amp; x = 0 \\&lt;br /&gt;
 1 - x^2 &amp;amp; \mbox{otherwise}&lt;br /&gt;
 \end{cases}&lt;br /&gt;
 &amp;lt;/math&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Prefixed subscript===&lt;br /&gt;
 &amp;lt;math&amp;gt;{}_pF_q(a_1,\dots,a_p;c_1,\dots,c_q;z) = \sum_{n=0}^\infty \frac{(a_1)_n\cdots(a_p)_n}{(c_1)_n\cdots(c_q)_n}\frac{z^n}{n!}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;math&amp;gt;{}_pF_q(a_1,\dots,a_p;c_1,\dots,c_q;z)&lt;br /&gt;
 = \sum_{n=0}^\infty&lt;br /&gt;
 \frac{(a_1)_n\cdots(a_p)_n}{(c_1)_n\cdots(c_q)_n}&lt;br /&gt;
 \frac{z^n}{n!}&amp;lt;/math&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Fraction and small fraction===&lt;br /&gt;
 &amp;lt;math&amp;gt; \frac {a}{b}&amp;lt;/math&amp;gt; &amp;amp;emsp; &amp;lt;math&amp;gt; \tfrac {a}{b} &amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;math&amp;gt; \frac {a}{b}\  \tfrac {a}{b} &amp;lt;/math&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Unicode vs TeX comparison===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;width: 255pt; border-collapse: collapse;&amp;quot; width=&amp;quot;340&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; width: 48pt; height: 12.75pt; background-color: transparent;&amp;quot; width=&amp;quot;64&amp;quot;&amp;gt;unicode&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;border: medium none #f0f0f0; width: 104pt; background-color: transparent;&amp;quot; width=&amp;quot;139&amp;quot;&amp;gt;TeX&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;border: medium none #f0f0f0; width: 103pt; background-color: transparent;&amp;quot; width=&amp;quot;137&amp;quot;&amp;gt;See&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⟦&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;[\![&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;[\![&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;{&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\{&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;∥&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\|&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\|&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;}&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\}&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;ℵ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\aleph&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\aleph&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;α&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\alpha&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⨿&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\amalg&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\amalg&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;∠&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\angle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\angle&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;≈&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\approx&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\approx&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;∗&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\ast&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\ast&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;≍&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\asymp&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\asymp&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;\&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\backslash&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\backslash&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;β&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\beta&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\beta&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⋂&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\bigcap&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\bigcap&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;◯&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\bigcirc&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\bigcirc&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⋃&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\bigcup&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\bigcup&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⨀&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\bigodot&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\bigodot&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⨁&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\bigoplus&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\bigoplus&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⨂&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\bigotimes&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\bigotimes&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⨆&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\bigsqcup&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\bigsqcup&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;▽&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\bigtriangledown&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\bigtriangledown&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;△&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\bigtriangleup&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\bigtriangleup&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⨄&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\biguplus&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\biguplus&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⋀&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\bigwedge&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\bigwedge&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⋁&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\bigvee&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\bigvee&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⊥&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\bot&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\bot&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⋈&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\bowtie&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\bowtie&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;□&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\Box&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\Box&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;∙&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\bullet&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\bullet&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;∩&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\cap&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\cap&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⋅&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\cdot&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\cdot&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⋯&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\cdots&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\cdots&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;χ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\chi&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\chi&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;∘&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\circ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\circ&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;♣&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\clubsuit&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\clubsuit&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;≅&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\cong&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\cong&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;∐&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\coprod&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\coprod&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;∪&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\cup&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\cup&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;†&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\dagger&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\dagger&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⊣&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\dashv&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\dashv&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;‡&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\ddagger&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\ddagger&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⋱&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\ddots&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\ddots&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;δ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\delta&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\delta&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;Δ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\Delta&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\Delta&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;◇&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\Diamond&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\Diamond&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⋄&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\diamond&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\diamond&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;♢&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\diamondsuit&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\diamondsuit&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;÷&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\div&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\div&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;≐&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\doteq&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\doteq&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;↓&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\downarrow&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\downarrow&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⇓&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\Downarrow&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\Downarrow&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;ℓ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\ell&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\ell&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;∅&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\emptyset&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\emptyset&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;ϵ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\epsilon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\epsilon&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;≡&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\equiv&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\equiv&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;η&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\eta&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\eta&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;∃&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\exists&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\exists&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;♭&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\flat&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\flat&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;∀&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\forall&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\forall&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⌢&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\frown&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\frown&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;γ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\gamma&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;Γ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\Gamma&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\Gamma&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;≥&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\ge&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\ge&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;≥&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\geq&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\geq&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;←&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\gets&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\gets&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;≫&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\gg&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\gg&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;ℏ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\hbar&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\hbar&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;♡&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\heartsuit&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\heartsuit&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;↩&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\hookleftarrow&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\hookleftarrow&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;↪&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\hookrightarrow&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\hookrightarrow&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;ℑ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\Im&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\Im&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;ı&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\imath&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\imath&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;∈&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\in&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\in&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;∞&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\infty&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\infty&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;∫&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\int&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\int&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;ι&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\iota&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\iota&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;j&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\jmath&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\jmath&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;κ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\kappa&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\kappa&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;λ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\lambda&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;Λ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\Lambda&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\Lambda&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;∧&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\land&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\land&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⟨&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\langle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\langle&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⟪&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\langle\!\langle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\langle\!\langle&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;{&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\lbrace&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\lbrace&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;[&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\lbrack&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\lbrack&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⌈&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\lceil&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\lceil&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;≤&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\le&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\le&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⇐&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\Leftarrow&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\Leftarrow&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;←&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\leftarrow&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\leftarrow&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;↽&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\leftharpoondown&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\leftharpoondown&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;↼&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\leftharpoonup&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\leftharpoonup&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;↔&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\leftrightarrow&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\leftrightarrow&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⇔&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\Leftrightarrow&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\Leftrightarrow&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;≤&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\leq&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\leq&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⌊&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\lfloor&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\lfloor&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;≪&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\ll&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\ll&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;¬&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\lnot&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\lnot&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⟸&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\Longleftarrow&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\Longleftarrow&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⟵&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\longleftarrow&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\longleftarrow&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⟺&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\Longleftrightarrow&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\Longleftrightarrow&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⟷&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\longleftrightarrow&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\longleftrightarrow&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⟼&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\longmapsto&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\longmapsto&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⟹&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\Longrightarrow&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\Longrightarrow&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⟶&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\longrightarrow&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\longrightarrow&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;∨&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\lor&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\lor&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;↦&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\mapsto&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\mapsto&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;∣&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\mid&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\mid&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⊨&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\models&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\models&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;∓&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\mp&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\mp&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;μ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\mu&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;∇&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\nabla&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\nabla&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;♮&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\natural&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\natural&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;≠&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\ne&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;↗&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\nearrow&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\nearrow&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;¬&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\neg&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\neg&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;≠&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\neq&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\neq&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;∋&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\ni&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\ni&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;≉&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\not\approx&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\not\approx&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;≭&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\not\asymp&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\not\asymp&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;≇&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\not\cong&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\not\cong&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;≢&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\not\equiv&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\not\equiv&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;≱&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\not\geq&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\not\geq&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;≰&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\not\leq&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\not\leq&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⊀&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\not\prec&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\not\prec&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⋠&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\not\preceq&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\not\preceq&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;≁&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\not\sim&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\not\sim&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;≄&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\not\simeq&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\not\simeq&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⋢&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\not\sqsubseteq&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\not\sqsubseteq&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⋣&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\not\sqsupseteq&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\not\sqsupseteq&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⊄&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\not\subset&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\not\subset&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⊈&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\not\subseteq&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\not\subseteq&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⊁&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\not\succ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\not\succ&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⋡&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\not\succeq&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\not\succeq&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⊅&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\not\supset&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\not\supset&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⊉&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\not\supseteq&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\not\supseteq&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;≠&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\not=&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\not=&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;ν&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\nu&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\nu&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;↖&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\nwarrow&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\nwarrow&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⊙&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\odot&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\odot&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;∮&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\oint&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\oint&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;ω&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\omega&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\omega&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;Ω&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\Omega&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\Omega&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⊖&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\ominus&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\ominus&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⊕&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\oplus&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\oplus&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⊘&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\oslash&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\oslash&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⊗&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\otimes&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\otimes&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;∥&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\parallel&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\parallel&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;∂&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\partial&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\partial&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⊥&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\perp&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\perp&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;ϕ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\phi&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\phi&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;Φ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\Phi&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\Phi&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;π&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\pi&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\pi&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;Π&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\Pi&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\Pi&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;±&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\pm&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\pm&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;≺&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\prec&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\prec&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;≼&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\preceq&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\preceq&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;′&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\prime&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\prime&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;∏&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\prod&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\prod&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;∝&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\propto&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\propto&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;ψ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\psi&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\psi&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;Ψ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\Psi&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\Psi&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⟩&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\rangle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\rangle&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⟫&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\rangle\!\rangle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\rangle\!\rangle&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;}&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\rbrace&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\rbrace&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\rbrack&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\rbrack&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⌉&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\rceil&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\rceil&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;ℜ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\Re&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\Re&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⌋&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\rfloor&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\rfloor&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;ρ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\rho&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\rho&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;→&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\rightarrow&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\rightarrow&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⇒&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\Rightarrow&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\Rightarrow&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⇁&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\rightharpoondown&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\rightharpoondown&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⇀&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\rightharpoonup&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\rightharpoonup&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⇌&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\rightleftharpoons&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\rightleftharpoons&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;↘&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\searrow&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\searrow&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;∖&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\setminus&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\setminus&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;♯&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\sharp&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\sharp&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;σ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\sigma&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;Σ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\Sigma&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\Sigma&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;∼&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\sim&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\sim&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;≃&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\simeq&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\simeq&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⌣&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\smile&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\smile&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;♠&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\spadesuit&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\spadesuit&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⊓&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\sqcap&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\sqcap&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⊔&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\sqcup&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\sqcup&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⊏&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\sqsubset&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\sqsubset&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⊑&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\sqsubseteq&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\sqsubseteq&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⊐&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\sqsupset&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\sqsupset&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⊒&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\sqsupseteq&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\sqsupseteq&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⋆&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\star&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\star&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⊂&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\subset&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\subset&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⊆&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\subseteq&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\subseteq&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;≻&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\succ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\succ&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;≽&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\succeq&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\succeq&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;∑&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\sum&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\sum&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⊃&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\supset&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\supset&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⊇&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\supseteq&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\supseteq&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;√&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\surd&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\surd&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;↙&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\swarrow&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\swarrow&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;τ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\tau&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;θ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\theta&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\theta&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;Θ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\Theta&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\Theta&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;×&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\times&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\times&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;→&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\to&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\to&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⊤&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\top&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\top&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;△&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\triangle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\triangle&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;◁&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\triangleleft&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\triangleleft&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;▷&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\triangleright&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\triangleright&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;↑&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\uparrow&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\uparrow&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⇑&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\Uparrow&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\Uparrow&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;↕&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\updownarrow&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\updownarrow&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⇕&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\Updownarrow&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\Updownarrow&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⊎&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\uplus&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\uplus&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;υ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\upsilon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\upsilon&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;Υ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\Upsilon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\Upsilon&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;ε&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\varepsilon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;φ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\varphi&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\varphi&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;ϖ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\varpi&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\varpi&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;ϱ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\varrho&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\varrho&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;ς&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\varsigma&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\varsigma&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;ϑ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\vartheta&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\vartheta&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⊢&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\vdash&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\vdash&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⋮&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\vdots&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\vdots&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;∧&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\wedge&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\wedge&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;∨&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\vee&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\vee&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;∣&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\vert&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\vert&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;∥&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\Vert&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\Vert&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;℘&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\wp&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\wp&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;≀&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\wr&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\wr&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;ξ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\xi&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\xi&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;Ξ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\Xi&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\Xi&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;ζ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\zeta&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\zeta&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⟧&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;]\!]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;]\!]&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;ο&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;o&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;o&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;/div&gt;</summary>
		<author><name>Stronk7</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/2x/pl/index.php?title=MediaWiki_TeX_test&amp;diff=82759</id>
		<title>MediaWiki TeX test</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/2x/pl/index.php?title=MediaWiki_TeX_test&amp;diff=82759"/>
		<updated>2011-04-14T16:44:52Z</updated>

		<summary type="html">&lt;p&gt;Stronk7: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This should look like some maths:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\int_{-\infty}^\infty jordan^{-x^{tim}}\,dx = \sqrt{hunt^4}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(This page was created for the benefit of MDLSITE-649.)&lt;br /&gt;
&lt;br /&gt;
Heavy test:&lt;br /&gt;
&lt;br /&gt;
== Functions, symbols, special characters ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Eight symbols per line seems to be optimal--&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |&amp;lt;h3&amp;gt;Accents/Diacritics&amp;lt;/h3&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\acute{a} \grave{a} \hat{a} \tilde{a} \breve{a}&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\acute{a} \grave{a} \hat{a} \tilde{a} \breve{a}\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\check{a} \bar{a} \ddot{a} \dot{a}&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\check{a} \bar{a} \ddot{a} \dot{a}\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Standard functions&amp;lt;/h3&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\sin a \cos b \tan c&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\sin a \cos b \tan c\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\sec d \csc e \cot f&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\sec d \csc e \cot f\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\arcsin h \arccos i \arctan j&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\arcsin h \arccos i \arctan j\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\sinh k \cosh l \tanh m \coth n\!&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\sinh k \cosh l \tanh m \coth n\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\operatorname{sh}\,o\,\operatorname{ch}\,p\,\operatorname{th}\,q\!&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\operatorname{sh}\,o\,\operatorname{ch}\,p\,\operatorname{th}\,q\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\operatorname{arsinh}\,r\,\operatorname{arcosh}\,s\,\operatorname{artanh}\,t&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\operatorname{arsinh}\,r\,\operatorname{arcosh}\,s\,\operatorname{artanh}\,t\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\lim u \limsup v \liminf w \min x \max y\!&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\lim u \limsup v \liminf w \min x \max y\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\inf z \sup a \exp b \ln c \lg d \log e \log_{10} f \ker g\!&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\inf z \sup a \exp b \ln c \lg d \log e \log_{10} f \ker g\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\deg h \gcd i \Pr j \det k \hom l \arg m \dim n&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\deg h \gcd i \Pr j \det k \hom l \arg m \dim n\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Modular arithmetic&amp;lt;/h3&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;s_k \equiv 0 \pmod{m}&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;s_k \equiv 0 \pmod{m}\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;a\,\bmod\,b&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;a\,\bmod\,b\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; | &amp;lt;h3&amp;gt;Derivatives&amp;lt;/h3&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\nabla \, \partial x \, dx \, \dot x \, \ddot y\, dy/dx\, \frac{dy}{dx}\, \frac{\partial^2 y}{\partial x_1\,\partial x_2}&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\nabla \, \partial x \, dx \, \dot x \, \ddot y\, dy/dx\, \frac{dy}{dx}\, \frac{\partial^2 y}{\partial x_1\,\partial x_2}&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Sets&amp;lt;/h3&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\forall \exists \empty \emptyset \varnothing&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\forall \exists \empty \emptyset \varnothing\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\in \ni \not \in \notin \subset \subseteq \supset \supseteq&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\in \ni \not \in \notin \subset \subseteq \supset \supseteq\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\cap \bigcap \cup \bigcup \biguplus \setminus \smallsetminus&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\cap \bigcap \cup \bigcup \biguplus \setminus \smallsetminus\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\sqsubset \sqsubseteq \sqsupset \sqsupseteq \sqcap \sqcup \bigsqcup&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\sqsubset \sqsubseteq \sqsupset \sqsupseteq \sqcap \sqcup \bigsqcup\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Operators&amp;lt;/h3&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;+ \oplus \bigoplus \pm \mp - &amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;+ \oplus \bigoplus \pm \mp - \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\times \otimes \bigotimes \cdot \circ \bullet \bigodot&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\times \otimes \bigotimes \cdot \circ \bullet \bigodot\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\star * / \div \frac{1}{2}&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\star * / \div \frac{1}{2}\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Logic&amp;lt;/h3&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\land (or \and) \wedge \bigwedge \bar{q} \to p&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\land \wedge \bigwedge \bar{q} \to p\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\lor \vee \bigvee \lnot \neg q \And&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\lor \vee \bigvee \lnot \neg q \And\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Root&amp;lt;/h3&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\sqrt{2} \sqrt[n]{x}&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\sqrt{2} \sqrt[n]{x}\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; | &amp;lt;h3&amp;gt;Relations&amp;lt;/h3&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\sim \approx \simeq \cong \dot=  \overset{\underset{\mathrm{def}}{}}{=}&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\sim \approx \simeq \cong \dot=  \overset{\underset{\mathrm{def}}{}}{=}\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\le &amp;lt; \ll \gg \ge &amp;gt; \equiv \not\equiv \ne \mbox{or} \neq \propto&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\le &amp;lt; \ll \gg \ge &amp;gt; \equiv \not\equiv \ne \mbox{or} \neq \propto\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Geometric&amp;lt;/h3&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\Diamond \Box \triangle \angle \perp \mid \nmid \| 45^\circ&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\Diamond \, \Box \, \triangle \, \angle \perp \, \mid \; \nmid \, \| 45^\circ\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Arrows&amp;lt;/h3&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\leftarrow (or \gets) \rightarrow (or \to) \nleftarrow \nrightarrow \leftrightarrow \nleftrightarrow \longleftarrow \longrightarrow \longleftrightarrow&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\leftarrow \rightarrow \nleftarrow \not\to \leftrightarrow \nleftrightarrow \longleftarrow \longrightarrow \longleftrightarrow \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\Leftarrow \Rightarrow \nLeftarrow \nRightarrow \Leftrightarrow \nLeftrightarrow \Longleftarrow \Longrightarrow \Longleftrightarrow (or \iff)&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\Leftarrow \Rightarrow \nLeftarrow \nRightarrow \Leftrightarrow \nLeftrightarrow \Longleftarrow \Longrightarrow \Longleftrightarrow \!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\uparrow \downarrow \updownarrow \Uparrow \Downarrow \Updownarrow  \nearrow \searrow \swarrow \nwarrow&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\uparrow \downarrow \updownarrow \Uparrow \Downarrow \Updownarrow  \nearrow \searrow \swarrow \nwarrow \!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\rightharpoonup \rightharpoondown \leftharpoonup \leftharpoondown \upharpoonleft \upharpoonright \downharpoonleft \downharpoonright \rightleftharpoons \leftrightharpoons&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\rightharpoonup \rightharpoondown \leftharpoonup \leftharpoondown \upharpoonleft \upharpoonright \downharpoonleft \downharpoonright \rightleftharpoons \leftrightharpoons \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\curvearrowleft \circlearrowleft \Lsh \upuparrows \rightrightarrows \rightleftarrows \Rrightarrow \rightarrowtail \looparrowright&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\curvearrowleft \circlearrowleft \Lsh \upuparrows \rightrightarrows \rightleftarrows \Rrightarrow \rightarrowtail \looparrowright \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\curvearrowright \circlearrowright \Rsh \downdownarrows \leftleftarrows \leftrightarrows \Lleftarrow \leftarrowtail \looparrowleft&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\curvearrowright \circlearrowright \Rsh \downdownarrows \leftleftarrows \leftrightarrows \Lleftarrow \leftarrowtail \looparrowleft \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\mapsto \longmapsto \hookrightarrow \hookleftarrow \multimap \leftrightsquigarrow \rightsquigarrow &amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mapsto \longmapsto \hookrightarrow \hookleftarrow \multimap \leftrightsquigarrow \rightsquigarrow \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Special&amp;lt;/h3&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\And \eth \S \P \% \dagger \ddagger \ldots \cdots&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\And \eth \S \P \% \dagger \ddagger \ldots \cdots\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\smile \frown \wr \triangleleft \triangleright \infty \bot \top&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\smile \frown \wr \triangleleft \triangleright \infty \bot \top\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\vdash \vDash \Vdash \models \lVert \rVert \imath \hbar&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\vdash \vDash \Vdash \models \lVert \rVert \imath \hbar\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\ell \mho \Finv \Re \Im \wp \complement&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\ell \mho \Finv \Re \Im \wp \complement\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\diamondsuit \heartsuit \clubsuit \spadesuit \Game \flat \natural \sharp&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\diamondsuit \heartsuit \clubsuit \spadesuit \Game \flat \natural \sharp\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Unsorted (new stuff)&amp;lt;/h3&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt; \vartriangle \triangledown \lozenge \circledS \measuredangle \nexists \Bbbk \backprime \blacktriangle \blacktriangledown&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt; \vartriangle \triangledown \lozenge \circledS \measuredangle \nexists \Bbbk \backprime \blacktriangle \blacktriangledown&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt; \blacksquare \blacklozenge \bigstar \sphericalangle \diagup \diagdown \dotplus \Cap \Cup \barwedge&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt; \blacksquare \blacklozenge \bigstar \sphericalangle \diagup \diagdown \dotplus \Cap \Cup \barwedge\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt; \veebar \doublebarwedge \boxminus \boxtimes \boxdot \boxplus \divideontimes \ltimes \rtimes \leftthreetimes&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt; \veebar \doublebarwedge \boxminus \boxtimes \boxdot \boxplus \divideontimes \ltimes \rtimes \leftthreetimes&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt; \rightthreetimes \curlywedge \curlyvee \circleddash \circledast \circledcirc \centerdot \intercal \leqq \leqslant&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt; \rightthreetimes \curlywedge \curlyvee \circleddash \circledast \circledcirc \centerdot \intercal \leqq \leqslant&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt; \eqslantless \lessapprox \approxeq \lessdot \lll \lessgtr \lesseqgtr \lesseqqgtr \doteqdot \risingdotseq&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt; \eqslantless \lessapprox \approxeq \lessdot \lll \lessgtr \lesseqgtr \lesseqqgtr \doteqdot \risingdotseq&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt; \fallingdotseq \backsim \backsimeq \subseteqq \Subset \preccurlyeq \curlyeqprec \precsim \precapprox \vartriangleleft&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt; \fallingdotseq \backsim \backsimeq \subseteqq \Subset \preccurlyeq \curlyeqprec \precsim \precapprox \vartriangleleft&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt; \Vvdash \bumpeq \Bumpeq \geqq \geqslant \eqslantgtr \gtrsim \gtrapprox \eqsim \gtrdot&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt; \Vvdash \bumpeq \Bumpeq \geqq \geqslant \eqslantgtr \gtrsim \gtrapprox \eqsim \gtrdot&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt; \ggg \gtrless \gtreqless \gtreqqless \eqcirc \circeq \triangleq \thicksim \thickapprox \supseteqq&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt; \ggg \gtrless \gtreqless \gtreqqless \eqcirc \circeq \triangleq \thicksim \thickapprox \supseteqq&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt; \Supset \succcurlyeq \curlyeqsucc \succsim \succapprox \vartriangleright \shortmid \shortparallel \between \pitchfork&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt; \Supset \succcurlyeq \curlyeqsucc \succsim \succapprox \vartriangleright \shortmid \shortparallel \between \pitchfork&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt; \varpropto \blacktriangleleft \therefore \backepsilon \blacktriangleright \because \nleqslant \nleqq \lneq \lneqq&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt; \varpropto \blacktriangleleft \therefore \backepsilon \blacktriangleright \because \nleqslant \nleqq \lneq \lneqq&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt; \lvertneqq \lnsim \lnapprox \nprec \npreceq \precneqq \precnsim \precnapprox \nsim \nshortmid&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt; \lvertneqq \lnsim \lnapprox \nprec \npreceq \precneqq \precnsim \precnapprox \nsim \nshortmid&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt; \nvdash \nVdash \ntriangleleft \ntrianglelefteq \nsubseteq \nsubseteqq \varsubsetneq \subsetneqq \varsubsetneqq \ngtr&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt; \nvdash \nVdash \ntriangleleft \ntrianglelefteq \nsubseteq \nsubseteqq \varsubsetneq \subsetneqq \varsubsetneqq \ngtr&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\subsetneq&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\subsetneq&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt; \ngeqslant \ngeqq \gneq \gneqq \gvertneqq \gnsim \gnapprox \nsucc \nsucceq \succneqq&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt; \ngeqslant \ngeqq \gneq \gneqq \gvertneqq \gnsim \gnapprox \nsucc \nsucceq \succneqq&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt; \succnsim \succnapprox \ncong \nshortparallel \nparallel \nvDash \nVDash \ntriangleright \ntrianglerighteq \nsupseteq&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt; \succnsim \succnapprox \ncong \nshortparallel \nparallel \nvDash \nVDash \ntriangleright \ntrianglerighteq \nsupseteq&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt; \nsupseteqq \varsupsetneq \supsetneqq \varsupsetneqq&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt; \nsupseteqq \varsupsetneq \supsetneqq \varsupsetneqq&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\jmath \surd \ast \uplus \diamond \bigtriangleup \bigtriangledown \ominus&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\jmath \surd \ast \uplus \diamond \bigtriangleup \bigtriangledown \ominus\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\oslash \odot \bigcirc \amalg \prec \succ \preceq \succeq&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\oslash \odot \bigcirc \amalg \prec \succ \preceq \succeq\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\dashv \asymp \doteq \parallel&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\dashv \asymp \doteq \parallel\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\ulcorner \urcorner \llcorner \lrcorner&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\ulcorner \urcorner \llcorner \lrcorner&amp;lt;/math&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Larger Expressions ==&lt;br /&gt;
=== Subscripts, superscripts, integrals ===&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse;&amp;quot;&lt;br /&gt;
!rowspan=&amp;quot;2&amp;quot;|Feature!!rowspan=&amp;quot;2&amp;quot;|Syntax!!colspan=&amp;quot;2&amp;quot;|How it looks rendered&lt;br /&gt;
|-&lt;br /&gt;
!HTML!!PNG&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|Superscript||&amp;lt;code&amp;gt;a^2&amp;lt;/code&amp;gt;||&amp;lt;math&amp;gt;a^2&amp;lt;/math&amp;gt;||&amp;lt;math&amp;gt;a^2 \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Subscript||&amp;lt;code&amp;gt;a_2&amp;lt;/code&amp;gt;||&amp;lt;math&amp;gt;a_2&amp;lt;/math&amp;gt;||&amp;lt;math&amp;gt;a_2 \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=2|Grouping||&amp;lt;code&amp;gt;a^{2+2}&amp;lt;/code&amp;gt;||&amp;lt;math&amp;gt;a^{2+2}&amp;lt;/math&amp;gt;||&amp;lt;math&amp;gt;a^{2+2}\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;a_{i,j}&amp;lt;/code&amp;gt;||&amp;lt;math&amp;gt;a_{i,j}&amp;lt;/math&amp;gt;||&amp;lt;math&amp;gt;a_{i,j}\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=2|Combining sub &amp;amp; super without and with horizontal separation||&amp;lt;code&amp;gt;x_2^3&amp;lt;/code&amp;gt;||&amp;lt;math&amp;gt;x_2^3&amp;lt;/math&amp;gt;||&amp;lt;math&amp;gt;x_2^3 \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;{x_2}^3&amp;lt;/code&amp;gt;||&amp;lt;math&amp;gt;{x_2}^3&amp;lt;/math&amp;gt;||&amp;lt;math&amp;gt;{x_2}^3 \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Super super||&amp;lt;code&amp;gt;10^{10^{ \,\!{8} }&amp;lt;/code&amp;gt;||colspan=2|&amp;lt;math&amp;gt;10^{10^{ \,\! 8 } }&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Super super||&amp;lt;code&amp;gt;10^{10^{ \overset{8}{} }}&amp;lt;/code&amp;gt;||colspan=2|&amp;lt;math&amp;gt;10^{10^{ \overset{8}{} }}&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Super super (wrong in HTML in some browsers)||&amp;lt;code&amp;gt;10^{10^8}&amp;lt;/code&amp;gt; ||colspan=2|&amp;lt;math&amp;gt;10^{10^8}&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot;|Preceding and/or Additional sub &amp;amp; super||&amp;lt;code&amp;gt;\sideset{_1^2}{_3^4}\prod_a^b&amp;lt;/code&amp;gt;||colspan=2|&amp;lt;math&amp;gt;\sideset{_1^2}{_3^4}\prod_a^b&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;{}_1^2\!\Omega_3^4&amp;lt;/code&amp;gt;||colspan=2|&amp;lt;math&amp;gt;{}_1^2\!\Omega_3^4&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;4&amp;quot;|Stacking&lt;br /&gt;
|&amp;lt;code&amp;gt;\overset{\alpha}{\omega}&amp;lt;/code&amp;gt;||colspan=&amp;quot;2&amp;quot;|&amp;lt;math&amp;gt;\overset{\alpha}{\omega}&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\underset{\alpha}{\omega}&amp;lt;/code&amp;gt;||colspan=&amp;quot;2&amp;quot;|&amp;lt;math&amp;gt;\underset{\alpha}{\omega}&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\overset{\alpha}{\underset{\gamma}{\omega}}&amp;lt;/code&amp;gt;||colspan=&amp;quot;2&amp;quot;|&amp;lt;math&amp;gt;\overset{\alpha}{\underset{\gamma}{\omega}}&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\stackrel{\alpha}{\omega}&amp;lt;/code&amp;gt;||colspan=&amp;quot;2&amp;quot;|&amp;lt;math&amp;gt;\stackrel{\alpha}{\omega}&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Derivative (forced PNG)||&amp;lt;code&amp;gt;x&#039;, y&amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt;, f&#039;, f&amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt;\!&amp;lt;/code&amp;gt;||&amp;amp;nbsp;||&amp;lt;math&amp;gt;x&#039;, y&#039;&#039;, f&#039;, f&#039;&#039;\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Derivative (f in italics may overlap primes in HTML)||&amp;lt;code&amp;gt;x&#039;, y&amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt;, f&#039;, f&amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;||&amp;lt;math&amp;gt;x&#039;, y&#039;&#039;, f&#039;, f&#039;&#039;&amp;lt;/math&amp;gt;||&amp;lt;math&amp;gt;x&#039;, y&#039;&#039;, f&#039;, f&#039;&#039;\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Derivative (wrong in HTML)||&amp;lt;code&amp;gt;x^\prime, y^{\prime\prime}&amp;lt;/code&amp;gt;||&amp;lt;math&amp;gt;x^\prime, y^{\prime\prime}&amp;lt;/math&amp;gt;||&amp;lt;math&amp;gt;x^\prime, y^{\prime\prime}\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Derivative (wrong in PNG)||&amp;lt;code&amp;gt;x\prime, y\prime\prime&amp;lt;/code&amp;gt;||&amp;lt;math&amp;gt;x\prime, y\prime\prime&amp;lt;/math&amp;gt;||&amp;lt;math&amp;gt;x\prime, y\prime\prime\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Derivative dots||&amp;lt;code&amp;gt;\dot{x}, \ddot{x}&amp;lt;/code&amp;gt;||colspan=2|&amp;lt;math&amp;gt;\dot{x}, \ddot{x}&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;3&amp;quot;|Underlines, overlines, vectors||&amp;lt;code&amp;gt;\hat a \ \bar b \ \vec c&amp;lt;/code&amp;gt;||colspan=2|&amp;lt;math&amp;gt;\hat a \ \bar b \ \vec c&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\overrightarrow{a b} \ \overleftarrow{c d} \ \widehat{d e f}&amp;lt;/code&amp;gt;||colspan=2|&amp;lt;math&amp;gt;\overrightarrow{a b} \ \overleftarrow{c d} \ \widehat{d e f}&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;\overline{g h i} \ \underline{j k l}&amp;lt;/code&amp;gt;||colspan=2|&amp;lt;math&amp;gt;\overline{g h i} \ \underline{j k l}&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Arrows||&amp;lt;code&amp;gt; A \xleftarrow{n+\mu-1} B \xrightarrow[T]{n\pm i-1} C&amp;lt;/code&amp;gt;||colspan=2|&amp;lt;math&amp;gt; A \xleftarrow{n+\mu-1} B \xrightarrow[T]{n\pm i-1} C&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Overbraces||&amp;lt;code&amp;gt;\overbrace{ 1+2+\cdots+100 }^{5050}&amp;lt;/code&amp;gt;||colspan=2|&amp;lt;math&amp;gt;\overbrace{ 1+2+\cdots+100 }^{5050}&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Underbraces||&amp;lt;code&amp;gt;\underbrace{ a+b+\cdots+z }_{26}&amp;lt;/code&amp;gt;||colspan=2|&amp;lt;math&amp;gt;\underbrace{ a+b+\cdots+z }_{26}&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Sum||&amp;lt;code&amp;gt;\sum_{k=1}^N k^2&amp;lt;/code&amp;gt;||colspan=2|&amp;lt;math&amp;gt;\sum_{k=1}^N k^2&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Sum (force&amp;amp;nbsp;&amp;lt;code&amp;gt;\textstyle&amp;lt;/code&amp;gt;)||&amp;lt;code&amp;gt;\textstyle \sum_{k=1}^N k^2 &amp;lt;/code&amp;gt;||colspan=2|&amp;lt;math&amp;gt;\textstyle \sum_{k=1}^N k^2&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Product||&amp;lt;code&amp;gt;\prod_{i=1}^N x_i&amp;lt;/code&amp;gt;||colspan=2|&amp;lt;math&amp;gt;\prod_{i=1}^N x_i&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Product (force&amp;amp;nbsp;&amp;lt;code&amp;gt;\textstyle&amp;lt;/code&amp;gt;)||&amp;lt;code&amp;gt;\textstyle \prod_{i=1}^N x_i&amp;lt;/code&amp;gt;||colspan=2|&amp;lt;math&amp;gt;\textstyle \prod_{i=1}^N x_i&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Coproduct||&amp;lt;code&amp;gt;\coprod_{i=1}^N x_i&amp;lt;/code&amp;gt;||colspan=2|&amp;lt;math&amp;gt;\coprod_{i=1}^N x_i&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Coproduct (force&amp;amp;nbsp;&amp;lt;code&amp;gt;\textstyle&amp;lt;/code&amp;gt;)||&amp;lt;code&amp;gt;\textstyle \coprod_{i=1}^N x_i&amp;lt;/code&amp;gt;||colspan=2|&amp;lt;math&amp;gt;\textstyle \coprod_{i=1}^N x_i&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Limit||&amp;lt;code&amp;gt;\lim_{n \to \infty}x_n&amp;lt;/code&amp;gt;||colspan=2|&amp;lt;math&amp;gt;\lim_{n \to \infty}x_n&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Limit (force&amp;amp;nbsp;&amp;lt;code&amp;gt;\textstyle&amp;lt;/code&amp;gt;)||&amp;lt;code&amp;gt;\textstyle \lim_{n \to \infty}x_n&amp;lt;/code&amp;gt;||colspan=2|&amp;lt;math&amp;gt;\textstyle \lim_{n \to \infty}x_n&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Integral||&amp;lt;code&amp;gt;\int\limits_{1}^{3}\frac{e^3/x}{x^2}\, dx&amp;lt;/code&amp;gt;||colspan=2|&amp;lt;math&amp;gt;\int\limits_{1}^{3}\frac{e^3/x}{x^2}\, dx&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Integral (alternate limits style)||&amp;lt;code&amp;gt;\int_{1}^{3}\frac{e^3/x}{x^2}\, dx&amp;lt;/code&amp;gt;||colspan=2|&amp;lt;math&amp;gt;\int_{1}^{3}\frac{e^3/x}{x^2}\, dx&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Integral (force&amp;amp;nbsp;&amp;lt;code&amp;gt;\textstyle&amp;lt;/code&amp;gt;)||&amp;lt;code&amp;gt;\textstyle \int\limits_{-N}^{N} e^x\, dx&amp;lt;/code&amp;gt;||colspan=2|&amp;lt;math&amp;gt;\textstyle \int\limits_{-N}^{N} e^x\, dx&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Integral (force&amp;amp;nbsp;&amp;lt;code&amp;gt;\textstyle&amp;lt;/code&amp;gt;, alternate limits style)||&amp;lt;code&amp;gt;\textstyle \int_{-N}^{N} e^x\, dx&amp;lt;/code&amp;gt;||colspan=2|&amp;lt;math&amp;gt;\textstyle \int_{-N}^{N} e^x\, dx&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Double integral||&amp;lt;code&amp;gt;\iint\limits_D \, dx\,dy&amp;lt;/code&amp;gt;||colspan=2|&amp;lt;math&amp;gt;\iint\limits_D \, dx\,dy&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Triple integral||&amp;lt;code&amp;gt;\iiint\limits_E \, dx\,dy\,dz&amp;lt;/code&amp;gt;||colspan=2|&amp;lt;math&amp;gt;\iiint\limits_E \, dx\,dy\,dz&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Quadruple integral||&amp;lt;code&amp;gt;\iiiint\limits_F \, dx\,dy\,dz\,dt&amp;lt;/code&amp;gt;||colspan=2|&amp;lt;math&amp;gt;\iiiint\limits_F \, dx\,dy\,dz\,dt&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Line or path integral||&amp;lt;code&amp;gt;\int_C x^3\, dx + 4y^2\, dy&amp;lt;/code&amp;gt;||colspan=2|&amp;lt;math&amp;gt;\int_C x^3\, dx + 4y^2\, dy&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Closed line or path integral||&amp;lt;code&amp;gt;\oint_C x^3\, dx + 4y^2\, dy&amp;lt;/code&amp;gt;||colspan=2|&amp;lt;math&amp;gt;\oint_C x^3\, dx + 4y^2\, dy&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Intersections||&amp;lt;code&amp;gt;\bigcap_1^n p&amp;lt;/code&amp;gt;||colspan=2|&amp;lt;math&amp;gt;\bigcap_1^n p&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Unions||&amp;lt;code&amp;gt;\bigcup_1^k p&amp;lt;/code&amp;gt;||colspan=2|&amp;lt;math&amp;gt;\bigcup_1^k p&amp;lt;/math&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Fractions, matrices, multilines ===&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Feature&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Syntax&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;How it looks rendered&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Fractions&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;\frac{2}{4}=0.5&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;\frac{2}{4}=0.5&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Small Fractions&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;\tfrac{2}{4} = 0.5&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;\tfrac{2}{4} = 0.5&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Large (normal) Fractions&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;\dfrac{2}{4} = 0.5 \qquad \dfrac{2}{c + \dfrac{2}{d + \dfrac{2}{4}}} = a &amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;\dfrac{2}{4} = 0.5 \qquad \dfrac{2}{c + \dfrac{2}{d + \dfrac{2}{4}}} = a&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Large (nested) Fractions&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;\cfrac{2}{c + \cfrac{2}{d + \cfrac{2}{4}}} = a&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;\cfrac{2}{c + \cfrac{2}{d + \cfrac{2}{4}}} = a&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Binomial coefficients&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;\binom{n}{k}&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;\binom{n}{k}&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Small Binomial coefficients&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;\tbinom{n}{k}&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;\tbinom{n}{k}&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Large (normal) Binomial coefficients&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;\dbinom{n}{k}&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;\dbinom{n}{k}&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td rowspan=&amp;quot;7&amp;quot;&amp;gt;Matrices&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;pre&amp;gt;\begin{matrix}&lt;br /&gt;
  x &amp;amp; y \\&lt;br /&gt;
  z &amp;amp; v &lt;br /&gt;
\end{matrix}&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;\begin{matrix} x &amp;amp; y \\ z &amp;amp; v&lt;br /&gt;
\end{matrix}&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;pre&amp;gt;\begin{vmatrix}&lt;br /&gt;
  x &amp;amp; y \\&lt;br /&gt;
  z &amp;amp; v &lt;br /&gt;
\end{vmatrix}&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;\begin{vmatrix} x &amp;amp; y \\ z &amp;amp; v&lt;br /&gt;
\end{vmatrix}&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;pre&amp;gt;\begin{Vmatrix}&lt;br /&gt;
  x &amp;amp; y \\&lt;br /&gt;
  z &amp;amp; v&lt;br /&gt;
\end{Vmatrix}&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;\begin{Vmatrix} x &amp;amp; y \\ z &amp;amp; v&lt;br /&gt;
\end{Vmatrix}&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;pre&amp;gt;\begin{bmatrix}&lt;br /&gt;
  0      &amp;amp; \cdots &amp;amp; 0      \\&lt;br /&gt;
  \vdots &amp;amp; \ddots &amp;amp; \vdots \\ &lt;br /&gt;
  0      &amp;amp; \cdots &amp;amp; 0&lt;br /&gt;
\end{bmatrix}&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;\begin{bmatrix} 0 &amp;amp; \cdots &amp;amp; 0 \\ \vdots&lt;br /&gt;
&amp;amp; \ddots &amp;amp; \vdots \\ 0 &amp;amp; \cdots &amp;amp;&lt;br /&gt;
0\end{bmatrix} &amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;pre&amp;gt;\begin{Bmatrix}&lt;br /&gt;
  x &amp;amp; y \\&lt;br /&gt;
  z &amp;amp; v&lt;br /&gt;
\end{Bmatrix}&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;\begin{Bmatrix} x &amp;amp; y \\ z &amp;amp; v&lt;br /&gt;
\end{Bmatrix}&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;pre&amp;gt;\begin{pmatrix}&lt;br /&gt;
  x &amp;amp; y \\&lt;br /&gt;
  z &amp;amp; v &lt;br /&gt;
\end{pmatrix}&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;\begin{pmatrix} x &amp;amp; y \\ z &amp;amp; v&lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
\bigl( \begin{smallmatrix}&lt;br /&gt;
  a&amp;amp;b\\ c&amp;amp;d&lt;br /&gt;
\end{smallmatrix} \bigr)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
\bigl( \begin{smallmatrix}&lt;br /&gt;
  a&amp;amp;b\\ c&amp;amp;d&lt;br /&gt;
\end{smallmatrix} \bigr)&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Case distinctions&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
f(n) = &lt;br /&gt;
\begin{cases} &lt;br /&gt;
  n/2,  &amp;amp; \mbox{if }n\mbox{ is even} \\&lt;br /&gt;
  3n+1, &amp;amp; \mbox{if }n\mbox{ is odd} &lt;br /&gt;
\end{cases}&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;f(n) = &lt;br /&gt;
\begin{cases}&lt;br /&gt;
  n/2,  &amp;amp; \mbox{if }n\mbox{ is even} \\ &lt;br /&gt;
  3n+1, &amp;amp; \mbox{if }n\mbox{ is odd} &lt;br /&gt;
\end{cases} &amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td rowspan=&amp;quot;2&amp;quot;&amp;gt;Multiline equations&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
 f(x) &amp;amp; = (a+b)^2 \\&lt;br /&gt;
      &amp;amp; = a^2+2ab+b^2 \\&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
 f(x) &amp;amp; = (a+b)^2 \\&lt;br /&gt;
      &amp;amp; = a^2+2ab+b^2 \\&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
\begin{alignat}{2}&lt;br /&gt;
 f(x) &amp;amp; = (a-b)^2 \\&lt;br /&gt;
      &amp;amp; = a^2-2ab+b^2 \\&lt;br /&gt;
\end{alignat}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{alignat}{2}&lt;br /&gt;
 f(x) &amp;amp; = (a-b)^2 \\&lt;br /&gt;
      &amp;amp; = a^2-2ab+b^2 \\&lt;br /&gt;
\end{alignat}&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Multiline equations &amp;lt;small&amp;gt;(must define number of colums used ({lcr}) &amp;lt;small&amp;gt;(should not be used unless needed)&amp;lt;/small&amp;gt;&amp;lt;/small&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
\begin{array}{lcl}&lt;br /&gt;
  z        &amp;amp; = &amp;amp; a \\&lt;br /&gt;
  f(x,y,z) &amp;amp; = &amp;amp; x + y + z  &lt;br /&gt;
\end{array}&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;\begin{array}{lcl}&lt;br /&gt;
  z        &amp;amp; = &amp;amp; a \\&lt;br /&gt;
  f(x,y,z) &amp;amp; = &amp;amp; x + y + z  &lt;br /&gt;
\end{array}&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Multiline equations (more)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
\begin{array}{lcr}&lt;br /&gt;
  z        &amp;amp; = &amp;amp; a \\&lt;br /&gt;
  f(x,y,z) &amp;amp; = &amp;amp; x + y + z     &lt;br /&gt;
\end{array}&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;\begin{array}{lcr}&lt;br /&gt;
  z        &amp;amp; = &amp;amp; a \\&lt;br /&gt;
  f(x,y,z) &amp;amp; = &amp;amp; x + y + z     &lt;br /&gt;
\end{array}&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Breaking up a long expression so that it wraps when necessary, at the expense of destroying correct spacing&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;f(x) \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;= \sum_{n=0}^\infty a_n x^n &amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;= a_0+a_1x+a_2x^2+\cdots&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;f(x) \,\!&amp;lt;/math&amp;gt;&amp;lt;math&amp;gt;= \sum_{n=0}^\infty a_n x^n &amp;lt;/math&amp;gt;&amp;lt;math&amp;gt;= a_0 +a_1x+a_2x^2+\cdots&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Simultaneous equations&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;pre&amp;gt;\begin{cases}&lt;br /&gt;
    3x + 5y +  z \\&lt;br /&gt;
    7x - 2y + 4z \\&lt;br /&gt;
   -6x + 3y + 2z &lt;br /&gt;
\end{cases}&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;\begin{cases} 3x + 5y + z \\ 7x - 2y + 4z \\ -6x + 3y + 2z \end{cases}&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Arrays&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
\begin{array}{|c|c||c|} a &amp;amp; b &amp;amp; S \\&lt;br /&gt;
\hline&lt;br /&gt;
0&amp;amp;0&amp;amp;1\\&lt;br /&gt;
0&amp;amp;1&amp;amp;1\\&lt;br /&gt;
1&amp;amp;0&amp;amp;1\\&lt;br /&gt;
1&amp;amp;1&amp;amp;0\\&lt;br /&gt;
\end{array}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{array}{|c|c||c|} a &amp;amp; b &amp;amp; S \\&lt;br /&gt;
\hline&lt;br /&gt;
0&amp;amp;0&amp;amp;1\\&lt;br /&gt;
0&amp;amp;1&amp;amp;1\\&lt;br /&gt;
1&amp;amp;0&amp;amp;1\\&lt;br /&gt;
1&amp;amp;1&amp;amp;0\\&lt;br /&gt;
\end{array}&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Parenthesizing big expressions, brackets, bars ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Feature !! Syntax !! How it looks rendered&lt;br /&gt;
|-&lt;br /&gt;
| Bad&lt;br /&gt;
| &amp;lt;code&amp;gt;( \frac{1}{2} )&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;math&amp;gt;( \frac{1}{2} )&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Good&lt;br /&gt;
| &amp;lt;code&amp;gt;\left ( \frac{1}{2} \right )&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;math&amp;gt;\left ( \frac{1}{2} \right )&amp;lt;/math&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You can use various delimiters with \left and \right: &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Feature&lt;br /&gt;
! Syntax&lt;br /&gt;
! How it looks rendered&lt;br /&gt;
|-&lt;br /&gt;
| Parentheses&lt;br /&gt;
| &amp;lt;code&amp;gt;\left ( \frac{a}{b} \right )&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;math&amp;gt;\left ( \frac{a}{b} \right )&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Brackets&lt;br /&gt;
| &amp;lt;code&amp;gt;\left [ \frac{a}{b} \right ] \quad \left \lbrack \frac{a}{b} \right \rbrack&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;math&amp;gt;\left [ \frac{a}{b} \right ] \quad \left \lbrack \frac{a}{b} \right \rbrack&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Braces&lt;br /&gt;
| &amp;lt;code&amp;gt;\left \{ \frac{a}{b} \right \} \quad \left \lbrace \frac{a}{b} \right \rbrace&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;math&amp;gt;\left \{ \frac{a}{b} \right \} \quad \left \lbrace \frac{a}{b} \right \rbrace&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Angle brackets&lt;br /&gt;
| &amp;lt;code&amp;gt;\left \langle \frac{a}{b} \right \rangle&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;math&amp;gt;\left \langle \frac{a}{b} \right \rangle&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Bars and double bars&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\left | \frac{a}{b} \right \vert \left \Vert \frac{c}{d} \right \|&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;math&amp;gt;\left | \frac{a}{b} \right \vert \left \Vert \frac{c}{d} \right \|&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Floor and ceiling functions:&lt;br /&gt;
| &amp;lt;code&amp;gt;\left \lfloor \frac{a}{b} \right \rfloor \left \lceil \frac{c}{d} \right \rceil&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;math&amp;gt;\left \lfloor \frac{a}{b} \right \rfloor \left \lceil \frac{c}{d} \right \rceil&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Slashes and backslashes&lt;br /&gt;
| &amp;lt;code&amp;gt;\left / \frac{a}{b} \right \backslash&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;math&amp;gt;\left / \frac{a}{b} \right \backslash&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Up, down and up-down arrows&lt;br /&gt;
| &amp;lt;code&amp;gt;\left \uparrow \frac{a}{b} \right \downarrow \quad \left \Uparrow \frac{a}{b} \right \Downarrow \quad \left \updownarrow \frac{a}{b} \right \Updownarrow&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;math&amp;gt;\left \uparrow \frac{a}{b} \right \downarrow \quad \left \Uparrow \frac{a}{b} \right \Downarrow \quad \left \updownarrow \frac{a}{b} \right \Updownarrow&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Delimiters can be mixed,&amp;lt;br/&amp;gt;as long as \left and \right match&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\left [ 0,1 \right )&amp;lt;/code&amp;gt; &amp;lt;br/&amp;gt; &amp;lt;code&amp;gt;\left \langle \psi \right |&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;math&amp;gt;\left [ 0,1 \right )&amp;lt;/math&amp;gt; &amp;lt;br/&amp;gt; &amp;lt;math&amp;gt;\left \langle \psi \right |&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Use \left. and \right. if you don&#039;t&amp;lt;br/&amp;gt;want a delimiter to appear:&lt;br /&gt;
| &amp;lt;code&amp;gt;\left . \frac{A}{B} \right \} \to X&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;math&amp;gt;\left . \frac{A}{B} \right \} \to X&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;7&amp;quot; | Size of the delimiters&lt;br /&gt;
| &amp;lt;code&amp;gt;\big( \Big( \bigg( \Bigg( \dots \Bigg] \bigg] \Big] \big]/&amp;lt;code&amp;gt;&lt;br /&gt;
| &amp;lt;math&amp;gt;\big( \Big( \bigg( \Bigg( \dots \Bigg] \bigg] \Big] \big]&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;\big\{ \Big\{ \bigg\{ \Bigg\{ \dots \Bigg\rangle \bigg\rangle \Big\rangle \big\rangle&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;math&amp;gt;\big\{ \Big\{ \bigg\{ \Bigg\{ \dots \Bigg\rangle \bigg\rangle \Big\rangle \big\rangle&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\big\| \Big\| \bigg\| \Bigg\| \dots \Bigg| \bigg| \Big| \big|&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;math&amp;gt;\big\| \Big\| \bigg\| \Bigg\| \dots \Bigg| \bigg| \Big| \big|&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;\big\lfloor \Big\lfloor \bigg\lfloor \Bigg\lfloor \dots \Bigg\rceil \bigg\rceil \Big\rceil \big\rceil&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;math&amp;gt;\big\lfloor \Big\lfloor \bigg\lfloor \Bigg\lfloor \dots \Bigg\rceil \bigg\rceil \Big\rceil \big\rceil&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;\big\uparrow \Big\uparrow \bigg\uparrow \Bigg\uparrow \dots \Bigg\Downarrow \bigg\Downarrow \Big\Downarrow \big\Downarrow&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;math&amp;gt;\big\uparrow \Big\uparrow \bigg\uparrow \Bigg\uparrow \dots \Bigg\Downarrow \bigg\Downarrow \Big\Downarrow \big\Downarrow&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;\big\updownarrow \Big\updownarrow \bigg\updownarrow \Bigg\updownarrow \dots \Bigg\Updownarrow \bigg\Updownarrow \Big\Updownarrow \big\Updownarrow&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;math&amp;gt;\big\updownarrow \Big\updownarrow \bigg\updownarrow \Bigg\updownarrow \dots \Bigg\Updownarrow \bigg\Updownarrow \Big\Updownarrow \big\Updownarrow&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;\big / \Big / \bigg / \Bigg / \dots \Bigg\backslash \bigg\backslash \Big\backslash \big\backslash&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;math&amp;gt;\big / \Big / \bigg / \Bigg / \dots \Bigg\backslash \bigg\backslash \Big\backslash \big\backslash&amp;lt;/math&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Alphabets and typefaces == &lt;br /&gt;
[[w:Texvc|Texvc]] cannot render arbitrary [[w:Unicode|Unicode]] characters. Those it can handle can be entered by the expressions below.&lt;br /&gt;
For others, such as [[w:Cyrillic|Cyrillic]], they can be entered as Unicode or HTML entities in running text, but cannot be used in displayed formulas.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; | Greek alphabet&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\Alpha \Beta \Gamma \Delta \Epsilon \Zeta&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\Alpha \Beta \Gamma \Delta \Epsilon \Zeta \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\Eta \Theta \Iota \Kappa \Lambda \Mu&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\Eta \Theta \Iota \Kappa \Lambda \Mu \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\Nu \Xi \Pi \Rho \Sigma \Tau&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\Nu \Xi \Pi \Rho \Sigma \Tau\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\Upsilon \Phi \Chi \Psi \Omega&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\Upsilon \Phi \Chi \Psi \Omega \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\alpha \beta \gamma \delta \epsilon \zeta&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\alpha \beta \gamma \delta \epsilon \zeta \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\eta \theta \iota \kappa \lambda \mu&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\eta \theta \iota \kappa \lambda \mu \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\nu \xi \pi \rho \sigma \tau&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\nu \xi \pi \rho \sigma \tau \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\upsilon \phi \chi \psi \omega&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\upsilon \phi \chi \psi \omega \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\varepsilon \digamma \vartheta \varkappa&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\varepsilon \digamma \vartheta \varkappa \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\varpi \varrho \varsigma \varphi&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\varpi \varrho \varsigma \varphi\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; | Blackboard Bold/Scripts&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathbb{A} \mathbb{B} \mathbb{C} \mathbb{D} \mathbb{E} \mathbb{F} \mathbb{G}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathbb{A} \mathbb{B} \mathbb{C} \mathbb{D} \mathbb{E} \mathbb{F} \mathbb{G} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathbb{H} \mathbb{I} \mathbb{J} \mathbb{K} \mathbb{L} \mathbb{M}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathbb{H} \mathbb{I} \mathbb{J} \mathbb{K} \mathbb{L} \mathbb{M} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathbb{N} \mathbb{O} \mathbb{P} \mathbb{Q} \mathbb{R} \mathbb{S} \mathbb{T}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathbb{N} \mathbb{O} \mathbb{P} \mathbb{Q} \mathbb{R} \mathbb{S} \mathbb{T} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathbb{U} \mathbb{V} \mathbb{W} \mathbb{X} \mathbb{Y} \mathbb{Z}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathbb{U} \mathbb{V} \mathbb{W} \mathbb{X} \mathbb{Y} \mathbb{Z}\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; | boldface (vectors)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathbf{A} \mathbf{B} \mathbf{C} \mathbf{D} \mathbf{E} \mathbf{F} \mathbf{G}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathbf{A} \mathbf{B} \mathbf{C} \mathbf{D} \mathbf{E} \mathbf{F} \mathbf{G} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathbf{H} \mathbf{I} \mathbf{J} \mathbf{K} \mathbf{L} \mathbf{M}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathbf{H} \mathbf{I} \mathbf{J} \mathbf{K} \mathbf{L} \mathbf{M} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathbf{N} \mathbf{O} \mathbf{P} \mathbf{Q} \mathbf{R} \mathbf{S} \mathbf{T}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathbf{N} \mathbf{O} \mathbf{P} \mathbf{Q} \mathbf{R} \mathbf{S} \mathbf{T} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathbf{U} \mathbf{V} \mathbf{W} \mathbf{X} \mathbf{Y} \mathbf{Z}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathbf{U} \mathbf{V} \mathbf{W} \mathbf{X} \mathbf{Y} \mathbf{Z} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathbf{a} \mathbf{b} \mathbf{c} \mathbf{d} \mathbf{e} \mathbf{f} \mathbf{g}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathbf{a} \mathbf{b} \mathbf{c} \mathbf{d} \mathbf{e} \mathbf{f} \mathbf{g} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathbf{h} \mathbf{i} \mathbf{j} \mathbf{k} \mathbf{l} \mathbf{m}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathbf{h} \mathbf{i} \mathbf{j} \mathbf{k} \mathbf{l} \mathbf{m} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathbf{n} \mathbf{o} \mathbf{p} \mathbf{q} \mathbf{r} \mathbf{s} \mathbf{t}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathbf{n} \mathbf{o} \mathbf{p} \mathbf{q} \mathbf{r} \mathbf{s} \mathbf{t} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathbf{u} \mathbf{v} \mathbf{w} \mathbf{x} \mathbf{y} \mathbf{z}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathbf{u} \mathbf{v} \mathbf{w} \mathbf{x} \mathbf{y} \mathbf{z} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathbf{0} \mathbf{1} \mathbf{2} \mathbf{3} \mathbf{4}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathbf{0} \mathbf{1} \mathbf{2} \mathbf{3} \mathbf{4} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathbf{5} \mathbf{6} \mathbf{7} \mathbf{8} \mathbf{9}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathbf{5} \mathbf{6} \mathbf{7} \mathbf{8} \mathbf{9}\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; | Boldface (greek)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\boldsymbol{\Alpha} \boldsymbol{\Beta} \boldsymbol{\Gamma} \boldsymbol{\Delta} \boldsymbol{\Epsilon} \boldsymbol{\Zeta}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\boldsymbol{\Alpha} \boldsymbol{\Beta} \boldsymbol{\Gamma} \boldsymbol{\Delta} \boldsymbol{\Epsilon} \boldsymbol{\Zeta} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\boldsymbol{\Eta} \boldsymbol{\Theta} \boldsymbol{\Iota} \boldsymbol{\Kappa} \boldsymbol{\Lambda} \boldsymbol{\Mu}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\boldsymbol{\Eta} \boldsymbol{\Theta} \boldsymbol{\Iota} \boldsymbol{\Kappa} \boldsymbol{\Lambda} \boldsymbol{\Mu}\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\boldsymbol{\Nu} \boldsymbol{\Xi} \boldsymbol{\Pi} \boldsymbol{\Rho} \boldsymbol{\Sigma} \boldsymbol{\Tau}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\boldsymbol{\Nu} \boldsymbol{\Xi} \boldsymbol{\Pi} \boldsymbol{\Rho} \boldsymbol{\Sigma} \boldsymbol{\Tau}\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\boldsymbol{\Upsilon} \boldsymbol{\Phi} \boldsymbol{\Chi} \boldsymbol{\Psi} \boldsymbol{\Omega}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\boldsymbol{\Upsilon} \boldsymbol{\Phi} \boldsymbol{\Chi} \boldsymbol{\Psi} \boldsymbol{\Omega}\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\boldsymbol{\alpha} \boldsymbol{\beta} \boldsymbol{\gamma} \boldsymbol{\delta} \boldsymbol{\epsilon} \boldsymbol{\zeta}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\boldsymbol{\alpha} \boldsymbol{\beta} \boldsymbol{\gamma} \boldsymbol{\delta} \boldsymbol{\epsilon} \boldsymbol{\zeta}\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\boldsymbol{\eta} \boldsymbol{\theta} \boldsymbol{\iota} \boldsymbol{\kappa} \boldsymbol{\lambda} \boldsymbol{\mu}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\boldsymbol{\eta} \boldsymbol{\theta} \boldsymbol{\iota} \boldsymbol{\kappa} \boldsymbol{\lambda} \boldsymbol{\mu}\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\boldsymbol{\nu} \boldsymbol{\xi} \boldsymbol{\pi} \boldsymbol{\rho} \boldsymbol{\sigma} \boldsymbol{\tau}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\boldsymbol{\nu} \boldsymbol{\xi} \boldsymbol{\pi} \boldsymbol{\rho} \boldsymbol{\sigma} \boldsymbol{\tau}\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\boldsymbol{\upsilon} \boldsymbol{\phi} \boldsymbol{\chi} \boldsymbol{\psi} \boldsymbol{\omega}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\boldsymbol{\upsilon} \boldsymbol{\phi} \boldsymbol{\chi} \boldsymbol{\psi} \boldsymbol{\omega}\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\boldsymbol{\varepsilon} \boldsymbol{\digamma} \boldsymbol{\vartheta} \boldsymbol{\varkappa}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\boldsymbol{\varepsilon} \boldsymbol{\digamma} \boldsymbol{\vartheta} \boldsymbol{\varkappa} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\boldsymbol{\varpi} \boldsymbol{\varrho} \boldsymbol{\varsigma} \boldsymbol{\varphi}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\boldsymbol{\varpi} \boldsymbol{\varrho} \boldsymbol{\varsigma} \boldsymbol{\varphi}\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; | Italics&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathit{A} \mathit{B} \mathit{C} \mathit{D} \mathit{E} \mathit{F} \mathit{G}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathit{A} \mathit{B} \mathit{C} \mathit{D} \mathit{E} \mathit{F} \mathit{G} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathit{H} \mathit{I} \mathit{J} \mathit{K} \mathit{L} \mathit{M}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathit{H} \mathit{I} \mathit{J} \mathit{K} \mathit{L} \mathit{M} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathit{N} \mathit{O} \mathit{P} \mathit{Q} \mathit{R} \mathit{S} \mathit{T}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathit{N} \mathit{O} \mathit{P} \mathit{Q} \mathit{R} \mathit{S} \mathit{T} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathit{U} \mathit{V} \mathit{W} \mathit{X} \mathit{Y} \mathit{Z}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathit{U} \mathit{V} \mathit{W} \mathit{X} \mathit{Y} \mathit{Z} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathit{a} \mathit{b} \mathit{c} \mathit{d} \mathit{e} \mathit{f} \mathit{g}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathit{a} \mathit{b} \mathit{c} \mathit{d} \mathit{e} \mathit{f} \mathit{g} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathit{h} \mathit{i} \mathit{j} \mathit{k} \mathit{l} \mathit{m}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathit{h} \mathit{i} \mathit{j} \mathit{k} \mathit{l} \mathit{m} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathit{n} \mathit{o} \mathit{p} \mathit{q} \mathit{r} \mathit{s} \mathit{t}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathit{n} \mathit{o} \mathit{p} \mathit{q} \mathit{r} \mathit{s} \mathit{t} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathit{u} \mathit{v} \mathit{w} \mathit{x} \mathit{y} \mathit{z}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathit{u} \mathit{v} \mathit{w} \mathit{x} \mathit{y} \mathit{z} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathit{0} \mathit{1} \mathit{2} \mathit{3} \mathit{4}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathit{0} \mathit{1} \mathit{2} \mathit{3} \mathit{4} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathit{5} \mathit{6} \mathit{7} \mathit{8} \mathit{9}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathit{5} \mathit{6} \mathit{7} \mathit{8} \mathit{9}\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; | Roman typeface&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathrm{A} \mathrm{B} \mathrm{C} \mathrm{D} \mathrm{E} \mathrm{F} \mathrm{G}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathrm{A} \mathrm{B} \mathrm{C} \mathrm{D} \mathrm{E} \mathrm{F} \mathrm{G} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathrm{H} \mathrm{I} \mathrm{J} \mathrm{K} \mathrm{L} \mathrm{M}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathrm{H} \mathrm{I} \mathrm{J} \mathrm{K} \mathrm{L} \mathrm{M} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathrm{N} \mathrm{O} \mathrm{P} \mathrm{Q} \mathrm{R} \mathrm{S} \mathrm{T}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathrm{N} \mathrm{O} \mathrm{P} \mathrm{Q} \mathrm{R} \mathrm{S} \mathrm{T} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathrm{U} \mathrm{V} \mathrm{W} \mathrm{X} \mathrm{Y} \mathrm{Z}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathrm{U} \mathrm{V} \mathrm{W} \mathrm{X} \mathrm{Y} \mathrm{Z} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathrm{a} \mathrm{b} \mathrm{c} \mathrm{d} \mathrm{e} \mathrm{f} \mathrm{g}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathrm{a} \mathrm{b} \mathrm{c} \mathrm{d} \mathrm{e} \mathrm{f} \mathrm{g}\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathrm{h} \mathrm{i} \mathrm{j} \mathrm{k} \mathrm{l} \mathrm{m}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathrm{h} \mathrm{i} \mathrm{j} \mathrm{k} \mathrm{l} \mathrm{m} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathrm{n} \mathrm{o} \mathrm{p} \mathrm{q} \mathrm{r} \mathrm{s} \mathrm{t}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathrm{n} \mathrm{o} \mathrm{p} \mathrm{q} \mathrm{r} \mathrm{s} \mathrm{t} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathrm{u} \mathrm{v} \mathrm{w} \mathrm{x} \mathrm{y} \mathrm{z}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathrm{u} \mathrm{v} \mathrm{w} \mathrm{x} \mathrm{y} \mathrm{z} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathrm{0} \mathrm{1} \mathrm{2} \mathrm{3} \mathrm{4}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathrm{0} \mathrm{1} \mathrm{2} \mathrm{3} \mathrm{4} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathrm{5} \mathrm{6} \mathrm{7} \mathrm{8} \mathrm{9}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathrm{5} \mathrm{6} \mathrm{7} \mathrm{8} \mathrm{9}\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; | Fraktur typeface&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathfrak{A} \mathfrak{B} \mathfrak{C} \mathfrak{D} \mathfrak{E} \mathfrak{F} \mathfrak{G}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathfrak{A} \mathfrak{B} \mathfrak{C} \mathfrak{D} \mathfrak{E} \mathfrak{F} \mathfrak{G} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathfrak{H} \mathfrak{I} \mathfrak{J} \mathfrak{K} \mathfrak{L} \mathfrak{M}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathfrak{H} \mathfrak{I} \mathfrak{J} \mathfrak{K} \mathfrak{L} \mathfrak{M} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathfrak{N} \mathfrak{O} \mathfrak{P} \mathfrak{Q} \mathfrak{R} \mathfrak{S} \mathfrak{T}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathfrak{N} \mathfrak{O} \mathfrak{P} \mathfrak{Q} \mathfrak{R} \mathfrak{S} \mathfrak{T} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathfrak{U} \mathfrak{V} \mathfrak{W} \mathfrak{X} \mathfrak{Y} \mathfrak{Z}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathfrak{U} \mathfrak{V} \mathfrak{W} \mathfrak{X} \mathfrak{Y} \mathfrak{Z} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathfrak{a} \mathfrak{b} \mathfrak{c} \mathfrak{d} \mathfrak{e} \mathfrak{f} \mathfrak{g}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathfrak{a} \mathfrak{b} \mathfrak{c} \mathfrak{d} \mathfrak{e} \mathfrak{f} \mathfrak{g} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathfrak{h} \mathfrak{i} \mathfrak{j} \mathfrak{k} \mathfrak{l} \mathfrak{m}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathfrak{h} \mathfrak{i} \mathfrak{j} \mathfrak{k} \mathfrak{l} \mathfrak{m} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathfrak{n} \mathfrak{o} \mathfrak{p} \mathfrak{q} \mathfrak{r} \mathfrak{s} \mathfrak{t}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathfrak{n} \mathfrak{o} \mathfrak{p} \mathfrak{q} \mathfrak{r} \mathfrak{s} \mathfrak{t} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathfrak{u} \mathfrak{v} \mathfrak{w} \mathfrak{x} \mathfrak{y} \mathfrak{z}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathfrak{u} \mathfrak{v} \mathfrak{w} \mathfrak{x} \mathfrak{y} \mathfrak{z} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathfrak{0} \mathfrak{1} \mathfrak{2} \mathfrak{3} \mathfrak{4}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathfrak{0} \mathfrak{1} \mathfrak{2} \mathfrak{3} \mathfrak{4} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathfrak{5} \mathfrak{6} \mathfrak{7} \mathfrak{8} \mathfrak{9}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathfrak{5} \mathfrak{6} \mathfrak{7} \mathfrak{8} \mathfrak{9}\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; | Calligraphy/Script&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathcal{A} \mathcal{B} \mathcal{C} \mathcal{D} \mathcal{E} \mathcal{F} \mathcal{G}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathcal{A} \mathcal{B} \mathcal{C} \mathcal{D} \mathcal{E} \mathcal{F} \mathcal{G} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathcal{H} \mathcal{I} \mathcal{J} \mathcal{K} \mathcal{L} \mathcal{M}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathcal{H} \mathcal{I} \mathcal{J} \mathcal{K} \mathcal{L} \mathcal{M} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathcal{N} \mathcal{O} \mathcal{P} \mathcal{Q} \mathcal{R} \mathcal{S} \mathcal{T}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathcal{N} \mathcal{O} \mathcal{P} \mathcal{Q} \mathcal{R} \mathcal{S} \mathcal{T} \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\mathcal{U} \mathcal{V} \mathcal{W} \mathcal{X} \mathcal{Y} \mathcal{Z}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\mathcal{U} \mathcal{V} \mathcal{W} \mathcal{X} \mathcal{Y} \mathcal{Z}\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; | Hebrew&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\aleph \beth \gimel \daleth&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\aleph \beth \gimel \daleth\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Feature&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Syntax&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th colspan=&amp;quot;2&amp;quot;&amp;gt;How it looks rendered&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;non-italicised characters&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;\mbox{abc}&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;\mbox{abc}&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;\mbox{abc} \,\!&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;mixed italics (bad)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;\mbox{if} n \mbox{is even}&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;\mbox{if} n \mbox{is even}&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;\mbox{if} n \mbox{is even} \,\!&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;mixed italics (good)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;\mbox{if }n\mbox{ is even}&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;\mbox{if }n\mbox{ is even}&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;\mbox{if }n\mbox{ is even} \,\!&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;mixed italics (more legible: ~ is a non-breaking space, while &amp;quot;\ &amp;quot; forces a space)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;\mbox{if}~n\ \mbox{is even}&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;\mbox{if}~n\ \mbox{is even}&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;\mbox{if}~n\ \mbox{is even} \,\!&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Color ==&lt;br /&gt;
&lt;br /&gt;
Equations can use color:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;{\color{Blue}x^2}+{\color{YellowOrange}2x}-{\color{OliveGreen}1}&amp;lt;/code&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;{\color{Blue}x^2}+{\color{YellowOrange}2x}-{\color{OliveGreen}1}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;x_{1,2}=\frac{-b\pm\sqrt{\color{Red}b^2-4ac}}{2a}&amp;lt;/code&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;x_{1,2}=\frac{-b\pm\sqrt{\color{Red}b^2-4ac}}{2a}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See here for [http://oregonstate.edu/%7Epeterseb/tex/samples/docs/color-package-demo.pdf all named colors] supported by LaTeX.&lt;br /&gt;
&lt;br /&gt;
Note that color should not be used as the &#039;&#039;only&#039;&#039; way to identify something, because it will become meaningless on black-and-white media or for color-blind people.  See [[en:Wikipedia:Manual of Style#Color coding]].&lt;br /&gt;
&lt;br /&gt;
== Formatting issues ==&lt;br /&gt;
=== Spacing ===&lt;br /&gt;
Note that TeX handles most spacing automatically, but you may sometimes want manual control. &lt;br /&gt;
&amp;lt;table border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Feature&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Syntax&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;How it looks rendered&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;double quad space&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;a \qquad b&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;a \qquad b&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;quad space&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;a \quad b&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;a \quad b&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;text space&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;a\ b&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;a\ b&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;text space without PNG conversion&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;a \mbox{ } b&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;a \mbox{ } b&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;large space&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;a\;b&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;a\;b&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;medium space&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;a\&amp;amp;gt;b&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[not supported]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;small space&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;a\,b&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;a\,b&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;no space&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;ab&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;ab\,&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;small negative space&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;a\!b&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;a\!b&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Alignment with normal text flow ===&lt;br /&gt;
Due to the default css&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;img.tex { vertical-align: middle; }&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
an inline expression like &amp;lt;math&amp;gt;\int_{-N}^{N} e^x\, dx&amp;lt;/math&amp;gt; should look good.&lt;br /&gt;
&lt;br /&gt;
If you need to align it otherwise, use &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;math style=&amp;quot;vertical-align:-100%;&amp;quot;&amp;gt;...&amp;lt;/math&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; and play with the &amp;lt;code&amp;gt;vertical-align&amp;lt;/code&amp;gt; argument until you get it right; however, how it looks may depend on the browser and the browser settings.&lt;br /&gt;
&lt;br /&gt;
Also note that if you rely on this workaround, if/when the rendering on the server gets fixed in future releases, as a result of this extra manual offset your formulae will suddenly be aligned incorrectly. So use it sparingly, if at all.&lt;br /&gt;
&lt;br /&gt;
=== Forced PNG rendering ===&lt;br /&gt;
&lt;br /&gt;
To force the formula to render as PNG, add &amp;lt;code&amp;gt;\,&amp;lt;/code&amp;gt; (small space) at the end of the formula (where it is not rendered).  This will force PNG if the user is in &amp;quot;HTML if simple&amp;quot; mode, but not for &amp;quot;HTML if possible&amp;quot; mode.&lt;br /&gt;
&lt;br /&gt;
You can also use &amp;lt;code&amp;gt;\,\!&amp;lt;/code&amp;gt; (small space and negative space, which cancel out) anywhere inside the math tags.  This &#039;&#039;does&#039;&#039; force PNG even in &amp;quot;HTML if possible&amp;quot; mode, unlike &amp;lt;code&amp;gt;\,&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This could be useful to keep the rendering of formulae in a proof consistent, for example, or to fix formulae that render incorrectly in HTML (at one time, a^{2+2} rendered with an extra underscore), or to demonstrate how something is rendered when it would normally show up as HTML (as in the examples above).&lt;br /&gt;
&lt;br /&gt;
For instance:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Syntax&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;How it looks rendered&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;a^{c+2}&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;a^{c+2}&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;a^{c+2} \,&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;a^{c+2} \,&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;a^{\,\!c+2}&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;a^{\,\!c+2}&amp;lt;/math&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;a^{b^{c+2}}&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;a^{b^{c+2}}&amp;lt;/math&amp;gt; (WRONG with option &amp;quot;HTML if possible or else PNG&amp;quot;!)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;a^{b^{c+2}} \,&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;a^{b^{c+2}} \,&amp;lt;/math&amp;gt; (WRONG with option &amp;quot;HTML if possible or else PNG&amp;quot;!)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;a^{b^{c+2}}\approx 5&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;a^{b^{c+2}}\approx 5&amp;lt;/math&amp;gt; (due to &amp;quot;&amp;lt;math&amp;gt;\approx&amp;lt;/math&amp;gt;&amp;quot; correctly displayed, no code &amp;quot;\,\!&amp;quot; needed)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;a^{b^{\,\!c+2}}&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;a^{b^{\,\!c+2}}&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;\int_{-N}^{N} e^x\, dx&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;math&amp;gt;\int_{-N}^{N} e^x\, dx&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This has been tested with most of the formulae on this page, and seems to work perfectly.&lt;br /&gt;
&lt;br /&gt;
You might want to include a comment in the HTML so people don&#039;t &amp;quot;correct&amp;quot; the formula by removing it:&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&amp;lt;nowiki&amp;gt;&amp;lt;!-- The \,\! is to keep the formula rendered as PNG instead of HTML.  Please don&#039;t remove it.--&amp;gt;&amp;lt;/nowiki&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
===Quadratic Polynomial===&lt;br /&gt;
 &amp;lt;math&amp;gt;ax^2 + bx + c = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;math&amp;gt;ax^2 + bx + c = 0&amp;lt;/math&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Quadratic Polynomial (Force PNG Rendering)===&lt;br /&gt;
 &amp;lt;math&amp;gt;ax^2 + bx + c = 0\,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;math&amp;gt;ax^2 + bx + c = 0\,\!&amp;lt;/math&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Quadratic Formula===&lt;br /&gt;
 &amp;lt;math&amp;gt;x=\frac{-b\pm\sqrt{b^2-4ac}}{2a}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;math&amp;gt;x=\frac{-b\pm\sqrt{b^2-4ac}}{2a}&amp;lt;/math&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Tall Parentheses and Fractions ===&lt;br /&gt;
 &amp;lt;math&amp;gt;2 = \left( \frac{\left(3-x\right) \times 2}{3-x} \right)&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;math&amp;gt;2 = \left(&lt;br /&gt;
 \frac{\left(3-x\right) \times 2}{3-x}&lt;br /&gt;
 \right)&amp;lt;/math&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;S_{\text{new}} = S_{\text{old}} - \frac{ \left( 5-T \right) ^2} {2}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;S_{\text{new}} = S_{\text{old}} - \frac{ \left( 5-T \right) ^2} {2}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Integrals===&lt;br /&gt;
 &amp;lt;math&amp;gt;\int_a^x \!\!\!\int_a^s f(y)\,dy\,ds = \int_a^x f(y)(x-y)\,dy&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;math&amp;gt;\int_a^x \!\!\!\int_a^s f(y)\,dy\,ds&lt;br /&gt;
 = \int_a^x f(y)(x-y)\,dy&amp;lt;/math&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Summation===&lt;br /&gt;
 &amp;lt;math&amp;gt;\sum_{m=1}^\infty\sum_{n=1}^\infty\frac{m^2\,n}{3^m\left(m\,3^n+n\,3^m\right)}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;math&amp;gt;\sum_{m=1}^\infty\sum_{n=1}^\infty\frac{m^2\,n}&lt;br /&gt;
 {3^m\left(m\,3^n+n\,3^m\right)}&amp;lt;/math&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Differential Equation ===&lt;br /&gt;
 &amp;lt;math&amp;gt;u&#039;&#039; + p(x)u&#039; + q(x)u=f(x),\quad x&amp;gt;a&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;math&amp;gt;u&#039;&#039; + p(x)u&#039; + q(x)u=f(x),\quad x&amp;gt;a&amp;lt;/math&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Complex numbers===&lt;br /&gt;
 &amp;lt;math&amp;gt;|\bar{z}| = |z|, |(\bar{z})^n| = |z|^n, \arg(z^n) = n \arg(z)&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;math&amp;gt;|\bar{z}| = |z|,&lt;br /&gt;
 |(\bar{z})^n| = |z|^n,&lt;br /&gt;
 \arg(z^n) = n \arg(z)&amp;lt;/math&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Limits===&lt;br /&gt;
 &amp;lt;math&amp;gt;\lim_{z\rightarrow z_0} f(z)=f(z_0)&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;math&amp;gt;\lim_{z\rightarrow z_0} f(z)=f(z_0)&amp;lt;/math&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Integral Equation===&lt;br /&gt;
 &amp;lt;math&amp;gt;\phi_n(\kappa)&lt;br /&gt;
 = \frac{1}{4\pi^2\kappa^2} \int_0^\infty \frac{\sin(\kappa R)}{\kappa R}  \frac{\partial}{\partial R}  \left[R^2\frac{\partial D_n(R)}{\partial R}\right]\,dR&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;math&amp;gt;\phi_n(\kappa) =&lt;br /&gt;
 \frac{1}{4\pi^2\kappa^2} \int_0^\infty&lt;br /&gt;
 \frac{\sin(\kappa R)}{\kappa R}&lt;br /&gt;
 \frac{\partial}{\partial R}&lt;br /&gt;
 \left[R^2\frac{\partial D_n(R)}{\partial R}\right]\,dR&amp;lt;/math&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Example===&lt;br /&gt;
 &amp;lt;math&amp;gt;\phi_n(\kappa) = 0.033C_n^2\kappa^{-11/3},\quad \frac{1}{L_0}\ll\kappa\ll\frac{1}{l_0}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;math&amp;gt;\phi_n(\kappa) = &lt;br /&gt;
 0.033C_n^2\kappa^{-11/3},\quad&lt;br /&gt;
 \frac{1}{L_0}\ll\kappa\ll\frac{1}{l_0}&amp;lt;/math&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Continuation and cases===&lt;br /&gt;
 &amp;lt;math&amp;gt;f(x) = \begin{cases}1 &amp;amp; -1 \le x &amp;lt; 0 \\&lt;br /&gt;
 \frac{1}{2} &amp;amp; x = 0 \\ 1 - x^2 &amp;amp; \mbox{otherwise}\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
 f(x) =&lt;br /&gt;
 \begin{cases}&lt;br /&gt;
 1 &amp;amp; -1 \le x &amp;lt; 0 \\&lt;br /&gt;
 \frac{1}{2} &amp;amp; x = 0 \\&lt;br /&gt;
 1 - x^2 &amp;amp; \mbox{otherwise}&lt;br /&gt;
 \end{cases}&lt;br /&gt;
 &amp;lt;/math&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Prefixed subscript===&lt;br /&gt;
 &amp;lt;math&amp;gt;{}_pF_q(a_1,\dots,a_p;c_1,\dots,c_q;z) = \sum_{n=0}^\infty \frac{(a_1)_n\cdots(a_p)_n}{(c_1)_n\cdots(c_q)_n}\frac{z^n}{n!}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;math&amp;gt;{}_pF_q(a_1,\dots,a_p;c_1,\dots,c_q;z)&lt;br /&gt;
 = \sum_{n=0}^\infty&lt;br /&gt;
 \frac{(a_1)_n\cdots(a_p)_n}{(c_1)_n\cdots(c_q)_n}&lt;br /&gt;
 \frac{z^n}{n!}&amp;lt;/math&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Fraction and small fraction===&lt;br /&gt;
 &amp;lt;math&amp;gt; \frac {a}{b}&amp;lt;/math&amp;gt; &amp;amp;emsp; &amp;lt;math&amp;gt; \tfrac {a}{b} &amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;math&amp;gt; \frac {a}{b}\  \tfrac {a}{b} &amp;lt;/math&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Unicode vs TeX comparison===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;width: 255pt; border-collapse: collapse;&amp;quot; width=&amp;quot;340&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; width: 48pt; height: 12.75pt; background-color: transparent;&amp;quot; width=&amp;quot;64&amp;quot;&amp;gt;unicode&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;border: medium none #f0f0f0; width: 104pt; background-color: transparent;&amp;quot; width=&amp;quot;139&amp;quot;&amp;gt;TeX&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;border: medium none #f0f0f0; width: 103pt; background-color: transparent;&amp;quot; width=&amp;quot;137&amp;quot;&amp;gt;See&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⟦&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;[\![&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;[\![&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;{&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\{&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;∥&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\|&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\|&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;}&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\}&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;ℵ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\aleph&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\aleph&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;α&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\alpha&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⨿&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\amalg&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\amalg&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;∠&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\angle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\angle&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;≈&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\approx&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\approx&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;∗&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\ast&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\ast&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;≍&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\asymp&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\asymp&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;\&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\backslash&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\backslash&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;β&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\beta&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\beta&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⋂&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\bigcap&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\bigcap&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;◯&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\bigcirc&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\bigcirc&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⋃&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\bigcup&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\bigcup&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⨀&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\bigodot&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\bigodot&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⨁&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\bigoplus&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\bigoplus&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⨂&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\bigotimes&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\bigotimes&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⨆&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\bigsqcup&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\bigsqcup&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;▽&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\bigtriangledown&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\bigtriangledown&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;△&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\bigtriangleup&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\bigtriangleup&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⨄&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\biguplus&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\biguplus&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⋀&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\bigwedge&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\bigwedge&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⋁&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\bigvee&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\bigvee&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⊥&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\bot&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\bot&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⋈&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\bowtie&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\bowtie&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;□&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\Box&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\Box&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;∙&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\bullet&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\bullet&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;∩&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\cap&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\cap&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⋅&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\cdot&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\cdot&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⋯&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\cdots&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\cdots&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;χ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\chi&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\chi&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;∘&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\circ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\circ&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;♣&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\clubsuit&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\clubsuit&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;≅&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\cong&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\cong&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;∐&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\coprod&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\coprod&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;∪&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\cup&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\cup&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;†&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\dagger&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\dagger&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⊣&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\dashv&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\dashv&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;‡&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\ddagger&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\ddagger&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⋱&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\ddots&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\ddots&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;δ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\delta&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\delta&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;Δ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\Delta&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\Delta&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;◇&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\Diamond&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\Diamond&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⋄&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\diamond&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\diamond&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;♢&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\diamondsuit&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\diamondsuit&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;÷&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\div&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\div&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;≐&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\doteq&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\doteq&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;↓&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\downarrow&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\downarrow&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⇓&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\Downarrow&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\Downarrow&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;ℓ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\ell&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\ell&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;∅&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\emptyset&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\emptyset&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;ϵ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\epsilon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\epsilon&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;≡&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\equiv&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\equiv&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;η&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\eta&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\eta&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;∃&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\exists&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\exists&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;♭&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\flat&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\flat&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;∀&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\forall&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\forall&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⌢&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\frown&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\frown&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;γ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\gamma&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;Γ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\Gamma&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\Gamma&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;≥&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\ge&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\ge&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;≥&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\geq&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\geq&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;←&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\gets&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\gets&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;≫&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\gg&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\gg&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;ℏ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\hbar&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\hbar&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;♡&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\heartsuit&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\heartsuit&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;↩&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\hookleftarrow&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\hookleftarrow&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;↪&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\hookrightarrow&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\hookrightarrow&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;ℑ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\Im&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\Im&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;ı&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\imath&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\imath&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;∈&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\in&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\in&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;∞&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\infty&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\infty&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;∫&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\int&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\int&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;ι&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\iota&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\iota&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;j&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\jmath&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\jmath&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;κ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\kappa&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\kappa&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;λ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\lambda&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;Λ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\Lambda&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\Lambda&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;∧&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\land&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\land&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⟨&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\langle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\langle&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⟪&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\langle\!\langle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\langle\!\langle&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;{&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\lbrace&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\lbrace&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;[&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\lbrack&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\lbrack&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⌈&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\lceil&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\lceil&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;≤&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\le&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\le&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⇐&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\Leftarrow&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\Leftarrow&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;←&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\leftarrow&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\leftarrow&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;↽&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\leftharpoondown&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\leftharpoondown&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;↼&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\leftharpoonup&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\leftharpoonup&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;↔&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\leftrightarrow&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\leftrightarrow&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⇔&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\Leftrightarrow&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\Leftrightarrow&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;≤&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\leq&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\leq&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⌊&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\lfloor&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\lfloor&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;≪&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\ll&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\ll&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;¬&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\lnot&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\lnot&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⟸&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\Longleftarrow&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\Longleftarrow&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⟵&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\longleftarrow&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\longleftarrow&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⟺&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\Longleftrightarrow&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\Longleftrightarrow&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⟷&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\longleftrightarrow&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\longleftrightarrow&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⟼&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\longmapsto&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\longmapsto&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⟹&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\Longrightarrow&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\Longrightarrow&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⟶&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\longrightarrow&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\longrightarrow&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;∨&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\lor&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\lor&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;↦&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\mapsto&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\mapsto&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;∣&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\mid&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\mid&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⊨&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\models&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\models&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;∓&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\mp&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\mp&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;μ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\mu&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;∇&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\nabla&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\nabla&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;♮&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\natural&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\natural&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;≠&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\ne&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;↗&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\nearrow&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\nearrow&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;¬&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\neg&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\neg&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;≠&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\neq&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\neq&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;∋&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\ni&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\ni&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;≉&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\not\approx&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\not\approx&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;≭&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\not\asymp&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\not\asymp&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;≇&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\not\cong&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\not\cong&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;≢&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\not\equiv&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\not\equiv&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;≱&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\not\geq&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\not\geq&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;≰&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\not\leq&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\not\leq&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⊀&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\not\prec&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\not\prec&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⋠&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\not\preceq&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\not\preceq&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;≁&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\not\sim&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\not\sim&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;≄&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\not\simeq&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\not\simeq&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⋢&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\not\sqsubseteq&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\not\sqsubseteq&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⋣&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\not\sqsupseteq&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\not\sqsupseteq&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⊄&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\not\subset&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\not\subset&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⊈&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\not\subseteq&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\not\subseteq&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⊁&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\not\succ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\not\succ&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⋡&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\not\succeq&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\not\succeq&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⊅&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\not\supset&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\not\supset&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⊉&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\not\supseteq&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\not\supseteq&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;≠&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\not=&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\not=&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;ν&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\nu&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\nu&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;↖&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\nwarrow&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\nwarrow&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⊙&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\odot&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\odot&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;∮&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\oint&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\oint&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;ω&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\omega&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\omega&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;Ω&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\Omega&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\Omega&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⊖&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\ominus&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\ominus&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⊕&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\oplus&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\oplus&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⊘&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\oslash&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\oslash&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⊗&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\otimes&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\otimes&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;∥&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\parallel&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\parallel&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;∂&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\partial&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\partial&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⊥&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\perp&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\perp&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;ϕ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\phi&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\phi&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;Φ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\Phi&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\Phi&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;π&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\pi&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\pi&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;Π&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\Pi&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\Pi&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;±&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\pm&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\pm&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;≺&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\prec&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\prec&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;≼&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\preceq&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\preceq&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;′&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\prime&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\prime&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;∏&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\prod&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\prod&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;∝&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\propto&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\propto&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;ψ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\psi&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\psi&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;Ψ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\Psi&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\Psi&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⟩&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\rangle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\rangle&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⟫&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\rangle\!\rangle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\rangle\!\rangle&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;}&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\rbrace&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\rbrace&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\rbrack&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\rbrack&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⌉&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\rceil&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\rceil&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;ℜ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\Re&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\Re&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⌋&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\rfloor&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\rfloor&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;ρ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\rho&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\rho&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;→&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\rightarrow&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\rightarrow&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⇒&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\Rightarrow&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\Rightarrow&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⇁&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\rightharpoondown&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\rightharpoondown&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⇀&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\rightharpoonup&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\rightharpoonup&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⇌&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\rightleftharpoons&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\rightleftharpoons&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;↘&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\searrow&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\searrow&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;∖&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\setminus&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\setminus&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;♯&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\sharp&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\sharp&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;σ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\sigma&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;Σ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\Sigma&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\Sigma&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;∼&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\sim&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\sim&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;≃&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\simeq&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\simeq&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⌣&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\smile&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\smile&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;♠&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\spadesuit&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\spadesuit&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⊓&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\sqcap&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\sqcap&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⊔&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\sqcup&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\sqcup&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⊏&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\sqsubset&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\sqsubset&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⊑&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\sqsubseteq&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\sqsubseteq&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⊐&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\sqsupset&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\sqsupset&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⊒&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\sqsupseteq&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\sqsupseteq&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⋆&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\star&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\star&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⊂&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\subset&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\subset&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⊆&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\subseteq&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\subseteq&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;≻&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\succ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\succ&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;≽&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\succeq&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\succeq&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;∑&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\sum&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\sum&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⊃&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\supset&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\supset&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⊇&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\supseteq&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\supseteq&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;√&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\surd&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\surd&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;↙&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\swarrow&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\swarrow&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;τ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\tau&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;θ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\theta&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\theta&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;Θ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\Theta&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\Theta&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;×&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\times&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\times&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;→&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\to&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\to&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⊤&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\top&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\top&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;△&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\triangle&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\triangle&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;◁&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\triangleleft&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\triangleleft&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;▷&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\triangleright&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\triangleright&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;↑&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\uparrow&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\uparrow&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⇑&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\Uparrow&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\Uparrow&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;↕&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\updownarrow&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\updownarrow&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⇕&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\Updownarrow&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\Updownarrow&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⊎&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\uplus&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\uplus&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;υ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\upsilon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\upsilon&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;Υ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\Upsilon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\Upsilon&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;ε&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\varepsilon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;φ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\varphi&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\varphi&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;ϖ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\varpi&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\varpi&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;ϱ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\varrho&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\varrho&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;ς&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\varsigma&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\varsigma&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;ϑ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\vartheta&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\vartheta&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⊢&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\vdash&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\vdash&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⋮&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\vdots&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\vdots&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;∧&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\wedge&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\wedge&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;∨&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\vee&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\vee&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;∣&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\vert&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\vert&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;∥&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\Vert&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\Vert&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;℘&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\wp&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\wp&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;≀&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\wr&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\wr&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;ξ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\xi&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\xi&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;Ξ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\Xi&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\Xi&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;ζ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;\zeta&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\zeta&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;⟧&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;]\!]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;]\!]&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;height: 12.75pt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td height=&amp;quot;17&amp;quot; style=&amp;quot;border: medium none #f0f0f0; height: 12.75pt; background-color: transparent;&amp;quot;&amp;gt;ο&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;o&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: transparent; border: #f0f0f0;&amp;quot;&amp;gt;&amp;lt;math&amp;gt;o&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;/div&gt;</summary>
		<author><name>Stronk7</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/2x/pl/index.php?title=Installing_MSSQL_for_PHP&amp;diff=82739</id>
		<title>Installing MSSQL for PHP</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/2x/pl/index.php?title=Installing_MSSQL_for_PHP&amp;diff=82739"/>
		<updated>2011-04-13T23:02:06Z</updated>

		<summary type="html">&lt;p&gt;Stronk7: /* See Also */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Moodle 1.7}}{{Moodle 1.9}}{{Moodle 2.0}}&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
This short manual is suitable if you are trying to run Moodle 1.7 (and upwards) using the SQL*Server (MSSQL) RDBMS. Steps detailed below must be performed &#039;&#039;&#039;before&#039;&#039;&#039; installing Moodle itself.&lt;br /&gt;
&lt;br /&gt;
Some of this may also apply if you wish to access an MSSQL server for external db authentication/enrollment. &lt;br /&gt;
&lt;br /&gt;
First of all, minimum required version of MSSQL has been stabilised to MSSQL 2005 (v.9), although it &#039;&#039;&#039;might work with MSSQL 2000 (v.8) or newer&#039;&#039;&#039;. All the development process has been performed using MSSQL 2005 and there could be some &#039;&#039;&#039;unknown problems&#039;&#039;&#039; with previous releases.&lt;br /&gt;
&lt;br /&gt;
While PHP comes with one, more or less, standard extension (mssql) that provides access to MSSQL databases, early we found some hard limits on it. Basically such default extension has some limits that prevent us to use it at all (you can find more info about these problems [[Development:XMLDB problems#MSSQL, PHP, UTF-8 and UCS-2|here]]).&lt;br /&gt;
&lt;br /&gt;
So, in order to allow PHP (i.e. Moodle) to access to MSSQL DBs properly we have to install a &#039;&#039;&#039;mssql extension alternative&#039;&#039;&#039; to save us from the problems related above. See the sections below for details about the various options.&lt;br /&gt;
&lt;br /&gt;
== Installation overview ==&lt;br /&gt;
&lt;br /&gt;
1. Get MSSQL Server installed and running. ([http://www.microsoft.com/sql/editions/express/default.mspx A free limited version, SQL Server Express Edition] is available for testing.)&lt;br /&gt;
:Make sure that you choose mixed authentication (Windows and local accounts) to keep things simpler later.  You&#039;ll be asked to define the  &amp;quot;sa&amp;quot; account password (it&#039;s the default System Administrator account which has full access to all databases by default).&lt;br /&gt;
&lt;br /&gt;
2. Make sure MS SQL Server can accept incoming TCP/IP connections on port 1433 (the standard one).&lt;br /&gt;
:You might need to explicitly allow this in your Windows firewall (see the Control Panel).  You may also need to edit options in the :&#039;&#039;&#039;SQL Server Configuration Manager&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Network Configuration&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;Protocols&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;TCP/IP enabled&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
3. Open the &amp;quot;SQL Server Management Studio&amp;quot; and create a new empty database.  If you are using the &amp;quot;sa&amp;quot; account then you don&#039;t need to do anything else here.&lt;br /&gt;
&lt;br /&gt;
4. Configure these settings in your created (and still empty) database:&lt;br /&gt;
&lt;br /&gt;
:* ANSI NULLS Enabled = true (ALTER DATABASE xxxx SET ANSI_NULLS ON)&lt;br /&gt;
:* Quoted Identifiers Enabled = true (ALTER DATABASE xxxx SET QUOTED_IDENTIFIER ON)&lt;br /&gt;
:* Moodle 2.0 only: Row Versioning Enabled (ALTER DATABASE xxxx SET READ_COMMITTED_SNAPSHOT ON) - this one must be run from the server context menu (master database?) and not from the Moodle database&#039;s context&lt;br /&gt;
&lt;br /&gt;
5. Get PHP installed with a web server.   Unless you want to do it under IIS or some other way, the packages on the [http://download.moodle.org Moodle download page] are a good solution.&lt;br /&gt;
&lt;br /&gt;
6. Choose one of the following specific sections for your server to install the &#039;&#039;&#039;mssql extension alternative&#039;&#039;&#039; installed and running properly on your PHP box.&lt;br /&gt;
&lt;br /&gt;
7. Set the following settings in your php.ini file&lt;br /&gt;
:* mssql.textlimit = 20971520&lt;br /&gt;
:* mssql.textsize = 20971520&lt;br /&gt;
:Also, don&#039;t forget to set one of the following &#039;&#039;&#039;alternatives&#039;&#039;&#039;, in order to get all the data properly &amp;quot;slashed&amp;quot;:&lt;br /&gt;
:* magic_quotes_gpc = Off  &#039;&#039;&#039;or&#039;&#039;&#039;&lt;br /&gt;
:* magic_quotes_gpc = On &#039;&#039;&#039;and&#039;&#039;&#039; magic_quotes_sybase = On &lt;br /&gt;
&lt;br /&gt;
8. With all this properly configured, you can continue with a [[Installing Moodle|standard Moodle installation]].&lt;br /&gt;
&lt;br /&gt;
== Using the SQL Server 2005 Driver for PHP from Microsoft on Windows ==&lt;br /&gt;
In July 2008 Microsoft [http://social.msdn.microsoft.com/forums/en-US/sqldriverforphp/thread/a10e5202-9e41-4ff8-a33e-fbcc7b951be2/ released] a new SQL Server 2005 Driver for PHP. This is a PHP extension that allows PHP scripts to read and write data on Microsoft SQL Server databases and it overcomes the problems with the native SQL Server extension that was previously bundled with PHP.&lt;br /&gt;
&lt;br /&gt;
This Microsoft driver is the standard database layer for running Moodle 2 under Microsoft SQL Server databases. See [[Using the Microsoft SQL Server Driver for PHP]] the installation and configuration details.&lt;br /&gt;
&lt;br /&gt;
This driver is only supported in Moodle 2.0 and up. You should use [https://docs.moodle.org/en/Installing_MSSQL_for_PHP#Using_FreeTDS_on_Windows FreeTDS] if you are installing an older version of Moodle.&lt;br /&gt;
&lt;br /&gt;
See MDL-16497 and MDL-15093 for more background information.&lt;br /&gt;
&lt;br /&gt;
== Using FreeTDS on Windows ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&#039;&#039;&#039;Important Note 1:&#039;&#039;&#039; Due to some previous bugs it&#039;s highly recommendable to use PHP &amp;gt;= 5.2.6 and FreeTDS 0.82 + post-release patches ([http://tracker.moodle.org/browse/MDL-14725 more info]).&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If your web server is on Windows, use &#039;&#039;&#039;php_dblib.dll&#039;&#039;&#039;. Despite the name, it&#039;s FreeTDS compiled for Windows. (Go to this page for information on [https://docs.moodle.org/en/FreeTDS Using FreeTDS for Unix].) &lt;br /&gt;
&lt;br /&gt;
Originally we were using the DLLs available at [http://kromann.info/article.php?Id=11062598797760000 Frank Kromann&#039;s site], but they are outdated (using old versions of FreeTDS) and that has caused [http://tracker.moodle.org/browse/MDL-14725 some problems] in the past.&lt;br /&gt;
&lt;br /&gt;
So, right now, the recommended way to use FreeTDS under Windows is to use PHP 5.2.x following the following instructions:&lt;br /&gt;
&lt;br /&gt;
1. Download the appropriate copy of php_dblib.dll from the list below, and save it into your /PHP/ext directory.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; align=&amp;quot;center&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! PHP version !! [http://www.iis-aid.com/articles/my_word/difference_between_php_thread_safe_and_non_thread_safe_binaries Thread Safe]  !! FreeTDS version !! Download URL&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | PHP 5.2.x (vc6) || Yes || 0.82 + 20090302 patches || [http://download.moodle.org/download.php/dblib/php52/DBLIB_TS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| No || 0.82 + 20090302 patches || [http://download.moodle.org/download.php/dblib/php52/DBLIB_NOTS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | PHP 5.3.x (vc9) || Yes || 0.82 + 20090904 patches || [http://download.moodle.org/download.php/dblib/php53/DBLIB_TS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| No || 0.82 + 20090904 patches || [http://download.moodle.org/download.php/dblib/php53/DBLIB_NOTS.zip Download!]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |  Thanks to [http://remote-learner.net/ Remote-Learner]] (Moodle [http://moodle.com/partners/ Partner]) and specially to Bryan Williams, donating one Visual C++ 6.0 Pro license to Moodle. Thanks to Trevor Johnson and his builds of the dblib extensions. Thanks to Daniele, Doug, Luis, Sean and many others by their collaboration in MDL-14725. Thanks to Frediano Ziglio and James K. Lowden from [http://freetds.org freetds.org] by their support. Thanks to Alastair Hole by providing the PHP 5.3 builds of the libraries. Thanks!&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
(alternatively here you can find some [[Development:Compiling FreeTDS under Windows|instructions to build those freetds extensions under win32]] yourself)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. FreeTDS requires the .NET Framework v1.1 to be installed.  You can [http://www.microsoft.com/downloads/details.aspx?FamilyID=262d25e3-f589-4842-8157-034d1e7cf3a3&amp;amp;DisplayLang=en download it from the Microsoft website] along with its [http://www.microsoft.com/downloads/details.aspx?FamilyID=a8f5654f-088e-40b2-bbdb-a83353618b38&amp;amp;DisplayLang=en service pack].  Alternatively, if you do not wish to install this framework, you can [http://kromann.info/ms-libs/msvcr71.dll download the required DLL] from Frank&#039;s site, and save it into your /PHP root directory.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. Edit your /PHP/php.ini file and add this line:&lt;br /&gt;
&lt;br /&gt;
  extension=php_dblib.dll &lt;br /&gt;
&lt;br /&gt;
Make sure that any lines referring to the php_mssql.dll extension are DISABLED (commented out).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. When the PHP engine loads the FreeTDS extension it needs to be passed certain infiormation in order to be able to connect to your Moodle database. To retrieve this information FreeTDS looks for a file called &#039;&#039;&#039;freetds.conf&#039;&#039;&#039; in the root folder of the server that PHP installed on (e.g. C:\).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;freetds.conf&#039;&#039;&#039; should have the following structure:&lt;br /&gt;
&lt;br /&gt;
  [global]&lt;br /&gt;
      host = xxx.xxx.xxx.xxx (host name or ip of the MSSQL server)&lt;br /&gt;
      port = 1433&lt;br /&gt;
      client charset = UTF-8&lt;br /&gt;
      tds version = 8.0&lt;br /&gt;
      text size = 20971520&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want to connect to a particular [http://msdn.microsoft.com/en-us/library/aa174516(SQL.80).aspx instance] of MSSQL you should specify the instance name:&lt;br /&gt;
&lt;br /&gt;
  [global]&lt;br /&gt;
      host = xxx.xxx.xxx.xxx (host name or ip of the MSSQL server)&lt;br /&gt;
      instance = xxx (instance name, e.g. INST2)&lt;br /&gt;
      port = 1433&lt;br /&gt;
      client charset = UTF-8&lt;br /&gt;
      tds version = 8.0&lt;br /&gt;
      text size = 20971520&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
*You can configure FreeTDS to look for the freetds.conf file in any directory that you want - you don&#039;t have to use C:\. To do this create a SYSTEM environment variable called &#039;&#039;&#039;FREETDS&#039;&#039;&#039; and point it to the directory where you have installed the freetds.conf file. If you do not set this environment variable FreeTDS will look for the freetds.conf file in the C:\ folder, which is the default. One possible benefit of setting the FREETDS environment variable and using a different installation directory for freetds.conf is that C:\ is very predictable to a hacker that knows anything about FreeTDS and that is the first place that he would look if he wanted to compromise your system. So, using a different installation directory would just make your system stronger. See the FreeTDS [http://www.freetds.org/userguide/envvar.htm Setting the environment variables] documentation for more information about this FREETDS environment variable.&lt;br /&gt;
&lt;br /&gt;
*Alternatively, you can [[Development:Compiling FreeTDS under Windows|recompile]] the FreeTDS extension yourself and change the default location to your preferred location at compile time. Then it is not necessary to create any environment variable. You must just ensure that freetds.conf is in the same folder that you specify when you compile php_dblib.dll.&lt;br /&gt;
&lt;br /&gt;
*MSSQL is usually installed with port 1433 as the default. However, if the port was changed on your server when you installed MSSQL then you need to specify the correct port number.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5. Your Moodle &#039;&#039;&#039;config.php&#039;&#039;&#039; should include lines like these:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
$CFG-&amp;gt;dbtype    = &#039;mssql_n&#039;;        // Required&lt;br /&gt;
$CFG-&amp;gt;dbhost    = &#039;localhost&#039;;      // assuming MS SQL is on the same server, otherwise use an IP&lt;br /&gt;
$CFG-&amp;gt;dbname    = &#039;moodle&#039;;         // or whatever you called the database you created&lt;br /&gt;
$CFG-&amp;gt;dbuser    = &#039;yourusername&#039;;   // I usually use the &#039;sa&#039; account (dbowner perms are enough)&lt;br /&gt;
$CFG-&amp;gt;dbpass    = &#039;yourpassword&#039;;&lt;br /&gt;
$CFG-&amp;gt;dbpersist =  false;&lt;br /&gt;
$CFG-&amp;gt;prefix    = &#039;mdl_&#039;;            //Prefix, you can change it, but NEVER leave it blank.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t have a config.php file yet, it can be generated as normal from the Moodle installer. Alternatively you can use the config-dist.php file that comes with the Moodle package to create your own config.php file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6. Restart or start your web server.  If Moodle still cannot communicate with the database server, please turn display_startup_errors to &amp;quot;On&amp;quot; in your /PHP/php.ini file, then restart the web server and check for any errors that may indicate incorrect DLL versions or missing dependencies.  These error reports, turned off by default in PHP, can be vital in locating a problem with new extension installations.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
7. Database conection test, try this PHP script, just put in a text file called test.php change (&#039;localhost&#039;, &#039;db_user&#039;, &#039;db_password&#039;) to suite your setup, and load from local host (http://localhost/test.php)...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
	$link = mssql_connect(&#039;localhost&#039;, &#039;db_user&#039;, &#039;db_password&#039;);&lt;br /&gt;
	if(!$link) {&lt;br /&gt;
		echo&#039;Could not connect&#039;;&lt;br /&gt;
		die(&#039;Could not connect: &#039; . mssql_error());&lt;br /&gt;
	}&lt;br /&gt;
	echo&#039;Successful connection&#039;;&lt;br /&gt;
	mssql_close($link);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
8. Install Moodle as usual.  Good luck!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Troubleshooting ===&lt;br /&gt;
If you encounter some problems you can try:&lt;br /&gt;
*check that you have DotNet framework 1.1 installed (later version are installed on Vista, but you could need this specific one)&amp;lt;br /&amp;gt;&lt;br /&gt;
*enable TCP/IP for MSSQL: SQL Server 2005 Network Configuration -&amp;gt; Protocols for MSSQLSERVER -&amp;gt; TCP/IP (Enable) -&amp;gt; Properties -&amp;gt; Ip Addresses -&amp;gt; 127.0.0.1 (Active+Enable)&amp;lt;br /&amp;gt;&lt;br /&gt;
*if you are using SQL Server 2005 and you have the error &#039;&#039;4004: Unicode data in a Unicode-only collation or ntext data cannot be sent to clients using DB-Library (such as ISQL) or ODBC version 3.7 or earlier&#039;&#039;, try the ODBTP method (next chapter). The SQL Server complaining that it doesn&#039;t support pure Unicode via TDS or older versions of ODBC. Microsoft has deprecated DB-Library a long ago, in favor of ODBC, OLE DB, or SQL Native Client. Many new features of SQL 2005 aren&#039;t accessible via DB-Library so if you need them, you could have to switch away from tools based on TDS and DB-Library :(&lt;br /&gt;
&lt;br /&gt;
== FreeTDS on Linux (on Ubuntu by compiling an mssql.so extension) ==&lt;br /&gt;
This is a good read to [http://www.robert-gonzalez.com/2009/02/18/building-the-php-ms-sql-server-extension-from-source-on-ubuntu-810/ building a FreeTDS based mssql extension for apache on Ubuntu].&lt;br /&gt;
&lt;br /&gt;
Note: the freetds.conf file you use should have &amp;quot;text size = 20971520&amp;quot; as mentioned in the FreeTDS on Windows section otherwise you might see sessions logging out or worse apache segmentation faults. Also see [[FreeTDS]].&lt;br /&gt;
&lt;br /&gt;
== Using FreeTDS on Debian Lenny ==&lt;br /&gt;
I found the following solution using:&lt;br /&gt;
* PHP Version 5.2.6-1+lenny9&lt;br /&gt;
* Microsoft SQL Server Enterprise Edition, version: 9.00.4053.00&lt;br /&gt;
&amp;lt;pre&amp;gt;apt-get install libsybdb5 freetds-common php5-sybase&lt;br /&gt;
/etc/init.d/apache2 restart&amp;lt;/pre&amp;gt;&lt;br /&gt;
At the end of the process, if all goes fine, you will find in the mssql section of phpinfo();&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;nicetable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! MSSQL Support&lt;br /&gt;
! enabled&lt;br /&gt;
|-&lt;br /&gt;
| Library version &lt;br /&gt;
| FreeTDS &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Once FreeTDS is correctly installed, don not forget to set it up following explanations in https://docs.moodle.org/en/FreeTDS&lt;br /&gt;
&lt;br /&gt;
== Using ODBTP on Unix or Windows ==&lt;br /&gt;
&lt;br /&gt;
You can download ODBTP from http://odbtp.sourceforge.net/. Also you will access to the documentation from the same page.&lt;br /&gt;
&lt;br /&gt;
The downloaded package includes both the source code and some binaries to be installed in the server and some ready-to-use &#039;&#039;&#039;mssql extension alternatives&#039;&#039;&#039; for some platforms/PHP versions (so you won&#039;t need to compile it if your PHP server/version binary package is present).&lt;br /&gt;
&lt;br /&gt;
First of all, we have to install the Win32 service that comes with the package. Let&#039;s assume that it&#039;s going to run in the same Win32 machine where your MSSQL server is running (although it can run in any other Win32 server in your network).&lt;br /&gt;
&lt;br /&gt;
To do do, following the instructions present in http://odbtp.sourceforge.net/install.html, you must:&lt;br /&gt;
&lt;br /&gt;
Do the following on the MSSQL server:&lt;br /&gt;
# Create a directory on the Windows host where the service program files will reside, i.e., md odbtp.&lt;br /&gt;
# Copy the files odbtpctl.exe, odbtpsrv.exe and odbtpsrv.ini files from the winservice directory into the directory created in step 1.&lt;br /&gt;
# Edit the file odbtpsrv.ini of the previous step and this line: &amp;lt;pre&amp;gt;MaxRequestSize=20971520&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Open a command prompt (cmd) window on the Windows host.&lt;br /&gt;
# Change to the directory to which the service program files were copied, i.e., cd odbtp.&lt;br /&gt;
# Run the following commands to install and start the service:&lt;br /&gt;
#*   odbtpctl install&lt;br /&gt;
#*   odbtpctl start&lt;br /&gt;
# With these steps you should have one new service running in your host called &amp;quot;odbtp&amp;quot;. Verify it&#039;s present and running in the &amp;quot;Services&amp;quot; control panel.&lt;br /&gt;
# Don&#039;t forget to enable TCP/IP incoming connections to port 2799 in the host you have installed the service!&lt;br /&gt;
&lt;br /&gt;
Now it&#039;s time to build the &#039;&#039;&#039;mssql extension alternative&#039;&#039;&#039;. First of all, verify if, in the downloaded package, under the &amp;quot;php&amp;quot; dir, there is one extension suitable for your PHP server/version. If it&#039;s present, you can simply copy it to the php/extensions dir in your PHP server and skip next points about compiling it from source. It&#039;s important to point that, inside each directory, you&#039;ll find &#039;&#039;&#039;two different&#039;&#039;&#039; libraries/dll files. The one that must be copied to the extensions dir is the one called &#039;&#039;&#039;&amp;quot;php_odbtp_mssql.xxx&amp;quot;&#039;&#039;&#039;!&lt;br /&gt;
&lt;br /&gt;
If in the downloaded package isn&#039;t present the extension matching your PHP platform/version, you should build if from source files. To do that, just &#039;&#039;&#039;&amp;quot;configure, make, make install&amp;quot;&#039;&#039;&#039;. That will create some stuff under &amp;quot;/usr/local&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Now that you&#039;ve successfully built ODBTP is time to create the &#039;&#039;&#039;mssql extension alternative&#039;&#039;&#039; that will provide us with the capacity of handling MSSQL DBs from within Moodle. To do so, just configure your PHP server adding this new option to the usual ones:&lt;br /&gt;
&lt;br /&gt;
  --with-odbtp-mssql&lt;br /&gt;
&lt;br /&gt;
then, after the standard &amp;quot;make and make install&amp;quot; steps, your PHP server will be built with MSSQL support provided by ODBTP.&lt;br /&gt;
&lt;br /&gt;
Do the following on the moodle webserver:&lt;br /&gt;
Finally, independently if we are using the binary extension provided in the download or if you have built it from source files, it&#039;s time to configure the extension. &lt;br /&gt;
1. To do so, add this lines, if no present, to your php.ini file:&lt;br /&gt;
&lt;br /&gt;
  extension=php_odbtp_mssql.dll&lt;br /&gt;
&lt;br /&gt;
(only for Win32 PHP servers!)&lt;br /&gt;
&lt;br /&gt;
2. And, for all the server platforms: &lt;br /&gt;
&lt;br /&gt;
  [odbtp]&lt;br /&gt;
  odbtp.interface_file = &amp;quot;/path/to/your/odbtp.conf&amp;quot;&lt;br /&gt;
  odbtp.datetime_format = mdyhmsf&lt;br /&gt;
  odbtp.detach_default_queries = yes&lt;br /&gt;
&lt;br /&gt;
(where &#039;&#039;&amp;quot;/path/to/your/odbtp.conf&amp;quot;&#039;&#039; is usually &#039;&#039;&#039;&amp;quot;/usr/local/etc/odbtp.conf&amp;quot;&#039;&#039;&#039; for Unix systems and &#039;&#039;&#039;&amp;quot;C:\odbtp\odbtp.conf&amp;quot;&#039;&#039;&#039; for Windows systems)&lt;br /&gt;
&lt;br /&gt;
Then, edit such &amp;quot;odbtp.conf&amp;quot; file and put there these contents:&lt;br /&gt;
&lt;br /&gt;
  [global]&lt;br /&gt;
  odbtp host = xxx.xxx.xxx (ip or hostname of the Win32 box running the ODBTP service i.e MSSQL server)&lt;br /&gt;
  type = mssql&lt;br /&gt;
  unicode sql = yes&lt;br /&gt;
  use row cache = yes&lt;br /&gt;
  right trim text = yes&lt;br /&gt;
  var data size = 20971520&lt;br /&gt;
&lt;br /&gt;
With this, your PHP server will be able to connect with the MSSQL DB server using ODBTP. From here, just continue with the installation.&lt;br /&gt;
&lt;br /&gt;
Finally, if you find the ODBTP executables and &#039;&#039;&#039;mssql extension alternative&#039;&#039;&#039; in binary formats, it only will be necessary to install them in your server (binary packages...) without the need to recompile anything (just the php.ini and odbtp.conf edition steps above will be necessary). Of course, it will be really welcome to have all those binary alternatives documented here.&lt;br /&gt;
&lt;br /&gt;
Once ODBTP is working, Moodle config.php should include lines like these:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
$CFG-&amp;gt;dbtype    = &#039;mssql_n&#039;;        // Required&lt;br /&gt;
$CFG-&amp;gt;dbhost    = &#039;localhost&#039;;      // assuming MS SQL is on the same server, otherwise use an IP&lt;br /&gt;
$CFG-&amp;gt;dbname    = &#039;moodle&#039;;         // or whatever you called the database you created&lt;br /&gt;
$CFG-&amp;gt;dbuser    = &#039;yourusername&#039;;   // I usually use the &#039;sa&#039; account (dbowner perms are enough)&lt;br /&gt;
$CFG-&amp;gt;dbpass    = &#039;yourpassword&#039;;&lt;br /&gt;
$CFG-&amp;gt;dbpersist =  false;&lt;br /&gt;
$CFG-&amp;gt;prefix    = &#039;mdl_&#039;;            //Prefix, you can change it, but NEVER leave it blank.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t have a config.php file yet, it can be generated as normal from the Moodle installer.&lt;br /&gt;
&lt;br /&gt;
== Using ODBC on Windows ==&lt;br /&gt;
[[ODBC]] allows communication with an SQL database.&lt;br /&gt;
{{Not for production sites}}&lt;br /&gt;
&lt;br /&gt;
1. Go to the &#039;&#039;&#039;Administrative Tools&#039;&#039;&#039;  control panel, then the &#039;&#039;&#039;Data Sources (ODBC)&#039;&#039;&#039; panel.&lt;br /&gt;
&lt;br /&gt;
2. Configure one new System/User DSN (call it, for example &amp;quot;moodle&amp;quot;). Dont forget to enable these options if the driver asks for them:&lt;br /&gt;
&lt;br /&gt;
:* ANSI NULLS Enabled = true&lt;br /&gt;
:* Quoted Identifiers Enabled = true&lt;br /&gt;
&lt;br /&gt;
3. Your Moodle config.php should include lines like these:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
$CFG-&amp;gt;dbtype    = &#039;odbc_mssql&#039;;     // Note this is different to all the other configs on this page!&lt;br /&gt;
$CFG-&amp;gt;dbhost    = &#039;moodle&#039;;         // Where this matches the Data source name you chose above&lt;br /&gt;
$CFG-&amp;gt;dbname    = &#039;&#039;;               // Keep it blank!!&lt;br /&gt;
$CFG-&amp;gt;dbuser    = &#039;yourusername&#039;;   // I usually use the &#039;sa&#039; account (dbowner perms are enough)&lt;br /&gt;
$CFG-&amp;gt;dbpass    = &#039;yourpassword&#039;;&lt;br /&gt;
$CFG-&amp;gt;dbpersist =  false;&lt;br /&gt;
$CFG-&amp;gt;prefix    = &#039;mdl_&#039;;            //Prefix, you can change it, but NEVER leave it blank.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Install Moodle as usual.  Good luck!&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* [[Installing Moodle]]&lt;br /&gt;
* [[Errors FAQ]]&lt;br /&gt;
* Using Moodle [http://moodle.org/mod/forum/view.php?id=28 Installation problems forum]&lt;br /&gt;
* [[Beginning Administration FAQ]]&lt;br /&gt;
* [[Installing Oracle for PHP]]&lt;br /&gt;
&lt;br /&gt;
[[Category:FAQ]]&lt;br /&gt;
[[Category:Installation]]&lt;br /&gt;
[[Category:Developer]]&lt;br /&gt;
[[Category:XMLDB]]&lt;br /&gt;
[[Category:DB]]&lt;/div&gt;</summary>
		<author><name>Stronk7</name></author>
	</entry>
</feed>