manual.texi
上传用户:tsgydb
上传日期:2007-04-14
资源大小:10674k
文件大小:1883k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. Note that if you update the password in the @code{user} table directly using
  2. the first method, you must tell the server to re-read the grant tables (with
  3. @code{FLUSH PRIVILEGES}), because the change will go unnoticed otherwise.
  4. Once the @code{root} password has been set, thereafter you must supply that
  5. password when you connect to the server as @code{root}.
  6. You may wish to leave the @code{root} password blank so that you don't need
  7. to specify it while you perform additional setup or testing. However, be sure
  8. to set it before using your installation for any real production work.
  9. See the @code{scripts/mysql_install_db} script to see how it sets up
  10. the default privileges.  You can use this as a basis to see how to
  11. add other users.
  12. If you want the initial privileges to be different than those just described
  13. above, you can modify @code{mysql_install_db} before you run it.
  14. @cindex grant tables, re-creating
  15. @cindex re-creating, grant tables
  16. To re-create the grant tables completely, remove all the @file{.frm},
  17. @file{.MYI}, and @file{.MYD} files in the directory containing the
  18. @code{mysql} database.  (This is the directory named @file{mysql} under
  19. the database directory, which is listed when you run @code{mysqld
  20. --help}.) Then run the @code{mysql_install_db} script, possibly after
  21. editing it first to have the privileges you want.
  22. @strong{NOTE:} For @strong{MySQL} versions older than Version 3.22.10,
  23. you should NOT delete the @file{.frm} files.  If you accidentally do this,
  24. you should copy them back from your @strong{MySQL} distribution before
  25. running @code{mysql_install_db}.
  26. @cindex privileges, adding
  27. @cindex adding, new user privileges
  28. @cindex user privileges, adding
  29. @findex GRANT statement
  30. @findex statements, GRANT
  31. @node Adding users, Passwords, Default privileges, Privilege system
  32. @section Adding New User Privileges to MySQL
  33. You can add users two different ways: by using @code{GRANT} statements
  34. or by manipulating the @strong{MySQL} grant tables directly.  The
  35. preferred method is to use @code{GRANT} statements, because they are
  36. more concise and less error-prone.
  37. The examples below show how to use the @code{mysql} client to set up new
  38. users.  These examples assume that privileges are set up according to the
  39. defaults described in the previous section.  This means that to make changes,
  40. you must be on the same machine where @code{mysqld} is running, you must
  41. connect as the @strong{MySQL} @code{root} user, and the @code{root} user must
  42. have the @strong{insert} privilege for the @code{mysql} database and the
  43. @strong{reload} administrative privilege.  Also, if you have changed the
  44. @code{root} user password, you must specify it for the @code{mysql} commands
  45. below.
  46. You can add new users by issuing @code{GRANT} statements:
  47. @example
  48. shell> mysql --user=root mysql
  49. mysql> GRANT ALL PRIVILEGES ON *.* TO monty@@localhost
  50.            IDENTIFIED BY 'some_pass' WITH GRANT OPTION;
  51. mysql> GRANT ALL PRIVILEGES ON *.* TO monty@@"%"
  52.            IDENTIFIED BY 'some_pass' WITH GRANT OPTION;
  53. mysql> GRANT RELOAD,PROCESS ON *.* TO admin@@localhost;
  54. mysql> GRANT USAGE ON *.* TO dummy@@localhost;
  55. @end example
  56. These @code{GRANT} statements set up three new users:
  57. @table @code
  58. @item monty
  59. A full superuser who can connect to the server from anywhere, but who must
  60. use a password @code{'some_pass'} to do so.  Note that we must issue
  61. @code{GRANT} statements for both @code{monty@@localhost} and
  62. @code{monty@@"%"}.  If we don't add the entry with @code{localhost}, the
  63. anonymous user entry for @code{localhost} that is created by
  64. @code{mysql_install_db} will take precedence when we connect from the local
  65. host, because it has a more specific @code{Host} field value and thus comes
  66. earlier in the @code{user} table sort order.
  67. @item admin
  68. A user who can connect from @code{localhost} without a password and who is
  69. granted the @strong{reload} and @strong{process} administrative privileges.
  70. This allows the user to execute the @code{mysqladmin reload},
  71. @code{mysqladmin refresh}, and @code{mysqladmin flush-*} commands, as well as
  72. @code{mysqladmin processlist} .  No database-related privileges are granted.
  73. (They can be granted later by issuing additional @code{GRANT} statements.)
  74. @item dummy
  75. A user who can connect without a password, but only from the local host.  The
  76. global privileges are all set to @code{'N'} --- the @code{USAGE} privilege
  77. type allows you to create a user with no privileges.  It is assumed that you
  78. will grant database-specific privileges later.
  79. @end table
  80. @findex INSERT statement, grant privileges
  81. @findex statements, INSERT
  82. You can also add the same user access information directly by issuing
  83. @code{INSERT} statements and then telling the server to reload the grant
  84. tables:
  85. @example
  86. shell> mysql --user=root mysql
  87. mysql> INSERT INTO user VALUES('localhost','monty',PASSWORD('some_pass'),
  88.                 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y')
  89. mysql> INSERT INTO user VALUES('%','monty',PASSWORD('some_pass'),
  90.                 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y')
  91. mysql> INSERT INTO user SET Host='localhost',User='admin',
  92.                  Reload_priv='Y', Process_priv='Y';
  93. mysql> INSERT INTO user (Host,User,Password)
  94.                         VALUES('localhost','dummy','');
  95. mysql> FLUSH PRIVILEGES;
  96. @end example
  97. Depending on your @strong{MySQL} version, you may have to use a different
  98. number of @code{'Y'} values above (versions prior to Version 3.22.11 had fewer
  99. privilege columns).  For the @code{admin} user, the more readable extended
  100. @code{INSERT} syntax that is available starting with Version 3.22.11 is used.
  101. Note that to set up a superuser, you need only create a @code{user} table
  102. entry with the privilege fields set to @code{'Y'}.  No @code{db} or
  103. @code{host} table entries are necessary.
  104. The privilege columns in the @code{user} table were not set explicitly in the
  105. last @code{INSERT} statement (for the @code{dummy} user), so those columns
  106. are assigned the default value of @code{'N'}.  This is the same thing that
  107. @code{GRANT USAGE} does.
  108. The following example adds a user @code{custom} who can connect from hosts
  109. @code{localhost}, @code{server.domain}, and @code{whitehouse.gov}.  He wants
  110. to access the @code{bankaccount} database only from @code{localhost},
  111. the @code{expenses} database only from @code{whitehouse.gov}, and
  112. the @code{customer} database from all three hosts.  He wants
  113. to use the password @code{stupid} from all three hosts.
  114. To set up this user's privileges using @code{GRANT} statements, run these
  115. commands:
  116. @example
  117. shell> mysql --user=root mysql
  118. mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
  119.            ON bankaccount.*
  120.            TO custom@@localhost
  121.            IDENTIFIED BY 'stupid';
  122. mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
  123.            ON expenses.*
  124.            TO custom@@whitehouse.gov
  125.            IDENTIFIED BY 'stupid';
  126. mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
  127.            ON customer.*
  128.            TO custom@@'%'
  129.            IDENTIFIED BY 'stupid';
  130. @end example
  131. To set up the user's privileges by modifying the grant tables directly,
  132. run these commands (note the @code{FLUSH PRIVILEGES} at the end):
  133. @example
  134. shell> mysql --user=root mysql
  135. mysql> INSERT INTO user (Host,User,Password)
  136.        VALUES('localhost','custom',PASSWORD('stupid'));
  137. mysql> INSERT INTO user (Host,User,Password)
  138.        VALUES('server.domain','custom',PASSWORD('stupid'));
  139. mysql> INSERT INTO user (Host,User,Password)
  140.        VALUES('whitehouse.gov','custom',PASSWORD('stupid'));
  141. mysql> INSERT INTO db
  142.        (Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv,
  143.         Create_priv,Drop_priv)
  144.        VALUES
  145.        ('localhost','bankaccount','custom','Y','Y','Y','Y','Y','Y');
  146. mysql> INSERT INTO db
  147.        (Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv,
  148.         Create_priv,Drop_priv)
  149.        VALUES
  150.        ('whitehouse.gov','expenses','custom','Y','Y','Y','Y','Y','Y');
  151. mysql> INSERT INTO db
  152.        (Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv,
  153.         Create_priv,Drop_priv)
  154.        VALUES('%','customer','custom','Y','Y','Y','Y','Y','Y');
  155. mysql> FLUSH PRIVILEGES;
  156. @end example
  157. The first three @code{INSERT} statements add @code{user} table entries that
  158. allow user @code{custom} to connect from the various hosts with the given
  159. password, but grant no permissions to him (all privileges are set to the
  160. default value of @code{'N'}).  The next three @code{INSERT} statements add
  161. @code{db} table entries that grant privileges to @code{custom} for the
  162. @code{bankaccount}, @code{expenses}, and @code{customer} databases, but only
  163. when accessed from the proper hosts.  As usual, when the grant tables are
  164. modified directly, the server must be told to reload them (with
  165. @code{FLUSH PRIVILEGES}) so that the privilege changes take effect.
  166. If you want to give a specific user access from any machine in a given
  167. domain, you can issue a @code{GRANT} statement like the following:
  168. @example
  169. mysql> GRANT ...
  170.            ON *.*
  171.            TO myusername@@"%.mydomainname.com"
  172.            IDENTIFIED BY 'mypassword';
  173. @end example
  174. To do the same thing by modifying the grant tables directly, do this:
  175. @example
  176. mysql> INSERT INTO user VALUES ('%.mydomainname.com', 'myusername',
  177.            PASSWORD('mypassword'),...);
  178. mysql> FLUSH PRIVILEGES;
  179. @end example
  180. You can also use @code{xmysqladmin}, @code{mysql_webadmin}, and even
  181. @code{xmysql} to insert, change, and update values in the grant tables.
  182. You can find these utilities in the
  183. @uref{http://www.mysql.com/Downloads/Contrib/,Contrib directory of the @strong{MySQL}
  184. Website}.
  185. @cindex passwords, setting
  186. @findex PASSWORD()
  187. @findex SET PASSWORD statement
  188. @cindex setting, passwords
  189. @node Passwords, Access denied, Adding users, Privilege system
  190. @section Setting Up Passwords
  191. In most cases you should use @code{GRANT} to set up your users/passwords,
  192. so the following only applies for advanced users. @xref{GRANT, , @code{GRANT}}.
  193. The examples in the preceding sections illustrate an important principle:
  194. when you store a non-empty password using @code{INSERT} or @code{UPDATE}
  195. statements, you must use the @code{PASSWORD()} function to encrypt it.  This
  196. is because the @code{user} table stores passwords in encrypted form, not as
  197. plaintext.  If you forget that fact, you are likely to attempt to set
  198. passwords like this:
  199. @example
  200. shell> mysql -u root mysql
  201. mysql> INSERT INTO user (Host,User,Password)
  202.        VALUES('%','jeffrey','biscuit');
  203. mysql> FLUSH PRIVILEGES;
  204. @end example
  205. The result is that the plaintext value @code{'biscuit'} is stored as the
  206. password in the @code{user} table.  When the user @code{jeffrey} attempts to
  207. connect to the server using this password, the @code{mysql} client encrypts
  208. it with @code{PASSWORD()} and sends the result to the server.  The server
  209. compares the value in the @code{user} table (the encrypted value of
  210. @code{'biscuit'}) to the encrypted password (which is @emph{not}
  211. @code{'biscuit'}).  The comparison fails and the server rejects the
  212. connection:
  213. @example
  214. shell> mysql -u jeffrey -pbiscuit test
  215. Access denied
  216. @end example
  217. Passwords must be encrypted when they are inserted in the @code{user}
  218. table, so the @code{INSERT} statement should have been specified like this
  219. instead:
  220. @example
  221. mysql> INSERT INTO user (Host,User,Password)
  222.        VALUES('%','jeffrey',PASSWORD('biscuit'));
  223. @end example
  224. You must also use the @code{PASSWORD()} function when you use @code{SET
  225. PASSWORD} statements:
  226. @example
  227. mysql> SET PASSWORD FOR jeffrey@@"%" = PASSWORD('biscuit');
  228. @end example
  229. If you set passwords using the @code{GRANT ... IDENTIFIED BY} statement
  230. or the @code{mysqladmin password} command, the @code{PASSWORD()} function
  231. is unnecessary.  They both take care of encrypting the password for you,
  232. so you would specify a password of @code{'biscuit'} like this:
  233. @example
  234. mysql> GRANT USAGE ON *.* TO jeffrey@@"%" IDENTIFIED BY 'biscuit';
  235. @end example
  236. or
  237. @example
  238. shell> mysqladmin -u jeffrey password biscuit
  239. @end example
  240. @strong{NOTE:} @code{PASSWORD()} does not perform password encryption in the
  241. same way that Unix passwords are encrypted.  You should not assume that if
  242. your Unix password and your @strong{MySQL} password are the same, that
  243. @code{PASSWORD()} will result in the same encrypted value as is stored in the
  244. Unix password file. @xref{User names}.
  245. @node Access denied,  , Passwords, Privilege system
  246. @section Causes of @code{Access denied} Errors
  247. If you encounter @code{Access denied} errors when you try to connect to the
  248. @strong{MySQL} server, the list below indicates some courses of
  249. action you can take to correct the problem:
  250. @itemize @bullet
  251. @item
  252. After installing @strong{MySQL}, did you run the @code{mysql_install_db}
  253. script to set up the initial grant table contents?  If not, do so.
  254. @xref{Default privileges}.  Test the initial privileges by executing
  255. this command:
  256. @example
  257. shell> mysql -u root test
  258. @end example
  259. The server should let you connect without error.  You should also make sure
  260. you have a file @file{user.MYD} in the @strong{MySQL} database directory.
  261. Ordinarily, this is @file{PATH/var/mysql/user.MYD}, where @code{PATH} is the
  262. pathname to the @strong{MySQL} installation root.
  263. @item
  264. After a fresh installation, you should connect to the server and set up
  265. your users and their access permissions:
  266. @example
  267. shell> mysql -u root mysql
  268. @end example
  269. The server should let you connect because the @strong{MySQL} @code{root} user
  270. has no password initially.  That is also a security risk, so setting the
  271. @code{root} password is something you should do while you're setting up
  272. your other @strong{MySQL} users.
  273. If you try to connect as @code{root} and get this error:
  274. @example
  275. Access denied for user: '@@unknown' to database mysql
  276. @end example
  277. this means that you don't have an entry in the @code{user} table with a
  278. @code{User} column value of @code{'root'} and that @code{mysqld} cannot
  279. resolve the hostname for your client.  In this case, you must restart the
  280. server with the @code{--skip-grant-tables} option and edit your
  281. @file{/etc/hosts} or @file{windowshosts} file to add an entry for your
  282. host.
  283. @item
  284. If you get an error like the following:
  285. @example
  286. shell> mysqladmin -u root -pxxxx ver
  287. Access denied for user: 'root@@localhost' (Using password: YES)
  288. @end example
  289. It means that you are using a wrong password. @xref{Passwords}.
  290. If you have forgot the root password, you can restart @code{mysqld} with
  291. @code{--skip-grant-tables} to change the password. You can find more
  292. about this option later on in this manual section.
  293. If you get the above error even if you haven't specified a password,
  294. this means that you a wrong password in some @code{my.ini}
  295. file. @xref{Option files}.  You can avoid using option files with the @code{--no-defaults} option, as follows:
  296. @example
  297. shell> mysqladmin --no-defaults -u root ver
  298. @end example
  299. @item
  300. @cindex @code{mysql_fix_privilege_tables}
  301. If you updated an existing @strong{MySQL} installation from a version earlier
  302. than Version 3.22.11 to Version 3.22.11 or later, did you run the
  303. @code{mysql_fix_privilege_tables} script?  If not, do so.  The structure of
  304. the grant tables changed with @strong{MySQL} Version 3.22.11 when the
  305. @code{GRANT} statement became functional.
  306. @item
  307. If your privileges seem to have changed in the middle of a session, it may be
  308. that a superuser has changed them.  Reloading the grant tables affects new
  309. client connections, but it also affects existing connections as indicated in
  310. @ref{Privilege changes}.
  311. @item
  312. If you can't get your password to work, remember that you must use
  313. the @code{PASSWORD()} function if you set the password with the
  314. @code{INSERT}, @code{UPDATE}, or @code{SET PASSWORD} statements.  The
  315. @code{PASSWORD()} function is unnecessary if you specify the password using
  316. the @code{GRANT ... INDENTIFIED BY} statement or the @code{mysqladmin
  317. password} command.
  318. @xref{Passwords}.
  319. @item
  320. @code{localhost} is a synonym for your local hostname, and is also the
  321. default host to which clients try to connect if you specify no host
  322. explicitly.  However, connections to @code{localhost} do not work if you are
  323. running on a system that uses MIT-pthreads (@code{localhost} connections are
  324. made using Unix sockets, which are not supported by MIT-pthreads).  To avoid
  325. this problem on such systems, you should use the @code{--host} option to name
  326. the server host explicitly.  This will make a TCP/IP connection to the
  327. @code{mysqld} server.  In this case, you must have your real hostname in
  328. @code{user} table entries on the server host.  (This is true even if you are
  329. running a client program on the same host as the server.)
  330. @item
  331. If you get an @code{Access denied} error when trying to connect to the
  332. database with @code{mysql -u user_name db_name}, you may have a problem
  333. with the @code{user} table. Check this by executing @code{mysql -u root
  334. mysql} and issuing this SQL statement:
  335. @example
  336. mysql> SELECT * FROM user;
  337. @end example
  338. The result should include an entry with the @code{Host} and @code{User}
  339. columns matching your computer's hostname and your @strong{MySQL} user name.
  340. @item
  341. The @code{Access denied} error message will tell you who you are trying
  342. to log in as, the host from which you are trying to connect, and whether
  343. or not you were using a password. Normally, you should have one entry in
  344. the @code{user} table that exactly matches the hostname and user name
  345. that were given in the error message. For example if you get an error
  346. message that contains @code{Using password: NO}, this means that you
  347. tried to login without an password.
  348. @item
  349. If you get the following error when you try to connect from a different host
  350. than the one on which the @strong{MySQL} server is running, then there is no
  351. row in the @code{user} table that matches that host:
  352. @example
  353. Host ... is not allowed to connect to this MySQL server
  354. @end example
  355. You can fix this by using the command-line tool @code{mysql} (on the
  356. server host!) to add a row to the @code{user}, @code{db}, or @code{host}
  357. table for the user/hostname combination from which you are trying to
  358. connect and then execute @code{mysqladmin flush-privileges}.  If you are
  359. not running @strong{MySQL} Version 3.22 and you don't know the IP number or
  360. hostname of the machine from which you are connecting, you should put an
  361. entry with @code{'%'} as the @code{Host} column value in the @code{user}
  362. table and restart @code{mysqld} with the @code{--log} option on the
  363. server machine.  After trying to connect from the client machine, the
  364. information in the @strong{MySQL} log will indicate how you really did
  365. connect.  (Then replace the @code{'%'} in the @code{user} table entry
  366. with the actual hostname that shows up in the log.  Otherwise, you'll
  367. have a system that is insecure.)
  368. Another reason for this error on Linux is that you are using a binary
  369. @strong{MySQL} version that is compiled with a different glibc version
  370. than the one you are using.  In this case you should either upgrade your
  371. OS/glibc or download the source @strong{MySQL} version and compile this
  372. yourself.  A source RPM is normally trivial to compile and install, so
  373. this isn't a big problem.
  374. @item
  375. If you get an error message where the hostname is not shown or where the
  376. hostname is an IP, even if you try to connect with a hostname:
  377. @example
  378. shell> mysqladmin -u root -pxxxx -h some-hostname ver
  379. Access denied for user: 'root@' (Using password: YES)
  380. @end example
  381. This means that @strong{MySQL} got some error when trying to resolve the
  382. IP to a hostname.  In this case you can execute @code{mysqladmin
  383. flush-hosts} to reset the internal DNS cache. @xref{DNS}.
  384. Some permanent solutions are:
  385. @itemize @minus
  386. @item
  387. Try to find out what is wrong with your DNS server and fix this.
  388. @item
  389. Specify IPs instead of hostnames in the @strong{MySQL} privilege tables.
  390. @item
  391. Start mysqld with @code{--skip-name-resolve}.
  392. @item
  393. Start mysqld with @code{--skip-host-cache}.
  394. @item
  395. Connect to @code{localhost} if you are running the server and the client
  396. on the same machine.
  397. @item
  398. Put the client machine names in @code{/etc/hosts}.
  399. @end itemize
  400. @item
  401. If @code{mysql -u root test} works but @code{mysql -h your_hostname -u root
  402. test} results in @code{Access denied}, then you may not have the correct name
  403. for your host in the @code{user} table.  A common problem here is that the
  404. @code{Host} value in the user table entry specifies an unqualified hostname,
  405. but your system's name resolution routines return a fully qualified domain
  406. name (or vice-versa).  For example, if you have an entry with host
  407. @code{'tcx'} in the @code{user} table, but your DNS tells @strong{MySQL} that
  408. your hostname is @code{'tcx.subnet.se'}, the entry will not work. Try adding
  409. an entry to the @code{user} table that contains the IP number of your host as
  410. the @code{Host} column value.  (Alternatively, you could add an entry to the
  411. @code{user} table with a @code{Host} value that contains a wild card---for
  412. example, @code{'tcx.%'}.  However, use of hostnames ending with @samp{%} is
  413. @emph{insecure} and is @emph{not} recommended!)
  414. @item
  415. If @code{mysql -u user_name test} works but @code{mysql -u user_name
  416. other_db_name} doesn't work, you don't have an entry for @code{other_db_name}
  417. listed in the @code{db} table.
  418. @item
  419. If @code{mysql -u user_name db_name} works when executed on the server
  420. machine, but @code{mysql -u host_name -u user_name db_name} doesn't work when
  421. executed on another client machine, you don't have the client machine listed
  422. in the @code{user} table or the @code{db} table.
  423. @item
  424. If you can't figure out why you get @code{Access denied}, remove from the
  425. @code{user} table all entries that have @code{Host} values containing
  426. wild cards (entries that contain @samp{%} or @samp{_}).  A very common error
  427. is to insert a new entry with @code{Host}=@code{'%'} and
  428. @code{User}=@code{'some user'}, thinking that this will allow you to specify
  429. @code{localhost} to connect from the same machine.  The reason that this
  430. doesn't work is that the default privileges include an entry with
  431. @code{Host}=@code{'localhost'} and @code{User}=@code{''}.  Because that entry
  432. has a @code{Host} value @code{'localhost'} that is more specific than
  433. @code{'%'}, it is used in preference to the new entry when connecting from
  434. @code{localhost}!  The correct procedure is to insert a second entry with
  435. @code{Host}=@code{'localhost'} and @code{User}=@code{'some_user'}, or to
  436. remove the entry with @code{Host}=@code{'localhost'} and
  437. @code{User}=@code{''}.
  438. @item
  439. If you get the following error, you may have a problem with the @code{db} or
  440. @code{host} table:
  441. @example
  442. Access to database denied
  443. @end example
  444. If the entry selected from the @code{db} table has an empty value in the
  445. @code{Host} column, make sure there are one or more corresponding entries in
  446. the @code{host} table specifying which hosts the @code{db} table entry
  447. applies to.
  448. If you get the error when using the SQL commands @code{SELECT ...
  449. INTO OUTFILE} or @code{LOAD DATA INFILE}, your entry in the @code{user} table
  450. probably doesn't have the @strong{file} privilege enabled.
  451. @item
  452. @cindex configuration files
  453. @cindex environment variables
  454. @tindex .my.cnf file
  455. Remember that client programs will use connection parameters specified
  456. in configuration files or environment variables.  @xref{Environment
  457. variables}.  If a client seems to be sending the wrong default
  458. connection parameters when you don't specify them on the command line,
  459. check your environment and the @file{.my.cnf} file in your home
  460. directory.  You might also check the system-wide @strong{MySQL}
  461. configuration files, though it is far less likely that client connection
  462. parameters will be specified there. @xref{Option files}.  If you get
  463. @code{Access denied} when you run a client without any options, make
  464. sure you haven't specified an old password in any of your option files!
  465. @xref{Option files}.
  466. @item
  467. If you make changes to the grant tables directly (using an @code{INSERT} or
  468. @code{UPDATE} statement) and your changes seem to be ignored, remember
  469. that you must issue a @code{FLUSH PRIVILEGES} statement or execute a
  470. @code{mysqladmin flush-privileges} command to cause the server to re-read
  471. the privilege tables.  Otherwise your changes have no effect until the
  472. next time the server is restarted.  Remember that after you set the
  473. @code{root} password with an @code{UPDATE} command, you won't need to
  474. specify it until after you flush the privileges, because the server
  475. won't know you've changed the password yet!
  476. @item
  477. If you have access problems with a Perl, PHP, Python, or ODBC program, try to
  478. connect to the server with @code{mysql -u user_name db_name} or @code{mysql
  479. -u user_name -pyour_pass db_name}.  If you are able to connect using the
  480. @code{mysql} client, there is a problem with your program and not with the
  481. access privileges.  (Note that there is no space between @code{-p} and the
  482. password; you can also use the @code{--password=your_pass} syntax to specify
  483. the password. If you use the @code{-p} option alone, MySQL will prompt you
  484. for the password.)
  485. @item
  486. For testing, start the @code{mysqld} daemon with the
  487. @code{--skip-grant-tables} option.  Then you can change the @strong{MySQL}
  488. grant tables and use the @code{mysqlaccess} script to check whether or not
  489. your modifications have the desired effect.  When you are satisfied with your
  490. changes, execute @code{mysqladmin flush-privileges} to tell the @code{mysqld}
  491. server to start using the new grant tables.  @strong{Note:} Reloading the
  492. grant tables overrides the @code{--skip-grant-tables} option.  This allows
  493. you to tell the server to begin using the grant tables again without bringing
  494. it down and restarting it.
  495. @item
  496. If everything else fails, start the @code{mysqld} daemon with a debugging
  497. option (for example, @code{--debug=d,general,query}). This will print host and
  498. user information about attempted connections, as well as information about
  499. each command issued. @xref{Debugging server}.
  500. @item
  501. If you have any other problems with the @strong{MySQL} grant tables and
  502. feel you must post the problem to the mailing list, always provide a
  503. dump of the @strong{MySQL} grant tables. You can dump the tables with
  504. the @code{mysqldump mysql} command. As always, post your problem using
  505. the @code{mysqlbug} script.  @xref{Bug reports}.  In some cases you may need
  506. to restart @code{mysqld} with @code{--skip-grant-tables} to run
  507. @code{mysqldump}.
  508. @end itemize
  509. @node Reference, Table types, Privilege system, Top
  510. @chapter MySQL Language Reference
  511. @menu
  512. * Literals::                    Literals: how to write strings and numbers
  513. * Variables::                   User variables
  514. * Column types::                Column types
  515. * Functions::                   Functions
  516. * CREATE DATABASE::             @code{CREATE DATABASE} syntax
  517. * DROP DATABASE::               @code{DROP DATABASE} syntax
  518. * CREATE TABLE::                @code{CREATE TABLE} syntax
  519. * ALTER TABLE::                 @code{ALTER TABLE} syntax
  520. * RENAME TABLE::                @code{RENAME TABLE} syntax
  521. * DROP TABLE::                  @code{DROP TABLE} syntax
  522. * OPTIMIZE TABLE::              @code{OPTIMIZE TABLE} syntax
  523. * CHECK TABLE::                 @code{CHECK TABLE} syntax
  524. * BACKUP TABLE::                @code{BACKUP TABLE} syntax
  525. * RESTORE TABLE::               @code{RESTORE TABLE} syntax
  526. * ANALYZE TABLE::               @code{ANALYZE TABLE} syntax
  527. * REPAIR TABLE::                @code{REPAIR TABLE} syntax
  528. * DELETE::                      @code{DELETE} syntax
  529. * TRUNCATE::                    @code{TRUNCATE} syntax
  530. * SELECT::                      @code{SELECT} syntax
  531. * JOIN::                        @code{JOIN} syntax
  532. * INSERT::                      @code{INSERT} syntax
  533. * REPLACE::                     @code{REPLACE} syntax
  534. * LOAD DATA::                   @code{LOAD DATA INFILE} syntax
  535. * UPDATE::                      @code{UPDATE} syntax
  536. * USE::                         @code{USE} syntax
  537. * FLUSH::                       @code{Flush} syntax (clearing caches)
  538. * KILL::                        @code{KILL} syntax
  539. * SHOW::                        @code{SHOW} syntax (Get information about tables, columns, ...)
  540. * EXPLAIN::                     @code{EXPLAIN} syntax (Get information about a @code{SELECT})
  541. * DESCRIBE::                    @code{DESCRIBE} syntax (Get information about names of columns)
  542. * COMMIT::                      @code{BEGIN/COMMIT/ROLLBACK} syntax
  543. * LOCK TABLES::                 @code{LOCK TABLES/UNLOCK TABLES} syntax
  544. * SET OPTION::                  @code{SET OPTION} syntax
  545. * GRANT::                       @code{GRANT} and @code{REVOKE} syntax
  546. * CREATE INDEX::                @code{CREATE INDEX} syntax
  547. * DROP INDEX::                  @code{DROP INDEX} syntax
  548. * Comments::                    Comment syntax
  549. * CREATE FUNCTION::             @code{CREATE FUNCTION} syntax
  550. * Reserved words::              Is @strong{MySQL} picky about reserved words?
  551. @end menu
  552. @cindex strings, defined
  553. @cindex strings, escaping characters
  554. @cindex literals
  555. @cindex escape characters
  556. @cindex backslash, escape character
  557. @node Literals, Variables, Reference, Reference
  558. @section Literals: How to Write Strings and Numbers
  559. @menu
  560. * String syntax::               Strings
  561. * Number syntax::               Numbers
  562. * Hexadecimal values::          Hexadecimal values
  563. * NULL values::                 @code{NULL} values
  564. * Legal names::                 Database, table, index, column and alias names
  565. @end menu
  566. @node String syntax, Number syntax, Literals, Literals
  567. @subsection Strings
  568. A string is a sequence of characters, surrounded by either single quote
  569. (@samp{'}) or double quote (@samp{"}) characters (only the single quote
  570. if you run in ANSI mode).  Examples:
  571. @example
  572. 'a string'
  573. "another string"
  574. @end example
  575. Within a string, certain sequences have special meaning.  Each of these
  576. sequences begins with a backslash (@samp{}), known as the @emph{escape
  577. character}.  @strong{MySQL} recognizes the following escape sequences:
  578. @c these aren't really functions, but that's probably the most reasonable index
  579. @table @code
  580. @findex  (ASCII 0)
  581. @findex NUL
  582. @item 
  583. An ASCII 0 (@code{NUL}) character.
  584. @findex n (newline)
  585. @findex newline (n)
  586. @item n
  587. A newline character.
  588. @findex t (tab)
  589. @findex tab (t)
  590. @item t
  591. A tab character.
  592. @findex r (carriage return)
  593. @findex return (r)
  594. @findex carriage return (r)
  595. @item r
  596. A carriage return character.
  597. @findex b (backspace)
  598. @findex backspace (b)
  599. @item b
  600. A backspace character.
  601. @findex ' (single quote)
  602. @findex single quote (')
  603. @item '
  604. A single quote (@samp{'}) character.
  605. @findex " (double quote)
  606. @findex double quote (")
  607. @item "
  608. A double quote (@samp{"}) character.
  609. @findex \ (escape)
  610. @findex escape (\)
  611. @item \
  612. A backslash (@samp{}) character.
  613. @findex % (wild card character)
  614. @findex Wild card character (%)
  615. @item %
  616. A @samp{%} character. This is used to search for literal instances of
  617. @samp{%} in contexts where @samp{%} would otherwise be interpreted
  618. as a wild-card character. @xref{String comparison functions}.
  619. @findex _ (wild card character)
  620. @findex Wild card character (_)
  621. @item _
  622. A @samp{_} character. This is used to search for literal instances of
  623. @samp{_} in contexts where @samp{_} would otherwise be interpreted
  624. as a wild-card character. @xref{String comparison functions}.
  625. @end table
  626. Note that if you use @samp{%} or @samp{_} in some string contexts, these
  627. will return the strings @samp{%} and @samp{_} and not @samp{%} and
  628. @samp{_}.
  629. @cindex quotes, in strings
  630. @noindent
  631. There are several ways to include quotes within a string:
  632. @itemize @bullet
  633. @item
  634. A @samp{'} inside a string quoted with @samp{'} may be written as @samp{''}.
  635. @item
  636. A @samp{"} inside a string quoted with @samp{"} may be written as @samp{""}.
  637. @item
  638. You can precede the quote character with an escape character (@samp{}).
  639. @item
  640. A @samp{'} inside a string quoted with @samp{"} needs no special treatment
  641. and need not be doubled or escaped.  In the same way, @samp{"} inside a
  642. string quoted with @samp{'} needs no special treatment.
  643. @end itemize
  644. The @code{SELECT} statements shown below demonstrate how quoting and
  645. escaping work:
  646. @example
  647. mysql> SELECT 'hello', '"hello"', '""hello""', 'hel''lo', ''hello';
  648. +-------+---------+-----------+--------+--------+
  649. | hello | "hello" | ""hello"" | hel'lo | 'hello |
  650. +-------+---------+-----------+--------+--------+
  651. mysql> SELECT "hello", "'hello'", "''hello''", "hel""lo", ""hello";
  652. +-------+---------+-----------+--------+--------+
  653. | hello | 'hello' | ''hello'' | hel"lo | "hello |
  654. +-------+---------+-----------+--------+--------+
  655. mysql> SELECT "ThisnIsnFournlines";
  656. +--------------------+
  657. | This
  658. Is
  659. Four
  660. lines |
  661. +--------------------+
  662. @end example
  663. @cindex quoting binary data
  664. If you want to insert binary data into a @code{BLOB} column, the following
  665. characters must be represented by escape sequences:
  666. @table @code
  667. @item NUL
  668. ASCII 0. You should represent this by @samp{} (a backslash and an ASCII @samp{0} character).
  669. @item 
  670. ASCII 92, backslash.  Represent this by @samp{\}.
  671. @item '
  672. ASCII 39, single quote.  Represent this by @samp{'}.
  673. @item "
  674. ASCII 34, double quote.  Represent this by @samp{"}.
  675. @end table
  676. @cindex quoting
  677. @cindex @code{BLOB}, inserting binary data
  678. @findex mysql_escape_string()
  679. @findex DBI->quote
  680. If you write C code, you can use the C API function
  681. @code{mysql_escape_string()} to escape characters for the @code{INSERT}
  682. statement.  @xref{C API function overview}.  In Perl, you can use the
  683. @code{quote} method of the @code{DBI} package to convert special
  684. characters to the proper escape sequences.  @xref{Perl DBI Class, , Perl
  685. @code{DBI} Class}.
  686. You should use an escape function on any string that might contain any of the
  687. special characters listed above!
  688. @cindex numbers
  689. @cindex valid numbers, examples
  690. @cindex integers
  691. @cindex floats
  692. @cindex negative values
  693. @node Number syntax, Hexadecimal values, String syntax, Literals
  694. @subsection Numbers
  695. Integers are represented as a sequence of digits. Floats use @samp{.} as a
  696. decimal separator.  Either type of number may be preceded by @samp{-} to
  697. indicate a negative value.
  698. Examples of valid integers:
  699. @example
  700. 1221
  701. 0
  702. -32
  703. @end example
  704. Examples of valid floating-point numbers:
  705. @example
  706. 294.42
  707. -32032.6809e+10
  708. 148.00
  709. @end example
  710. An integer may be used in a floating-point context; it is interpreted
  711. as the equivalent floating-point number.
  712. @tindex hexadecimal values
  713. @node Hexadecimal values, NULL values, Number syntax, Literals
  714. @subsection Hexadecimal Values
  715. @strong{MySQL} supports hexadecimal values.  In number context these act
  716. like an integer (64-bit precision). In string context these act like a binary
  717. string where each pair of hex digits is converted to a character:
  718. @example
  719. mysql> SELECT 0xa+0
  720.        -> 10
  721. mysql> select 0x5061756c;
  722.        -> Paul
  723. @end example
  724. Hexadecimal strings are often used by ODBC to give values for BLOB columns.
  725. @tindex NULL value
  726. @node NULL values, Legal names, Hexadecimal values, Literals
  727. @subsection @code{NULL} Values
  728. The @code{NULL} value means ``no data'' and is different from values such
  729. as @code{0} for numeric types or the empty string for string types.
  730. @xref{Problems with NULL, , Problems with @code{NULL}}.
  731. @code{NULL} may be represented by @code{N} when using the text file import
  732. or export formats (@code{LOAD DATA INFILE}, @code{SELECT ... INTO OUTFILE}).
  733. @xref{LOAD DATA, , @code{LOAD DATA}}.
  734. @cindex names
  735. @cindex legal names
  736. @cindex databases, names
  737. @cindex tables, names
  738. @cindex indexes, names
  739. @cindex columns, names
  740. @cindex aliases, names
  741. @node Legal names,  , NULL values, Literals
  742. @subsection Database, Table, Index, Column, and Alias Names
  743. @menu
  744. * Name case sensitivity::       Case sensitivity in names
  745. @end menu
  746. Database, table, index, column, and alias names all follow the same rules in
  747. @strong{MySQL}.
  748. @tindex identifiers, quoting
  749. @tindex quoting of identifiers
  750. @tindex `
  751. @tindex "
  752. Note that the rules changed starting with @strong{MySQL} Version 3.23.6 when we
  753. introduced quoting of identifiers (database, table, and column names)
  754. with @samp{`}. @samp{"} will also work to quote identifiers if you run
  755. in ANSI mode. @xref{ANSI mode}.
  756. @multitable @columnfractions .15 .15 .70
  757. @item @strong{Identifier} @tab @strong{Max length} @tab @strong{Allowed characters}
  758. @item Database @tab 64 @tab Any character that is allowed in a directory name except @samp{/}.
  759. @item Table @tab 64 @tab Any character that is allowed in a file name, except @samp{/} or @samp{.}.
  760. @item Column @tab 64 @tab All characters.
  761. @item Alias @tab 255 @tab All characters.
  762. @end multitable
  763. Note that in addition to the above, you can't have ASCII(0) or ASCII(255) or
  764. the quoting character in an identifier.
  765. Note that if the identifer is a restricted word or contains special characters
  766. you must always quote it with @code{`} when you use it:
  767. @example
  768. SELECT * from `select` where `select`.id > 100;
  769. @end example
  770. In previous versions of @strong{MySQL}, the name rules are as follows:
  771. @itemize @bullet
  772. @item
  773. A name may consist of alphanumeric characters from the current character set
  774. and also @samp{_} and @samp{$}. The default character set is ISO-8859-1
  775. Latin1; this may be changed with the @code{--default-character-set} option
  776. to @code{mysqld}.
  777. @xref{Character sets}.
  778. @item
  779. A name may start with any character that is legal in a name.  In particular,
  780. a name may start with a number (this differs from many other database
  781. systems!).  However, a name cannot consist @emph{only} of numbers.
  782. @item
  783. You cannot use the @samp{.} character in names because it is used to extend the
  784. format by which you can refer to columns (see immediately below).
  785. @end itemize
  786. It is recommended that you do not use names like @code{1e}, because
  787. an expression like @code{1e+1} is ambiguous. It may be interpreted as the
  788. expression @code{1e + 1} or as the number @code{1e+1}.
  789. In @strong{MySQL} you can refer to a column using any of the following forms:
  790. @multitable @columnfractions .35 .65
  791. @item @strong{Column reference} @tab @strong{Meaning}
  792. @item @code{col_name} @tab Column @code{col_name}
  793. from whichever table used in the query contains a column of that name.
  794. @item @code{tbl_name.col_name} @tab Column @code{col_name} from table
  795. @code{tbl_name} of the current database.
  796. @item @code{db_name.tbl_name.col_name} @tab Column @code{col_name} from table
  797. @code{tbl_name} of the database @code{db_name}.  This form is available in
  798. @strong{MySQL} Version 3.22 or later.
  799. @item
  800. @code{`column_name`} @tab A column that is a keyword or contains special characters.
  801. @end multitable
  802. You need not specify a @code{tbl_name} or @code{db_name.tbl_name} prefix for
  803. a column reference in a statement unless the reference would be ambiguous.
  804. For example, suppose tables @code{t1} and @code{t2} each contain a column
  805. @code{c}, and you retrieve @code{c} in a @code{SELECT} statement that uses
  806. both @code{t1} and @code{t2}.  In this case, @code{c} is ambiguous because it
  807. is not unique among the tables used in the statement, so you must indicate
  808. which table you mean by writing @code{t1.c} or @code{t2.c}.  Similarly, if
  809. you are retrieving from a table @code{t} in database @code{db1} and from a
  810. table @code{t} in database @code{db2}, you must refer to columns in those
  811. tables as @code{db1.t.col_name} and @code{db2.t.col_name}.
  812. @cindex ODBC compatibility
  813. @cindex compatibility, with ODBC
  814. The syntax @code{.tbl_name} means the table @code{tbl_name} in the current
  815. database.  This syntax is accepted for ODBC compatibility, because some ODBC
  816. programs prefix table names with a @samp{.} character.
  817. @cindex names, case-sensitivity
  818. @cindex case-sensitivity, in names
  819. @node Name case sensitivity,  , Legal names, Legal names
  820. @subsubsection Case Sensitivity in Names
  821. @cindex database names, case sensitivity
  822. @cindex table names, case sensitivity
  823. @cindex column names, case sensitivity
  824. @cindex alias names, case sensitivity
  825. In @strong{MySQL}, databases and tables correspond to directories and files
  826. within those directories.  Consequently, the case sensitivity of the
  827. underlying operating system determines the case sensitivity of database and
  828. table names.  This means database and table names are case sensitive in Unix
  829. and case insensitive in Windows. @xref{Extensions to ANSI}.
  830. @strong{NOTE:} Although database and table names are case insensitive for
  831. Windows, you should not refer to a given database or table using different
  832. cases within the same query.  The following query would not work because it
  833. refers to a table both as @code{my_table} and as @code{MY_TABLE}:
  834. @example
  835. mysql> SELECT * FROM my_table WHERE MY_TABLE.col=1;
  836. @end example
  837. Column names are case insensitive in all cases.
  838. Aliases on tables are case sensitive.  The following query would not work
  839. because it refers to the alias both as @code{a} and as @code{A}:
  840. @example
  841. mysql> SELECT col_name FROM tbl_name AS a
  842.            WHERE a.col_name = 1 OR A.col_name = 2;
  843. @end example
  844. Aliases on columns are case insensitive.
  845. If you have a problem remembering the used cases for a table names,
  846. adopt a consistent convention, such as always creating databases and
  847. tables using lowercase names.
  848. One way to avoid this problem is to start @code{mysqld} with @code{-O
  849. lower_case_table_names=1}. 
  850. In this case @strong{MySQL} will on Windows/NT convert all table names
  851. to lower case on storage and lookup.  Note that you need to first
  852. convert your old table names to lower case before starting @code{mysqld}
  853. with this option.
  854. @cindex variables, user
  855. @cindex user variables
  856. @cindex names, variables
  857. @node Variables, Column types, Literals, Reference
  858. @section User Variables
  859. @strong{MySQL} supports thread-specific variables with the
  860. @code{@@variablename} syntax.  A variable name may consist of
  861. alphanumeric characters from the current character set and also
  862. @samp{_}, @samp{$}, and @samp{.} . The default character set is
  863. ISO-8859-1 Latin1; this may be changed with the
  864. @code{--default-character-set} option to @code{mysqld}. @xref{Character
  865. sets}.
  866. Variables don't have to be initialized.  They contain @code{NULL} by default
  867. and can store an integer, real, or string value.  All variables for
  868. a thread are automatically freed when the thread exits.
  869. You can set a variable with the @code{SET} syntax:
  870. @example
  871. SET @@variable= @{ integer expression | real expression | string expression @}
  872. [,@@variable= ...].
  873. @end example
  874. You can also set a variable in an expression with the @code{@@variable:=expr}
  875. syntax:
  876. @example
  877. select @@t1:=(@@t2:=1)+@@t3:=4,@@t1,@@t2,@@t3;
  878. +----------------------+------+------+------+
  879. | @@t1:=(@@t2:=1)+@@t3:=4 | @@t1  | @@t2  | @@t3  |
  880. +----------------------+------+------+------+
  881. |                    5 |    5 |    1 |    4 |
  882. +----------------------+------+------+------+
  883. @end example
  884. (We had to use the @code{:=} syntax here, because @code{=} was reserved for
  885. comparisons.)
  886. User variables may be used where expressions are allowed.  Note that
  887. this does not currently include use in contexts where a number is explicitly
  888. required, such as in the @code{LIMIT} clause of a @code{SELECT} statement,
  889. or the @code{IGNORE number LINES} clause of a @code{LOAD DATA} statement.
  890. @strong{NOTE:}  In a @code{SELECT} statement, each expression is only
  891. evaluated when it's sent to the client.  This means that in the @code{HAVING},
  892. @code{GROUP BY}, or @code{ORDER BY} clause, you can't refer to an expression
  893. that involves variables that are set in the @code{SELECT} part. For example,
  894. the following statement will NOT work as expected:
  895. @example
  896. SELECT (@@aa:=id) AS a, (@@aa+3) AS b FROM table_name HAVING b=5;
  897. @end example
  898. The reason is that @code{@@aa} will not contain the value of the current
  899. row, but the value of @code{id} for the previous accepted row.
  900. @cindex columns, types
  901. @cindex types, columns
  902. @node Column types, Functions, Variables, Reference
  903. @section Column Types
  904. @strong{MySQL} supports a number of column types, which may be grouped into
  905. three categories: numeric types, date and time types, and string (character)
  906. types.  This section first gives an overview of the types available and
  907. summarizes the storage requirements for each column type, then provides a
  908. more detailed description of the properties of the types in each category.
  909. The overview is intentionally brief.  The more detailed descriptions should
  910. be consulted for additional information about particular column types, such
  911. as the allowable formats in which you can specify values.
  912. The column types supported by @strong{MySQL} are listed below.
  913. The following code letters are used in the descriptions:
  914. @cindex display size
  915. @cindex sizes, display
  916. @cindex digits
  917. @cindex decimal point
  918. @cindex brackets, square
  919. @cindex square brackets
  920. @table @code
  921. @item M
  922. Indicates the maximum display size.  The maximum legal display size is 255.
  923. @item D
  924. Applies to floating-point types and indicates the number of digits
  925. following the decimal point.  The maximum possible value is 30, but
  926. should be no greater than @code{M}-2.
  927. @end table
  928. Square brackets (@samp{[} and @samp{]}) indicate parts of type specifiers
  929. that are optional.
  930. @tindex Types
  931. @c The @w{-number} stuff keeps a linebreak from occurring between
  932. @c the - and number.
  933. Note that if you specify @code{ZEROFILL} for a column, @strong{MySQL} will
  934. automatically add the @code{UNSIGNED} attribute to the column.
  935. @table @code
  936. @tindex TINYINT
  937. @item TINYINT[(M)] [UNSIGNED] [ZEROFILL]
  938. A very small integer. The signed range is @code{-128} to @code{127}. The
  939. unsigned range is @code{0} to @code{255}.
  940. @tindex SMALLINT
  941. @item SMALLINT[(M)] [UNSIGNED] [ZEROFILL]
  942. A small integer. The signed range is @code{-32768} to @code{32767}. The
  943. unsigned range is @code{0} to @code{65535}.
  944. @tindex MEDIUMINT
  945. @item MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL]
  946. A medium-size integer. The signed range is @code{-8388608} to
  947. @code{8388607}. The unsigned range is @code{0} to @code{16777215}.
  948. @tindex INT
  949. @item INT[(M)] [UNSIGNED] [ZEROFILL]
  950. A normal-size integer. The signed range is @code{-2147483648} to
  951. @code{2147483647}.  The unsigned range is @code{0} to @code{4294967295}.
  952. @tindex INTEGER
  953. @item INTEGER[(M)] [UNSIGNED] [ZEROFILL]
  954. This is a synonym for @code{INT}.
  955. @tindex BIGINT
  956. @item BIGINT[(M)] [UNSIGNED] [ZEROFILL]
  957. A large integer. The signed range is @code{-9223372036854775808} to
  958. @code{9223372036854775807}. The unsigned range is @code{0} to
  959. @code{18446744073709551615}.
  960. Some things you should be aware about @code{BIGINT} columns:
  961. @itemize @bullet
  962. @item
  963. @cindex rounding errors
  964. As all arithmetic is done using signed @code{BIGINT} or @code{DOUBLE}
  965. values, so you shouldn't use unsigned big integers larger than
  966. @code{9223372036854775807} (63 bits) except with bit functions! If you
  967. do that, some of the last digits in the result may be wrong because of
  968. rounding errors when converting the @code{BIGINT} to a @code{DOUBLE}.
  969. @item
  970. You can always store an exact integer value in a @code{BIGINT} column by
  971. storing it as a string, as there is in this case there will be no
  972. intermediate double representation.
  973. @item
  974. @samp{-}, @samp{+}, and @samp{*} will use @code{BIGINT} arithmetic when
  975. both arguments are @code{INTEGER} values!  This means that if you
  976. multiply two big integers (or results from functions that return
  977. integers) you may get unexpected results when the result is larger than
  978. @code{9223372036854775807}.
  979. @end itemize
  980. @cindex floating-point number
  981. @tindex FLOAT
  982. @tindex FLOAT(precision)
  983. @item FLOAT(precision) [ZEROFILL]
  984. A floating-point number. Cannot be unsigned.  @code{precision} can be
  985. @code{<=24} for a single-precision floating-point number and between 25
  986. and 53 for a double-precision floating-point number. These types are like
  987. the @code{FLOAT} and @code{DOUBLE} types described immediately below.
  988. @code{FLOAT(X)} has the same range as the corresponding @code{FLOAT} and
  989. @code{DOUBLE} types, but the display size and number of decimals is undefined.
  990. In @strong{MySQL} Version 3.23, this is a true floating-point value.  In
  991. earlier @strong{MySQL} versions, @code{FLOAT(precision)} always has 2 decimals.
  992. Note that using @code{FLOAT} may give you some unexpected problems as
  993. all calculation in @strong{MySQL} is done with double precision.
  994. @xref{No matching rows}.
  995. @cindex ODBC compatibility
  996. @cindex compatibility, with ODBC
  997. This syntax is provided for ODBC compatibility.
  998. @tindex FLOAT
  999. @tindex FLOAT(M,D)
  1000. @item FLOAT[(M,D)] [ZEROFILL]
  1001. A small (single-precision) floating-point number. Cannot be unsigned.
  1002. Allowable values are @code{@w{-3.402823466E+38}} to
  1003. @code{@w{-1.175494351E-38}}, @code{0}, and @code{@w{1.175494351E-38}} to
  1004. @code{3.402823466E+38}.  The M is the display width and D is the
  1005. number of decimals.  @code{FLOAT} without an argument or with an argument of
  1006. <= 24 stands for a single-precision floating-point number.
  1007. @tindex DOUBLE
  1008. @tindex FLOAT(precision)
  1009. @item DOUBLE[(M,D)] [ZEROFILL]
  1010. A normal-size (double-precision) floating-point number. Cannot be
  1011. unsigned. Allowable values are @code{@w{-1.7976931348623157E+308}} to
  1012. @code{@w{-2.2250738585072014E-308}}, @code{0}, and
  1013. @code{2.2250738585072014E-308} to @code{1.7976931348623157E+308}.  The M
  1014. is the display width and D is the number of decimals.  @code{DOUBLE}
  1015. without an argument or @code{FLOAT(X)} where 25 <= X <= 53 stands for a
  1016. double-precision floating-point number.
  1017. @tindex DOUBLE PRECISION
  1018. @tindex REAL
  1019. @item DOUBLE PRECISION[(M,D)] [ZEROFILL]
  1020. @itemx REAL[(M,D)] [ZEROFILL]
  1021. These are synonyms for @code{DOUBLE}.
  1022. @tindex DECIMAL
  1023. @item DECIMAL[(M[,D])] [ZEROFILL]
  1024. An unpacked floating-point number.  Cannot be unsigned.  Behaves like a
  1025. @code{CHAR} column: ``unpacked'' means the number is stored as a string,
  1026. using one character for each digit of the value.  The decimal point and,
  1027. for negative numbers, the @samp{-} sign, are not counted in M (but space
  1028. for these are reserved). If @code{D} is 0, values will have no decimal
  1029. point or fractional part.  The maximum range of @code{DECIMAL} values is
  1030. the same as for @code{DOUBLE}, but the actual range for a given
  1031. @code{DECIMAL} column may be constrained by the choice of @code{M} and
  1032. @code{D}.
  1033. If @code{D} is left out it's set to 0. If @code{M} is left out it's set to 10.
  1034. Note that in @strong{MySQL} Version 3.22 the @code{M} argument had to
  1035. includes the space needed for the sign and the decimal point.
  1036. @tindex NUMERIC
  1037. @item NUMERIC(M,D) [ZEROFILL]
  1038. This is a synonym for @code{DECIMAL}.
  1039. @tindex DATE
  1040. @item DATE
  1041. A date.  The supported range is @code{'1000-01-01'} to @code{'9999-12-31'}.
  1042. @strong{MySQL} displays @code{DATE} values in @code{'YYYY-MM-DD'} format, but
  1043. allows you to assign values to @code{DATE} columns using either strings or
  1044. numbers. @xref{DATETIME}.
  1045. @tindex DATETIME
  1046. @item DATETIME
  1047. A date and time combination.  The supported range is @code{'1000-01-01
  1048. 00:00:00'} to @code{'9999-12-31 23:59:59'}.  @strong{MySQL} displays
  1049. @code{DATETIME} values in @code{'YYYY-MM-DD HH:MM:SS'} format, but allows you
  1050. to assign values to @code{DATETIME} columns using either strings or numbers.
  1051. @xref{DATETIME}.
  1052. @tindex TIMESTAMP
  1053. @item TIMESTAMP[(M)]
  1054. A timestamp.  The range is @code{'1970-01-01 00:00:00'} to sometime in the
  1055. year @code{2037}.  @strong{MySQL} displays @code{TIMESTAMP} values in
  1056. @code{YYYYMMDDHHMMSS}, @code{YYMMDDHHMMSS}, @code{YYYYMMDD}, or @code{YYMMDD}
  1057. format, depending on whether @code{M} is @code{14} (or missing), @code{12},
  1058. @code{8}, or @code{6}, but allows you to assign values to @code{TIMESTAMP}
  1059. columns using either strings or numbers.  A @code{TIMESTAMP} column is useful
  1060. for recording the date and time of an @code{INSERT} or @code{UPDATE}
  1061. operation because it is automatically set to the date and time of the most
  1062. recent operation if you don't give it a value yourself.  You can also set it
  1063. to the current date and time by assigning it a @code{NULL} value.  @xref{Date
  1064. and time types}.
  1065. A @code{TIMESTAMP} is always stored in 4 bytes.  The @code{M} argument only
  1066. affects how the @code{TIMESTAMP} column is displayed.
  1067. Note that @code{TIMESTAMP(X)} columns where X is 8 or 14 are reported to
  1068. be numbers while other @code{TIMESTAMP(X)} columns are reported to be
  1069. strings.  This is just to ensure that one can reliably dump and restore
  1070. the table with these types!
  1071. @xref{DATETIME}.
  1072. @tindex TIME
  1073. @item TIME
  1074. A time.  The range is @code{'-838:59:59'} to @code{'838:59:59'}.
  1075. @strong{MySQL} displays @code{TIME} values in @code{'HH:MM:SS'} format, but
  1076. allows you to assign values to @code{TIME} columns using either strings or
  1077. numbers. @xref{TIME}.
  1078. @tindex YEAR
  1079. @item YEAR[(2|4)]
  1080. A year in 2- or 4-digit format (default is 4-digit).  The allowable values
  1081. are @code{1901} to @code{2155}, @code{0000} in the 4-digit year format,
  1082. and 1970-2069 if you use the 2-digit format (70-69).  @strong{MySQL} displays
  1083. @code{YEAR} values in @code{YYYY} format, but allows you to assign values to
  1084. @code{YEAR} columns using either strings or numbers. (The @code{YEAR} type is
  1085. new in @strong{MySQL} Version 3.22.). @xref{YEAR}.
  1086. @tindex NATIONAL CHAR
  1087. @tindex NCHAR
  1088. @tindex CHAR
  1089. @tindex CHARACTER
  1090. @item [NATIONAL] CHAR(M) [BINARY]
  1091. A fixed-length string that is always right-padded with spaces to the
  1092. specified length when stored. The range of @code{M} is 1 to 255 characters.
  1093. Trailing spaces are removed when the value is retrieved. @code{CHAR} values
  1094. are sorted and compared in case-insensitive fashion according to the
  1095. default character set unless the @code{BINARY} keyword is given.
  1096. @code{NATIONAL CHAR} (short form @code{NCHAR}) is the ANSI SQL way to
  1097. define that a CHAR column should use the default CHARACTER set.  This is
  1098. the default in @strong{MySQL}.
  1099. @code{CHAR} is a shorthand for @code{CHARACTER}.
  1100. @strong{MySQL} allows you to create a column of type
  1101. @code{CHAR(0)}. This is mainly useful when you have to be compliant with
  1102. some old applications that depend on the existence of a column but that do not
  1103. actually use the value.  This is also quite nice when you need a
  1104. column that only can take 2 values: A @code{CHAR(0)}, that is not defined
  1105. as @code{NOT NULL}, will only occupy one bit and can only take 2 values:
  1106. @code{NULL} or @code{""}. @xref{CHAR}.
  1107. @tindex CHARACTER VARYING
  1108. @tindex CHAR VARYING
  1109. @tindex VARCHAR
  1110. @item [NATIONAL] VARCHAR(M) [BINARY]
  1111. A variable-length string.  @strong{NOTE:} Trailing spaces are removed when
  1112. the value is stored (this differs from the ANSI SQL specification). The range
  1113. of @code{M} is 1 to 255 characters. @code{VARCHAR} values are sorted and
  1114. compared in case-insensitive fashion unless the @code{BINARY} keyword is
  1115. given. @xref{Silent column changes}.
  1116. @code{VARCHAR} is a shorthand for @code{CHARACTER VARYING}.
  1117. @xref{CHAR}.
  1118. @tindex TINYBLOB
  1119. @tindex TINYTEXT
  1120. @item TINYBLOB
  1121. @itemx TINYTEXT
  1122. A @code{BLOB} or @code{TEXT} column with a maximum length of 255 (2^8 - 1)
  1123. characters. @xref{Silent column changes}. @xref{BLOB}.
  1124. @tindex BLOB
  1125. @tindex TEXT
  1126. @item BLOB
  1127. @itemx TEXT
  1128. A @code{BLOB} or @code{TEXT} column with a maximum length of 65535 (2^16 - 1)
  1129. characters. @xref{Silent column changes}. @xref{BLOB}.
  1130. @tindex MEDIUMBLOB
  1131. @tindex MEDIUMTEXT
  1132. @item MEDIUMBLOB
  1133. @itemx MEDIUMTEXT
  1134. A @code{BLOB} or @code{TEXT} column with a maximum length of 16777215
  1135. (2^24 - 1) characters. @xref{Silent column changes}. @xref{BLOB}.
  1136. @tindex LONGBLOB
  1137. @tindex LONGTEXT
  1138. @item LONGBLOB
  1139. @itemx LONGTEXT
  1140. A @code{BLOB} or @code{TEXT} column with a maximum length of 4294967295
  1141. (2^32 - 1) characters. @xref{Silent column changes}.  Note that because
  1142. the server/client protocol and MyISAM tables has currently a limit of
  1143. 16M per communication packet / table row, you can't yet use this
  1144. the whole range of this type. @xref{BLOB}.
  1145. @tindex ENUM
  1146. @item ENUM('value1','value2',...)
  1147. An enumeration.  A string object that can have only one value, chosen
  1148. from the list of values @code{'value1'}, @code{'value2'}, @code{...},
  1149. @code{NULL} or the special @code{""} error value.  An @code{ENUM} can
  1150. have a maximum of 65535 distinct values. @xref{ENUM}.
  1151. @tindex SET
  1152. @item SET('value1','value2',...)
  1153. A set.  A string object that can have zero or more values, each of which must
  1154. be chosen from the list of values @code{'value1'}, @code{'value2'},
  1155. @code{...} A @code{SET} can have a maximum of 64 members. @xref{SET}.
  1156. @end table
  1157. @menu
  1158. * Storage requirements::        Column type storage requirements
  1159. * Numeric types::               Numeric types
  1160. * Date and time types::         Date and time types
  1161. * String types::                String types
  1162. * Choosing types::              Choosing the right type for a column
  1163. * Indexes::                     Column indexes
  1164. * Multiple-column indexes::     Multiple-column indexes
  1165. * Other-vendor column types::   Using column types from other database engines
  1166. @end menu
  1167. @cindex storage requirements, column type
  1168. @cindex columns, storage requirements
  1169. @node Storage requirements, Numeric types, Column types, Column types
  1170. @subsection Column Type Storage Requirements
  1171. The storage requirements for each of the column types supported by
  1172. @strong{MySQL} are listed below by category.
  1173. @cindex numeric types
  1174. @cindex types, numeric
  1175. @subsubheading Storage requirements for numeric types
  1176. @multitable @columnfractions .5 .5
  1177. @item @strong{Column type} @tab @strong{Storage required}
  1178. @item @code{TINYINT}       @tab 1 byte
  1179. @item @code{SMALLINT}      @tab 2 bytes
  1180. @item @code{MEDIUMINT}     @tab 3 bytes
  1181. @item @code{INT}           @tab 4 bytes
  1182. @item @code{INTEGER}       @tab 4 bytes
  1183. @item @code{BIGINT}        @tab 8 bytes
  1184. @item @code{FLOAT(X)}      @tab 4 if X <= 24 or 8 if 25 <= X <= 53
  1185. @item @code{FLOAT}         @tab 4 bytes
  1186. @item @code{DOUBLE}        @tab 8 bytes
  1187. @item @code{DOUBLE PRECISION} @tab 8 bytes
  1188. @item @code{REAL}         @tab 8 bytes
  1189. @item @code{DECIMAL(M,D)} @tab @code{M+2} bytes if D > 0, @code{M+1} bytes if D = 0 (@code{D}+2, if @code{M < D})
  1190. @item @code{NUMERIC(M,D)} @tab @code{M+2} bytes if D > 0, @code{M+1} bytes if D = 0 (@code{D}+2, if @code{M < D})
  1191. @end multitable
  1192. @cindex date types
  1193. @cindex time types
  1194. @cindex types, date
  1195. @cindex types, time
  1196. @subsubheading Storage requirements for date and time types
  1197. @multitable @columnfractions .5 .5
  1198. @item @strong{Column type} @tab @strong{Storage required}
  1199. @item @code{DATE}          @tab 3 bytes
  1200. @item @code{DATETIME}      @tab 8 bytes
  1201. @item @code{TIMESTAMP}     @tab 4 bytes
  1202. @item @code{TIME}          @tab 3 bytes
  1203. @item @code{YEAR}          @tab 1 byte
  1204. @end multitable
  1205. @subsubheading Storage requirements for string types
  1206. @multitable @columnfractions .5 .5
  1207. @item @strong{Column type} @tab @strong{Storage required}
  1208. @item @code{CHAR(M)} @tab @code{M} bytes, @code{1 <= M <= 255}
  1209. @item @code{VARCHAR(M)} @tab @code{L}+1 bytes, where @code{L <= M} and
  1210. @code{1 <= M <= 255}
  1211. @item @code{TINYBLOB}, @code{TINYTEXT} @tab @code{L}+1 bytes,
  1212. where @code{L} < 2^8
  1213. @item @code{BLOB}, @code{TEXT} @tab @code{L}+2 bytes,
  1214. where @code{L} < 2^16
  1215. @item @code{MEDIUMBLOB}, @code{MEDIUMTEXT} @tab @code{L}+3 bytes,
  1216. where @code{L} < 2^24
  1217. @item @code{LONGBLOB}, @code{LONGTEXT} @tab @code{L}+4 bytes,
  1218. where @code{L} < 2^32
  1219. @item @code{ENUM('value1','value2',...)} @tab 1 or 2 bytes, depending on
  1220. the number of enumeration values (65535 values maximum)
  1221. @item @code{SET('value1','value2',...)} @tab 1, 2, 3, 4 or 8 bytes, depending
  1222. on the number of set members (64 members maximum)
  1223. @end multitable
  1224. @cindex BLOB, size
  1225. @cindex TEXT, size
  1226. @cindex VARCHAR, size
  1227. @code{VARCHAR} and the @code{BLOB} and @code{TEXT} types are variable-length
  1228. types, for which the storage requirements depend on the actual length of
  1229. column values (represented by @code{L} in the preceding table), rather than
  1230. on the type's maximum possible size.  For example, a @code{VARCHAR(10)}
  1231. column can hold a string with a maximum length of 10 characters.  The actual
  1232. storage required is the length of the string (@code{L}), plus 1 byte to
  1233. record the length of the string.  For the string @code{'abcd'}, @code{L} is 4
  1234. and the storage requirement is 5 bytes.
  1235. The @code{BLOB} and @code{TEXT} types require 1, 2, 3, or 4 bytes to record
  1236. the length of the column value, depending on the maximum possible length of
  1237. the type.  @xref{BLOB}.
  1238. If a table includes any variable-length column types, the record format will
  1239. also be variable-length.  Note that when a table is created, @strong{MySQL}
  1240. may, under certain conditions, change a column from a variable-length type to a
  1241. fixed-length type, or vice-versa.  @xref{Silent column changes}.
  1242. @cindex ENUM, size
  1243. The size of an @code{ENUM} object is determined by the number of
  1244. different enumeration values.  One byte is used for enumerations with up
  1245. to 255 possible values.  Two bytes are used for enumerations with up to
  1246. 65535 values. @xref{ENUM}.
  1247. @cindex SET, size
  1248. The size of a @code{SET} object is determined by the number of different
  1249. set members.  If the set size is @code{N}, the object occupies @code{(N+7)/8}
  1250. bytes, rounded up to 1, 2, 3, 4, or 8 bytes.  A @code{SET} can have a maximum
  1251. of 64 members. @xref{SET}.
  1252. @node Numeric types, Date and time types, Storage requirements, Column types
  1253. @subsection Numeric Types
  1254. @strong{MySQL} supports all of the ANSI/ISO SQL92 numeric types.  These
  1255. types include the exact numeric data types (@code{NUMERIC},
  1256. @code{DECIMAL}, @code{INTEGER}, and @code{SMALLINT}), as well as the
  1257. approximate numeric data types (@code{FLOAT}, @code{REAL}, and
  1258. @code{DOUBLE PRECISION}). The keyword @code{INT} is a synonym for
  1259. @code{INTEGER}, and the keyword @code{DEC} is a synonym for
  1260. @code{DECIMAL}.
  1261. The @code{NUMERIC} and @code{DECIMAL} types are implemented as the same
  1262. type by @strong{MySQL}, as permitted by the SQL92 standard.  They are
  1263. used for values for which it is important to preserve exact precision,
  1264. for example with monetary data.  When declaring a column of one of these
  1265. types the precision and scale can be (and usually is) specified; for
  1266. example:
  1267. @example
  1268.     salary DECIMAL(9,2)
  1269. @end example
  1270. In this example, @code{9} (@code{precision}) represents the number of
  1271. significant decimal digits that will be stored for values, and
  1272. @code{2} (@code{scale}) represents the number of digits that will be
  1273. stored following the decimal point.  In this case, therefore, the range
  1274. of values that can be stored in the @code{salary} column is from
  1275. @code{-9999999.99} to @code{9999999.99}.  In ANSI/ISO SQL92, the syntax
  1276. @code{DECIMAL(p)} is equivalent to @code{DECIMAL(p,0)}.  Similarly, the
  1277. syntax @code{DECIMAL} is equivalent to @code{DECIMAL(p,0)}, where the
  1278. implementation is allowed to decide the value of @code{p}.
  1279. @strong{MySQL} does not currently support either of these variant forms
  1280. of the @code{DECIMAL}/@code{NUMERIC} data types.  This is not generally
  1281. a serious problem, as the principal benefits of these types derive from
  1282. the ability to control both precision and scale explicitly.
  1283. @code{DECIMAL} and @code{NUMERIC} values are stored as strings, rather
  1284. than as binary floating-point numbers, in order to preserve the decimal
  1285. precision of those values.  One character is used for each digit of the
  1286. value, the decimal point (if @code{scale} > 0), and the @samp{-} sign
  1287. (for negative numbers).  If @code{scale} is 0, @code{DECIMAL} and
  1288. @code{NUMERIC} values contain no decimal point or fractional part.
  1289. The maximum range of @code{DECIMAL} and @code{NUMERIC} values is the
  1290. same as for @code{DOUBLE}, but the actual range for a given
  1291. @code{DECIMAL} or @code{NUMERIC} column can be constrained by the
  1292. @code{precision} or @code{scale} for a given column.  When such a column
  1293. is assigned a value with more digits following the decimal point than
  1294. are allowed by the specified @code{scale}, the value is rounded to that
  1295. @code{scale}.  When a @code{DECIMAL} or @code{NUMERIC} column is
  1296. assigned a value whose magnitude exceeds the range implied by the
  1297. specified (or defaulted) @code{precision} and @code{scale},
  1298. @strong{MySQL} stores the value representing the corresponding end
  1299. point of that range.
  1300. As an extension to the ANSI/ISO SQL92 standard, @strong{MySQL} also
  1301. supports the integral types @code{TINYINT}, @code{MEDIUMINT}, and
  1302. @code{BIGINT} as listed in the tables above.  Another extension is
  1303. supported by @strong{MySQL} for optionally specifying the display width
  1304. of an integral value in parentheses following the base keyword for the
  1305. type (for example, @code{INT(4)}).  This optional width specification is
  1306. used to left-pad the display of values whose width is less than the
  1307. width specified for the column, but does not constrain the range of
  1308. values that can be stored in the column, nor the number of digits that
  1309. will be displayed for values whose width exceeds that specified for the
  1310. column.  When used in conjunction with the optional extension attribute
  1311. @code{ZEROFILL}, the default padding of spaces is replaced with zeroes.
  1312. For example, for a column declared as @code{INT(5) ZEROFILL}, a value
  1313. of @code{4} is retrieved as @code{00004}.  Note that if you store larger
  1314. values than the display width in an integer column, you may experience
  1315. problems when @strong{MySQL} generates temporary tables for some
  1316. complicated joins, as in these cases @strong{MySQL} trusts that the
  1317. data did fit into the original column width.
  1318. All integral types can have an optional (non-standard) attribute
  1319. @code{UNSIGNED}.  Unsigned values can be used when you want to allow
  1320. only positive numbers in a column and you need a little bigger numeric
  1321. range for the column.
  1322. The @code{FLOAT} type is used to represent approximate numeric data
  1323. types. The ANSI/ISO SQL92 standard allows an optional specification of
  1324. the precision (but not the range of the exponent) in bits following the
  1325. keyword @code{FLOAT} in parentheses.  The @strong{MySQL} implementation
  1326. also supports this optional precision specification.  When the keyword
  1327. @code{FLOAT} is used for a column type without a precision
  1328. specification, @strong{MySQL} uses four bytes to store the values.  A
  1329. variant syntax is also supported, with two numbers given in parentheses
  1330. following the @code{FLOAT} keyword.  With this option, the first number
  1331. continues to represent the storage requirements for the value in bytes,
  1332. and the second number specifies the number of digits to be stored and
  1333. displayed following the decimal point (as with @code{DECIMAL} and
  1334. @code{NUMERIC}).  When @strong{MySQL} is asked to store a number for
  1335. such a column with more decimal digits following the decimal point than
  1336. specified for the column, the value is rounded to eliminate the extra
  1337. digits when the value is stored.
  1338. The @code{REAL} and @code{DOUBLE PRECISION} types do not accept
  1339. precision specifications.  As an extension to the ANSI/ISO SQL92
  1340. standard, @strong{MySQL} recognizes @code{DOUBLE} as a synonym for the
  1341. @code{DOUBLE PRECISION} type.  In contrast with the standard's
  1342. requirement that the precision for @code{REAL} be smaller than that used
  1343. for @code{DOUBLE PRECISION}, @strong{MySQL} implements both as 8-byte
  1344. double-precision floating-point values (when not running in ``ANSI mode'').
  1345. For maximum portability, code requiring storage of approximate numeric
  1346. data values should use @code{FLOAT} or @code{DOUBLE PRECISION} with no
  1347. specification of precision or number of decimal points.
  1348. When asked to store a value in a numeric column that is outside the column
  1349. type's allowable range, @strong{MySQL} clips the value to the appropriate
  1350. endpoint of the range and stores the resulting value instead.
  1351. For example, the range of an @code{INT} column is @code{-2147483648} to
  1352. @code{2147483647}.  If you try to insert @code{-9999999999} into an
  1353. @code{INT} column, the value is clipped to the lower endpoint of the range,
  1354. and @code{-2147483648} is stored instead. Similarly, if you try to insert
  1355. @code{9999999999}, @code{2147483647} is stored instead.
  1356. If the @code{INT} column is @code{UNSIGNED}, the size of the column's
  1357. range is the same but its endpoints shift up to @code{0} and @code{4294967295}.
  1358. If you try to store @code{-9999999999} and @code{9999999999},
  1359. the values stored in the column become @code{0} and @code{4294967296}.
  1360. Conversions that occur due to clipping are reported as ``warnings'' for
  1361. @code{ALTER TABLE}, @code{LOAD DATA INFILE}, @code{UPDATE}, and
  1362. multi-row @code{INSERT} statements.
  1363. @cindex types, Date and Time
  1364. @cindex Date and Time types
  1365. @node Date and time types, String types, Numeric types, Column types
  1366. @subsection Date and Time Types
  1367. @menu
  1368. * Y2K issues::                  Y2K issues and date types
  1369. * DATETIME::                    The @code{DATETIME}, @code{DATE} and @code{TIMESTAMP} types
  1370. * TIME::                        The @code{TIME} type
  1371. * YEAR::                        The @code{YEAR} type
  1372. @end menu
  1373. The date and time types are @code{DATETIME}, @code{DATE},
  1374. @code{TIMESTAMP}, @code{TIME}, and @code{YEAR}.  Each of these has a
  1375. range of legal values, as well as a ``zero'' value that is used when you
  1376. specify a really illegal value.  Note that @strong{MySQL} allows you to store
  1377. certain 'not strictly' legal date values, for example @code{1999-11-31}.
  1378. The reason for this is that we think it's the responsibility of the
  1379. application to handle date checking, not the SQL servers.  To make the
  1380. date checking 'fast', @strong{MySQL} only checks that the month is in
  1381. the range of 0-12 and the day is in the range of 0-31. The above ranges
  1382. are defined this way because @strong{MySQL} allows you to store, in a
  1383. @code{DATE} or @code{DATETIME} column, dates where the day or month-day
  1384. is zero.  This is extremely useful for applications that need to store
  1385. a birth-date for which you don't know the exact date. In this case you
  1386. simply store the date like @code{1999-00-00} or @code{1999-01-00}.  (You
  1387. cannot expect to get a correct value from functions like @code{DATE_SUB()}
  1388. or @code{DATE_ADD} for dates like these.)
  1389. Here are some general considerations to keep in mind when working
  1390. with date and time types:
  1391. @itemize @bullet
  1392. @item
  1393. @strong{MySQL} retrieves values for a given date or time type in a standard
  1394. format, but it attempts to interpret a variety of formats for values that
  1395. you supply (for example, when you specify a value to be assigned to or
  1396. compared to a date or time type).  Nevertheless, only the formats described
  1397. in the following sections are supported.  It is expected that you will supply
  1398. legal values, and unpredictable results may occur if you use values in other
  1399. formats.
  1400. @item
  1401. Although @strong{MySQL} tries to interpret values in several formats, it
  1402. always expects the year part of date values to be leftmost.  Dates must be
  1403. given in year-month-day order (for example, @code{'98-09-04'}), rather than
  1404. in the month-day-year or day-month-year orders commonly used elsewhere (for
  1405. example, @code{'09-04-98'}, @code{'04-09-98'}).
  1406. @item
  1407. @strong{MySQL} automatically converts a date or time type value to a number
  1408. if the value is used in a numeric context, and vice versa.
  1409. @item
  1410. When @strong{MySQL} encounters a value for a date or time type that is
  1411. out of range or otherwise illegal for the type (see the start of this
  1412. section), it converts the value to the ``zero'' value for that type.
  1413. (The exception is that out-of-range @code{TIME} values are clipped to
  1414. the appropriate endpoint of the @code{TIME} range.)  The table below
  1415. shows the format of the ``zero'' value for each type:
  1416. @multitable @columnfractions .3 .7
  1417. @item @strong{Column type} @tab @strong{``Zero'' value}
  1418. @item @code{DATETIME}      @tab @code{'0000-00-00 00:00:00'}
  1419. @item @code{DATE}          @tab @code{'0000-00-00'}
  1420. @item @code{TIMESTAMP}     @tab @code{00000000000000} (length depends on display size)
  1421. @item @code{TIME}          @tab @code{'00:00:00'}
  1422. @item @code{YEAR}          @tab @code{0000}
  1423. @end multitable
  1424. @item
  1425. The ``zero'' values are special, but you can store or refer to them
  1426. explicitly using the values shown in the table.  You can also do this
  1427. using the values @code{'0'} or @code{0}, which are easier to write.
  1428. @item
  1429. ``Zero'' date or time values used through @strong{MyODBC} are converted
  1430. automatically to @code{NULL} in @strong{MyODBC} Version 2.50.12 and above,
  1431. because ODBC can't handle such values.
  1432. @end itemize
  1433. @cindex Year 2000 issues
  1434. @cindex date types, Y2K issues
  1435. @node Y2K issues, DATETIME, Date and time types, Date and time types
  1436. @subsubsection Y2K Issues and Date Types
  1437. @strong{MySQL} itself is Y2K-safe (@pxref{Year 2000 compliance}),
  1438. but input values presented to @strong{MySQL} may not be.  Any input
  1439. containing 2-digit year values is ambiguous, because the century is unknown.
  1440. Such values must be interpreted into 4-digit form because @strong{MySQL} stores
  1441. years internally using four digits.
  1442. For @code{DATETIME}, @code{DATE}, @code{TIMESTAMP}, and @code{YEAR} types,
  1443. @strong{MySQL} interprets dates with ambiguous year values using the
  1444. following rules:
  1445. @itemize @bullet
  1446. @item
  1447. Year values in the range @code{00-69} are converted to @code{2000-2069}.
  1448. @item
  1449. Year values in the range @code{70-99} are converted to @code{1970-1999}.
  1450. @end itemize
  1451. Remember that these rules provide only reasonable guesses as to what your
  1452. data mean.  If the heuristics used by @strong{MySQL} don't produce the
  1453. correct values, you should provide unambiguous input containing 4-digit
  1454. year values.
  1455. @code{ORDER BY} will sort 2-digit @code{YEAR/DATE/DATETIME} types properly.
  1456. Note also that some functions like @code{MIN()} and @code{MAX()} will convert a
  1457. @code{TIMESTAMP/DATE} to a number. This means that a timestamp with a
  1458. 2-digit year will not work properly with these functions.  The fix in this
  1459. case is to convert the @code{TIMESTAMP/DATE} to 4-digit year format or
  1460. use something like @code{MIN(DATE_ADD(timestamp,INTERVAL 0 DAYS))}.
  1461. @tindex DATETIME
  1462. @tindex DATE
  1463. @tindex TIMESTAMP
  1464. @node DATETIME, TIME, Y2K issues, Date and time types
  1465. @subsubsection The @code{DATETIME}, @code{DATE}, and @code{TIMESTAMP} Types
  1466. The @code{DATETIME}, @code{DATE}, and @code{TIMESTAMP} types are related.
  1467. This section describes their characteristics, how they are similar, and how
  1468. they differ.
  1469. The @code{DATETIME} type is used when you need values that contain both date
  1470. and time information.  @strong{MySQL} retrieves and displays @code{DATETIME}
  1471. values in @code{'YYYY-MM-DD HH:MM:SS'} format.  The supported range is
  1472. @code{'1000-01-01 00:00:00'} to @code{'9999-12-31 23:59:59'}.  (``Supported''
  1473. means that although earlier values might work, there is no guarantee that
  1474. they will.)
  1475. The @code{DATE} type is used when you need only a date value, without a time
  1476. part.  @strong{MySQL} retrieves and displays @code{DATE} values in
  1477. @code{'YYYY-MM-DD'} format.  The supported range is @code{'1000-01-01'} to
  1478. @code{'9999-12-31'}.
  1479. The @code{TIMESTAMP} column type provides a type that you can use to
  1480. automatically mark @code{INSERT} or @code{UPDATE} operations with the current
  1481. date and time.  If you have multiple @code{TIMESTAMP} columns, only the first
  1482. one is updated automatically.
  1483. Automatic updating of the first @code{TIMESTAMP} column occurs under any of
  1484. the following conditions:
  1485. @itemize @bullet
  1486. @item
  1487. The column is not specified explicitly in an @code{INSERT} or
  1488. @code{LOAD DATA INFILE} statement.
  1489. @item
  1490. The column is not specified explicitly in an @code{UPDATE} statement and some
  1491. other column changes value.  (Note that an @code{UPDATE} that sets a column
  1492. to the value it already has will not cause the @code{TIMESTAMP} column to be
  1493. updated, because if you set a column to its current value, @strong{MySQL}
  1494. ignores the update for efficiency.)
  1495. @item
  1496. You explicitly set the @code{TIMESTAMP} column to @code{NULL}.
  1497. @end itemize
  1498. @code{TIMESTAMP} columns other than the first may also be set to the current
  1499. date and time.  Just set the column to @code{NULL} or to @code{NOW()}.
  1500. You can set any @code{TIMESTAMP} column to a value different than the current
  1501. date and time by setting it explicitly to the desired value.  This is true
  1502. even for the first @code{TIMESTAMP} column.  You can use this property if,
  1503. for example, you want a @code{TIMESTAMP} to be set to the current date and
  1504. time when you create a row, but not to be changed whenever the row is updated
  1505. later:
  1506. @itemize @bullet
  1507. @item
  1508. Let @strong{MySQL} set the column when the row is created.
  1509. This will initialize it to the current date and time.
  1510. @item
  1511. When you perform subsequent updates to other columns in the row, set
  1512. the @code{TIMESTAMP} column explicitly to its current value.
  1513. @end itemize
  1514. On the other hand, you may find it just as easy to use a @code{DATETIME}
  1515. column that you initialize to @code{NOW()} when the row is created and
  1516. leave alone for subsequent updates.
  1517. @code{TIMESTAMP} values may range from the beginning of 1970 to sometime in
  1518. the year 2037, with a resolution of one second.  Values are displayed as
  1519. numbers.
  1520. The format in which @strong{MySQL} retrieves and displays @code{TIMESTAMP}
  1521. values depends on the display size, as illustrated by the table below.  The
  1522. `full' @code{TIMESTAMP} format is 14 digits, but @code{TIMESTAMP} columns may
  1523. be created with shorter display sizes:
  1524. @multitable @columnfractions .3 .7
  1525. @item @strong{Column type}  @tab @strong{Display format}
  1526. @item @code{TIMESTAMP(14)}  @tab @code{YYYYMMDDHHMMSS}
  1527. @item @code{TIMESTAMP(12)}  @tab @code{YYMMDDHHMMSS}
  1528. @item @code{TIMESTAMP(10)}  @tab @code{YYMMDDHHMM}
  1529. @item @code{TIMESTAMP(8)}   @tab @code{YYYYMMDD}
  1530. @item @code{TIMESTAMP(6)}   @tab @code{YYMMDD}
  1531. @item @code{TIMESTAMP(4)}   @tab @code{YYMM}
  1532. @item @code{TIMESTAMP(2)}   @tab @code{YY}
  1533. @end multitable
  1534. All @code{TIMESTAMP} columns have the same storage size, regardless of
  1535. display size.  The most common display sizes are 6, 8, 12, and 14.  You can
  1536. specify an arbitrary display size at table creation time, but values of 0 or
  1537. greater than 14 are coerced to 14.  Odd-valued sizes in the range from 1 to
  1538. 13 are coerced to the next higher even number.
  1539. You can specify @code{DATETIME}, @code{DATE}, and @code{TIMESTAMP} values using
  1540. any of a common set of formats:
  1541. @itemize @bullet
  1542. @item
  1543. As a string in either @code{'YYYY-MM-DD HH:MM:SS'} or @code{'YY-MM-DD
  1544. HH:MM:SS'} format.  A ``relaxed'' syntax is allowed---any punctuation
  1545. character may be used as the delimiter between date parts or time parts.
  1546. For example, @code{'98-12-31 11:30:45'}, @code{'98.12.31 11+30+45'},
  1547. @code{'98/12/31 11*30*45'}, and @code{'98@@12@@31 11^30^45'} are
  1548. equivalent.
  1549. @item
  1550. As a string in either @code{'YYYY-MM-DD'} or @code{'YY-MM-DD'} format.
  1551. A ``relaxed'' syntax is allowed here, too.  For example, @code{'98-12-31'},
  1552. @code{'98.12.31'}, @code{'98/12/31'}, and @code{'98@@12@@31'} are
  1553. equivalent.
  1554. @item
  1555. As a string with no delimiters in either @code{'YYYYMMDDHHMMSS'} or
  1556. @code{'YYMMDDHHMMSS'} format, provided that the string makes sense as a
  1557. date.  For example, @code{'19970523091528'} and @code{'970523091528'} are
  1558. interpreted as @code{'1997-05-23 09:15:28'}, but @code{'971122129015'} is
  1559. illegal (it has a nonsensical minute part) and becomes @code{'0000-00-00
  1560. 00:00:00'}.
  1561. @item
  1562. As a string with no delimiters in either @code{'YYYYMMDD'} or @code{'YYMMDD'}
  1563. format, provided that the string makes sense as a date.  For example,
  1564. @code{'19970523'} and @code{'970523'} are interpreted as
  1565. @code{'1997-05-23'}, but @code{'971332'} is illegal (it has nonsensical month
  1566. and day parts) and becomes @code{'0000-00-00'}.
  1567. @item
  1568. As a number in either @code{YYYYMMDDHHMMSS} or @code{YYMMDDHHMMSS}
  1569. format, provided that the number makes sense as a date.  For example,
  1570. @code{19830905132800} and @code{830905132800} are interpreted as
  1571. @code{'1983-09-05 13:28:00'}.
  1572. @item
  1573. As a number in either @code{YYYYMMDD} or @code{YYMMDD}
  1574. format, provided that the number makes sense as a date.  For example,
  1575. @code{19830905} and @code{830905} are interpreted as @code{'1983-09-05'}.
  1576. @item
  1577. As the result of a function that returns a value that is acceptable
  1578. in a @code{DATETIME}, @code{DATE}, or @code{TIMESTAMP} context, such as
  1579. @code{NOW()} or @code{CURRENT_DATE}.
  1580. @end itemize
  1581. Illegal @code{DATETIME}, @code{DATE}, or @code{TIMESTAMP} values are converted
  1582. to the ``zero'' value of the appropriate type (@code{'0000-00-00 00:00:00'},
  1583. @code{'0000-00-00'}, or @code{00000000000000}).
  1584. For values specified as strings that include date part delimiters, it is not
  1585. necessary to specify two digits for month or day values that are less than
  1586. @code{10}.  @code{'1979-6-9'} is the same as @code{'1979-06-09'}.  Similarly,
  1587. for values specified as strings that include time part delimiters, it is not
  1588. necessary to specify two digits for hour, month, or second values that are
  1589. less than @code{10}.  @code{'1979-10-30 1:2:3'} is the same as
  1590. @code{'1979-10-30 01:02:03'}.
  1591. Values specified as numbers should be 6, 8, 12, or 14 digits long.  If the
  1592. number is 8 or 14 digits long, it is assumed to be in @code{YYYYMMDD} or
  1593. @code{YYYYMMDDHHMMSS} format and that the year is given by the first 4
  1594. digits.  If the number is 6 or 12 digits long, it is assumed to be in
  1595. @code{YYMMDD} or @code{YYMMDDHHMMSS} format and that the year is given by the
  1596. first 2 digits.  Numbers that are not one of these lengths are interpreted
  1597. as though padded with leading zeros to the closest length.
  1598. @cindex non-delimited strings
  1599. @cindex strings, non-delimited
  1600. Values specified as non-delimited strings are interpreted using their length
  1601. as given.  If the string is 8 or 14 characters long, the year is assumed to
  1602. be given by the first 4 characters.  Otherwise the year is assumed to be
  1603. given by the first 2 characters.  The string is interpreted from left to
  1604. right to find year, month, day, hour, minute, and second values, for as many
  1605. parts as are present in the string.  This means you should not use strings
  1606. that have fewer than 6 characters.  For example, if you specify @code{'9903'},
  1607. thinking that will represent March, 1999, you will find that @strong{MySQL}
  1608. inserts a ``zero'' date into your table.  This is because the year and month
  1609. values are @code{99} and @code{03}, but the day part is missing (zero), so
  1610. the value is not a legal date.
  1611. @code{TIMESTAMP} columns store legal values using the full precision with
  1612. which the value was specified, regardless of the display size.  This has
  1613. several implications:
  1614. @itemize @bullet
  1615. @item
  1616. Always specify year, month, and day, even if your column types are
  1617. @code{TIMESTAMP(4)} or @code{TIMESTAMP(2)}.  Otherwise, the value will not
  1618. be a legal date and @code{0} will be stored.
  1619. @item
  1620. If you use @code{ALTER TABLE} to widen a narrow @code{TIMESTAMP} column,
  1621. information will be displayed that previously was ``hidden''.
  1622. @item
  1623. Similarly, narrowing a @code{TIMESTAMP} column does not cause information to
  1624. be lost, except in the sense that less information is shown when the values
  1625. are displayed.
  1626. @item
  1627. Although @code{TIMESTAMP} values are stored to full precision, the only
  1628. function that operates directly on the underlying stored value is
  1629. @code{UNIX_TIMESTAMP()}.  Other functions operate on the formatted retrieved
  1630. value.  This means you cannot use functions such as @code{HOUR()} or
  1631. @code{SECOND()} unless the relevant part of the @code{TIMESTAMP} value is
  1632. included in the formatted value.  For example, the @code{HH} part of a
  1633. @code{TIMESTAMP} column is not displayed unless the display size is at least
  1634. 10, so trying to use @code{HOUR()} on shorter @code{TIMESTAMP} values
  1635. produces a meaningless result.
  1636. @end itemize
  1637. You can to some extent assign values of one date type to an object
  1638. of a different date type.  However, there may be some alteration
  1639. of the value or loss of information:
  1640. @itemize @bullet
  1641. @item
  1642. If you assign a @code{DATE} value to a @code{DATETIME} or @code{TIMESTAMP}
  1643. object, the time part of the resulting value is set to @code{'00:00:00'},
  1644. because the @code{DATE} value contains no time information.
  1645. @item
  1646. If you assign a @code{DATETIME} or @code{TIMESTAMP} value to a @code{DATE}
  1647. object, the time part of the resulting value is deleted, because the
  1648. @code{DATE} type stores no time information.
  1649. @item
  1650. Remember that although @code{DATETIME}, @code{DATE}, and @code{TIMESTAMP}
  1651. values all can be specified using the same set of formats, the types do not
  1652. all have the same range of values.  For example, @code{TIMESTAMP} values
  1653. cannot be earlier than @code{1970} or later than @code{2037}.  This means
  1654. that a date such as @code{'1968-01-01'}, while legal as a @code{DATETIME} or
  1655. @code{DATE} value, is not a valid @code{TIMESTAMP} value and will be
  1656. converted to @code{0} if assigned to such an object.
  1657. @end itemize
  1658. @cindex problems, date values
  1659. @cindex date values, problems
  1660. Be aware of certain pitfalls when specifying date values:
  1661. @itemize @bullet
  1662. @item
  1663. The relaxed format allowed for values specified as strings can be deceiving.
  1664. For example, a value such as @code{'10:11:12'} might look like a time value
  1665. because of the @samp{:} delimiter, but if used in a date context will be
  1666. interpreted as the year @code{'2010-11-12'}.  The value @code{'10:45:15'}
  1667. will be converted to @code{'0000-00-00'} because @code{'45'} is not a legal
  1668. month.
  1669. @item
  1670. Year values specified as two digits are ambiguous, because the century is
  1671. unknown.  @strong{MySQL} interprets 2-digit year values using the following
  1672. rules:
  1673. @itemize @minus
  1674. @item
  1675. Year values in the range @code{00-69} are converted to @code{2000-2069}.
  1676. @item
  1677. Year year values in the range @code{70-99} are converted to @code{1970-1999}.
  1678. @end itemize
  1679. @end itemize
  1680. @tindex TIME
  1681. @node TIME, YEAR, DATETIME, Date and time types
  1682. @subsubsection The @code{TIME} Type
  1683. @strong{MySQL} retrieves and displays @code{TIME} values in @code{'HH:MM:SS'}
  1684. format (or @code{'HHH:MM:SS'} format for large hours values).  @code{TIME}
  1685. values may range from @code{'-838:59:59'} to @code{'838:59:59'}.  The reason
  1686. the hours part may be so large is that the @code{TIME} type may be used not
  1687. only to represent a time of day (which must be less than 24 hours), but also
  1688. elapsed time or a time interval between two events (which may be much greater
  1689. than 24 hours, or even negative).
  1690. You can specify @code{TIME} values in a variety of formats:
  1691. @itemize @bullet
  1692. @item
  1693. As a string in @code{'D HH:MM:SS.fraction'} format.  (Note that
  1694. @strong{MySQL} doesn't yet store the fraction for the time column).  One
  1695. can also use one of the following ``relaxed'' syntax:
  1696. @code{HH:MM:SS.fraction}, @code{HH:MM:SS}, @code{HH:MM}, @code{D HH:MM:SS},
  1697. @code{D HH:MM}, @code{D HH} or @code{SS}.  Here @code{D} is days between 0-33.
  1698. @item
  1699. As a string with no delimiters in @code{'HHMMSS'} format, provided that
  1700. it makes sense as a time.  For example, @code{'101112'} is understood as
  1701. @code{'10:11:12'}, but @code{'109712'} is illegal (it has a nonsensical
  1702. minute part) and becomes @code{'00:00:00'}.
  1703. @item
  1704. As a number in @code{HHMMSS} format, provided that it makes sense as a time.
  1705. For example, @code{101112} is understood as @code{'10:11:12'}.  The following
  1706. alternative formats are also understood: @code{SS}, @code{MMSS},@code{HHMMSS},
  1707. @code{HHMMSS.fraction}.  Note that @strong{MySQL} doesn't yet store the
  1708. fraction part.
  1709. @item
  1710. As the result of a function that returns a value that is acceptable
  1711. in a @code{TIME} context, such as @code{CURRENT_TIME}.
  1712. @end itemize
  1713. For @code{TIME} values specified as strings that include a time part
  1714. delimiter, it is not necessary to specify two digits for hours, minutes, or
  1715. seconds values that are less than @code{10}.  @code{'8:3:2'} is the same as
  1716. @code{'08:03:02'}.
  1717. Be careful about assigning ``short'' @code{TIME} values to a @code{TIME}
  1718. column. Without semicolon, @strong{MySQL} interprets values using the 
  1719. assumption that the rightmost digits represent seconds. (@strong{MySQL} 
  1720. interprets @code{TIME} values as elapsed time rather than as time of 
  1721. day.) For example, you might think of @code{'1112'} and @code{1112} as 
  1722. meaning @code{'11:12:00'} (12 minutes after 11 o'clock), but
  1723. @strong{MySQL} interprets them as @code{'00:11:12'} (11 minutes, 12 seconds).
  1724. Similarly, @code{'12'} and @code{12} are interpreted as @code{'00:00:12'}.
  1725. @code{TIME} values with semicolon, instead, are always treated as
  1726. time of the day. That is @code{'11:12'} will mean @code{'11:12:00'},
  1727. not @code{'00:11:12'}.
  1728. Values that lie outside the @code{TIME} range
  1729. but are otherwise legal are clipped to the appropriate
  1730. endpoint of the range.  For example, @code{'-850:00:00'} and
  1731. @code{'850:00:00'} are converted to @code{'-838:59:59'} and
  1732. @code{'838:59:59'}.
  1733. Illegal @code{TIME} values are converted to @code{'00:00:00'}.  Note that
  1734. because @code{'00:00:00'} is itself a legal @code{TIME} value, there is no way
  1735. to tell, from a value of @code{'00:00:00'} stored in a table, whether the
  1736. original value was specified as @code{'00:00:00'} or whether it was illegal.
  1737. @tindex YEAR
  1738. @node YEAR,  , TIME, Date and time types
  1739. @subsubsection The @code{YEAR} Type
  1740. The @code{YEAR} type is a 1-byte type used for representing years.
  1741. @strong{MySQL} retrieves and displays @code{YEAR} values in @code{YYYY}
  1742. format.  The range is @code{1901} to @code{2155}.
  1743. You can specify @code{YEAR} values in a variety of formats:
  1744. @itemize @bullet
  1745. @item
  1746. As a four-digit string in the range @code{'1901'} to @code{'2155'}.
  1747. @item
  1748. As a four-digit number in the range @code{1901} to @code{2155}.
  1749. @item
  1750. As a two-digit string in the range @code{'00'} to @code{'99'}.  Values in the
  1751. ranges @code{'00'} to @code{'69'} and @code{'70'} to @code{'99'} are
  1752. converted to @code{YEAR} values in the ranges @code{2000} to @code{2069} and
  1753. @code{1970} to @code{1999}.
  1754. @item
  1755. As a two-digit number in the range @code{1} to @code{99}.  Values in the
  1756. ranges @code{1} to @code{69} and @code{70} to @code{99} are converted to
  1757. @code{YEAR} values in the ranges @code{2001} to @code{2069} and @code{1970}
  1758. to @code{1999}.  Note that the range for two-digit numbers is slightly
  1759. different than the range for two-digit strings, because you cannot specify zero
  1760. directly as a number and have it be interpreted as @code{2000}.  You
  1761. @emph{must} specify it as a string @code{'0'} or @code{'00'} or it will be
  1762. interpreted as @code{0000}.
  1763. @item
  1764. As the result of a function that returns a value that is acceptable
  1765. in a @code{YEAR} context, such as @code{NOW()}.
  1766. @end itemize
  1767. Illegal @code{YEAR} values are converted to @code{0000}.
  1768. @cindex types, strings
  1769. @cindex string types
  1770. @node String types, Choosing types, Date and time types, Column types
  1771. @subsection String Types
  1772. The string types are @code{CHAR}, @code{VARCHAR}, @code{BLOB}, @code{TEXT},
  1773. @code{ENUM}, and @code{SET}.
  1774. @tindex CHAR
  1775. @tindex VARCHAR
  1776. @menu
  1777. * CHAR::                        The @code{CHAR} and @code{VARCHAR} types
  1778. * BLOB::                        The @code{BLOB} and @code{TEXT} types
  1779. * ENUM::                        The @code{ENUM} type
  1780. * SET::                         The @code{SET} type
  1781. @end menu
  1782. @node CHAR, BLOB, String types, String types
  1783. @subsubsection The @code{CHAR} and @code{VARCHAR} Types
  1784. The @code{CHAR} and @code{VARCHAR} types are similar, but differ in the
  1785. way they are stored and retrieved.
  1786. The length of a @code{CHAR} column is fixed to the length that you declare
  1787. when you create the table.  The length can be any value between 1 and 255.
  1788. (As of @strong{MySQL} Version 3.23, the length of @code{CHAR} may be 0 to 255.)
  1789. When @code{CHAR} values are stored, they are right-padded with spaces to the
  1790. specified length.  When @code{CHAR} values are retrieved, trailing spaces are
  1791. removed.
  1792. Values in @code{VARCHAR} columns are variable-length strings.  You can
  1793. declare a @code{VARCHAR} column to be any length between 1 and 255, just as
  1794. for @code{CHAR} columns.  However, in contrast to @code{CHAR}, @code{VARCHAR}
  1795. values are stored using only as many characters as are needed, plus one byte
  1796. to record the length.  Values are not padded; instead, trailing spaces are
  1797. removed when values are stored.  (This space removal differs from the ANSI
  1798. SQL specification.)
  1799. If you assign a value to a @code{CHAR} or @code{VARCHAR} column that
  1800. exceeds the column's maximum length, the value is truncated to fit.
  1801. The table below illustrates the differences between the two types of columns
  1802. by showing the result of storing various string values into @code{CHAR(4)}
  1803. and @code{VARCHAR(4)} columns:
  1804. @c Need to use @(space) to make sure second column values retain spacing
  1805. @c in output for table below.
  1806. @multitable @columnfractions .2 .15 .2 .2 .25
  1807. @item @strong{Value}  @tab @code{CHAR(4)}     @tab @strong{Storage required} @tab @code{VARCHAR(4)} @tab @strong{Storage required}
  1808. @item @code{''}       @tab @code{'@ @ @ @ '} @tab 4 bytes @tab @code{''} @tab 1 byte
  1809. @item @code{'ab'}     @tab @code{'ab@ @ '}   @tab 4 bytes @tab @code{'ab'} @tab 3 bytes
  1810. @item @code{'abcd'}   @tab @code{'abcd'}     @tab 4 bytes @tab @code{'abcd'} @tab 5 bytes
  1811. @item @code{'abcdefgh'} @tab @code{'abcd'}     @tab 4 bytes @tab @code{'abcd'} @tab 5 bytes
  1812. @end multitable
  1813. The values retrieved from the @code{CHAR(4)} and @code{VARCHAR(4)} columns
  1814. will be the same in each case, because trailing spaces are removed from
  1815. @code{CHAR} columns upon retrieval.
  1816. Values in @code{CHAR} and @code{VARCHAR} columns are sorted and compared
  1817. in case-insensitive fashion, unless the @code{BINARY} attribute was
  1818. specified when the table was created.  The @code{BINARY} attribute means
  1819. that column values are sorted and compared in case-sensitive fashion
  1820. according to the ASCII order of the machine where the @strong{MySQL}
  1821. server is running. @code{BINARY} doesn't affect how the column is stored
  1822. or retrieved.
  1823. The @code{BINARY} attribute is sticky.  This means that if a column marked
  1824. @code{BINARY} is used in an expression, the whole expression is compared as a
  1825. @code{BINARY} value.
  1826. @strong{MySQL} may silently change the type of a @code{CHAR} or @code{VARCHAR}
  1827. column at table creation time.
  1828. @xref{Silent column changes}.
  1829. @tindex BLOB
  1830. @tindex TEXT
  1831. @node BLOB, ENUM, CHAR, String types
  1832. @subsubsection The @code{BLOB} and @code{TEXT} Types
  1833. A @code{BLOB} is a binary large object that can hold a variable amount of
  1834. data.  The four @code{BLOB} types @code{TINYBLOB}, @code{BLOB},
  1835. @code{MEDIUMBLOB}, and @code{LONGBLOB} differ only in the maximum length of
  1836. the values they can hold.
  1837. @xref{Storage requirements}.
  1838. The four @code{TEXT} types @code{TINYTEXT}, @code{TEXT}, @code{MEDIUMTEXT},
  1839. and @code{LONGTEXT} correspond to the four @code{BLOB} types and have the
  1840. same maximum lengths and storage requirements.  The only difference between
  1841. @code{BLOB} and @code{TEXT} types is that sorting and comparison is performed
  1842. in case-sensitive fashion for @code{BLOB} values and case-insensitive fashion
  1843. for @code{TEXT} values.  In other words, a @code{TEXT} is a case-insensitive
  1844. @code{BLOB}.
  1845. If you assign a value to a @code{BLOB} or @code{TEXT} column that exceeds
  1846. the column type's maximum length, the value is truncated to fit.
  1847. In most respects, you can regard a @code{TEXT} column as a @code{VARCHAR}
  1848. column that can be as big as you like.  Similarly, you can regard a
  1849. @code{BLOB} column as a @code{VARCHAR BINARY} column.  The differences are:
  1850. @itemize @bullet
  1851. @item
  1852. You can have indexes on @code{BLOB} and @code{TEXT} columns with
  1853. @strong{MySQL} Version 3.23.2 and newer. Older versions of
  1854. @strong{MySQL} did not support this.
  1855. @item
  1856. There is no trailing-space removal for @code{BLOB} and @code{TEXT} columns
  1857. when values are stored, as there is for @code{VARCHAR} columns.
  1858. @item
  1859. @cindex default values, @code{BLOB} and @code{TEXT} columns
  1860. @cindex @code{BLOB} columns, default values
  1861. @cindex @code{TEXT} columns, default values
  1862. @code{BLOB} and @code{TEXT} columns cannot have @code{DEFAULT} values.
  1863. @end itemize
  1864. @strong{MyODBC} defines @code{BLOB} values as @code{LONGVARBINARY} and
  1865. @code{TEXT} values as @code{LONGVARCHAR}.
  1866. Because @code{BLOB} and @code{TEXT} values may be extremely long, you
  1867. may run up against some constraints when using them:
  1868. @itemize @bullet
  1869. @item
  1870. If you want to use @code{GROUP BY} or @code{ORDER BY} on a @code{BLOB} or
  1871. @code{TEXT} column, you must convert the column value into a fixed-length
  1872. object. The standard way to do this is with the @code{SUBSTRING}
  1873. function.  For example:
  1874. @example
  1875. mysql> select comment from tbl_name,substring(comment,20) as substr
  1876.        ORDER BY substr;
  1877. @end example
  1878. If you don't do this, only the first @code{max_sort_length} bytes of the
  1879. column are used when sorting.  The default value of @code{max_sort_length} is
  1880. 1024; this value can be changed using the @code{-O} option when starting the
  1881. @code{mysqld} server. You can group on an expression involving @code{BLOB} or
  1882. @code{TEXT} values by specifying the column position or by using an alias:
  1883. @example
  1884. mysql> select id,substring(blob_col,1,100) from tbl_name
  1885.            GROUP BY 2;
  1886. mysql> select id,substring(blob_col,1,100) as b from tbl_name
  1887.            GROUP BY b;
  1888. @end example
  1889. @item
  1890. The maximum size of a @code{BLOB} or @code{TEXT} object is determined by its
  1891. type, but the largest value you can actually transmit between the client and
  1892. server is determined by the amount of available memory and the size of the
  1893. communications buffers.  You can change the message buffer size, but you must
  1894. do so on both the server and client ends. @xref{Server parameters}.
  1895. @end itemize
  1896. Note that each @code{BLOB} or @code{TEXT} value is represented
  1897. internally by a separately allocated object. This is in contrast to all
  1898. other column types, for which storage is allocated once per column when
  1899. the table is opened.
  1900. @tindex ENUM
  1901. @node ENUM, SET, BLOB, String types
  1902. @subsubsection The @code{ENUM} Type
  1903. An @code{ENUM} is a string object whose value normally is chosen from a list
  1904. of allowed values that are enumerated explicitly in the column specification
  1905. at table creation time.
  1906. The value may also be the empty string (@code{""}) or @code{NULL} under
  1907. certain circumstances:
  1908. @itemize @bullet
  1909. @item
  1910. If you insert an invalid value into an @code{ENUM} (that is, a string not
  1911. present in the list of allowed values), the empty string is inserted
  1912. instead as a special error value.
  1913. @item
  1914. If an @code{ENUM} is declared @code{NULL}, @code{NULL} is also a legal value
  1915. for the column, and the default value is @code{NULL}.  If an @code{ENUM} is
  1916. declared @code{NOT NULL}, the default value is the first element of the
  1917. list of allowed values.
  1918. @end itemize
  1919. Each enumeration value has an index:
  1920. @itemize @bullet
  1921. @item
  1922. Values from the list of allowable elements in the column specification are
  1923. numbered beginning with 1.
  1924. @item
  1925. The index value of the empty string error value is 0.  This means that you
  1926. can use the following @code{SELECT} statement to find rows into which invalid
  1927. @code{ENUM} values were assigned:
  1928. @example
  1929. mysql> SELECT * FROM tbl_name WHERE enum_col=0;
  1930. @end example
  1931. @item
  1932. The index of the @code{NULL} value is @code{NULL}.
  1933. @end itemize
  1934. For example, a column specified as @code{ENUM("one", "two", "three")} can
  1935. have any of the values shown below.  The index of each value is also shown:
  1936. @multitable @columnfractions .2 .8
  1937. @item @strong{Value} @tab @strong{Index}
  1938. @item @code{NULL}    @tab @code{NULL}
  1939. @item @code{""}      @tab 0
  1940. @item @code{"one"}   @tab 1
  1941. @item @code{"two"}   @tab 2
  1942. @item @code{"three"} @tab 3
  1943. @end multitable
  1944. An enumeration can have a maximum of 65535 elements.
  1945. Lettercase is irrelevant when you assign values to an @code{ENUM} column.
  1946. However, values retrieved from the column later have lettercase matching the
  1947. values that were used to specify the allowable values at table creation time.
  1948. If you retrieve an @code{ENUM} in a numeric context, the column value's
  1949. index is returned.  For example, you can retrieve numeric values from
  1950. an @code{ENUM} column like this:
  1951. @example
  1952. mysql> SELECT enum_col+0 FROM tbl_name;
  1953. @end example
  1954. If you store a number into an @code{ENUM}, the number is treated as an
  1955. index, and the value stored is the enumeration member with that index.
  1956. (However, this will not work with @code{LOAD DATA}, which treats all
  1957. input as strings.)
  1958. @code{ENUM} values are sorted according to the order in which the enumeration
  1959. members were listed in the column specification.  (In other words,
  1960. @code{ENUM} values are sorted according to their index numbers.)  For
  1961. example, @code{"a"} sorts before @code{"b"} for @code{ENUM("a", "b")}, but
  1962. @code{"b"} sorts before @code{"a"} for @code{ENUM("b", "a")}.  The empty
  1963. string sorts before non-empty strings, and @code{NULL} values sort before
  1964. all other enumeration values.
  1965. If you want to get all possible values for an @code{ENUM} column, you should
  1966. use: @code{SHOW COLUMNS FROM table_name LIKE enum_column_name} and parse
  1967. the @code{ENUM} definition in the second column.
  1968. @tindex SET
  1969. @node SET,  , ENUM, String types
  1970. @subsubsection The @code{SET} Type
  1971. A @code{SET} is a string object that can have zero or more values, each of
  1972. which must be chosen from a list of allowed values specified when the table
  1973. is created.  @code{SET} column values that consist of multiple set members
  1974. are specified with members separated by commas (@samp{,}).  A consequence of
  1975. this is that @code{SET} member values cannot themselves contain commas.
  1976. For example, a column specified as @code{SET("one", "two") NOT NULL} can have
  1977. any of these values:
  1978. @example
  1979. ""
  1980. "one"
  1981. "two"
  1982. "one,two"
  1983. @end example
  1984. A @code{SET} can have a maximum of 64 different members.
  1985. @strong{MySQL} stores @code{SET} values numerically, with the low-order bit
  1986. of the stored value corresponding to the first set member.  If you retrieve a
  1987. @code{SET} value in a numeric context, the value retrieved has bits set
  1988. corresponding to the set members that make up the column value.  For example,
  1989. you can retrieve numeric values from a @code{SET} column like this:
  1990. @example
  1991. mysql> SELECT set_col+0 FROM tbl_name;
  1992. @end example
  1993. If a number is stored into a @code{SET} column, the bits that
  1994. are set in the binary representation of the number determine the
  1995. set members in the column value.  Suppose a column is specified as
  1996. @code{SET("a","b","c","d")}.  Then the members have the following bit
  1997. values:
  1998. @multitable @columnfractions .2 .2 .6
  1999. @item @code{SET} @strong{member} @tab @strong{Decimal value} @tab @strong{Binary value}
  2000. @item @code{a} @tab @code{1} @tab @code{0001}
  2001. @item @code{b} @tab @code{2} @tab @code{0010}
  2002. @item @code{c} @tab @code{4} @tab @code{0100}
  2003. @item @code{d} @tab @code{8} @tab @code{1000}
  2004. @end multitable
  2005. If you assign a value of @code{9} to this column, that is @code{1001} in
  2006. binary, so the first and fourth @code{SET} value members @code{"a"} and
  2007. @code{"d"} are selected and the resulting value is @code{"a,d"}.
  2008. For a value containing more than one @code{SET} element, it does not matter
  2009. what order the elements are listed in when you insert the value.  It also
  2010. does not matter how many times a given element is listed in the value.
  2011. When the value is retrieved later, each element in the value will appear
  2012. once, with elements listed according to the order in which they were
  2013. specified at table creation time.  For example, if a column is specified as
  2014. @code{SET("a","b","c","d")}, then @code{"a,d"}, @code{"d,a"}, and
  2015. @code{"d,a,a,d,d"} will all appear as @code{"a,d"} when retrieved.
  2016. @code{SET} values are sorted numerically.  @code{NULL} values sort before
  2017. non-@code{NULL} @code{SET} values.
  2018. Normally, you perform a @code{SELECT} on a @code{SET} column using
  2019. the @code{LIKE} operator or the @code{FIND_IN_SET()} function:
  2020. @example
  2021. mysql> SELECT * FROM tbl_name WHERE set_col LIKE '%value%';
  2022. mysql> SELECT * FROM tbl_name WHERE FIND_IN_SET('value',set_col)>0;
  2023. @end example
  2024. But the following will also work:
  2025. @example
  2026. mysql> SELECT * FROM tbl_name WHERE set_col = 'val1,val2';
  2027. mysql> SELECT * FROM tbl_name WHERE set_col & 1;
  2028. @end example
  2029. The first of these statements looks for an exact match.  The second looks
  2030. for values containing the first set member.
  2031. If you want to get all possible values for a @code{SET} column, you should
  2032. use: @code{SHOW COLUMNS FROM table_name LIKE set_column_name} and parse
  2033. the @code{SET} definition in the second column.
  2034. @cindex types, columns
  2035. @cindex choosing types
  2036. @node Choosing types, Indexes, String types, Column types
  2037. @subsection Choosing the Right Type for a Column
  2038. For the most efficient use of storage, try to use the most precise type in
  2039. all cases. For example, if an integer column will be used for values in the
  2040. range between @code{1} and @code{99999}, @code{MEDIUMINT UNSIGNED} is the
  2041. best type.
  2042. Accurate representation of monetary values is a common problem. In
  2043. @strong{MySQL}, you should use the @code{DECIMAL} type. This is stored as
  2044. a string, so no loss of accuracy should occur. If accuracy is not
  2045. too important, the @code{DOUBLE} type may also be good enough.
  2046. For high precision, you can always convert to a fixed-point type stored
  2047. in a @code{BIGINT}. This allows you to do all calculations with integers
  2048. and convert results back to floating-point values only when necessary.
  2049. @cindex indexes, columns
  2050. @cindex columns, indexes
  2051. @cindex keys
  2052. @node Indexes, Multiple-column indexes, Choosing types, Column types
  2053. @subsection Column Indexes
  2054. All @strong{MySQL} column types can be indexed.  Use of indexes on the
  2055. relevant columns is the best way to improve the performance of @code{SELECT}
  2056. operations.
  2057. The maximum number of keys and the maximum index length is defined per
  2058. table handler. @xref{Table types}. You can with all table handlers have
  2059. at least 16 keys and a total index length of at least 256 bytes.
  2060. For @code{CHAR} and @code{VARCHAR} columns, you can index a prefix of a
  2061. column.  This is much faster and requires less disk space than indexing the
  2062. whole column.  The syntax to use in the @code{CREATE TABLE} statement to
  2063. index a column prefix looks like this:
  2064. @example
  2065. KEY index_name (col_name(length))
  2066. @end example
  2067. The example below creates an index for the first 10 characters of the
  2068. @code{name} column:
  2069. @example
  2070. mysql> CREATE TABLE test (
  2071.            name CHAR(200) NOT NULL,
  2072.            KEY index_name (name(10)));
  2073. @end example
  2074. For @code{BLOB} and @code{TEXT} columns, you must index a prefix of the
  2075. column.  You cannot index the entire column.
  2076. In @strong{MySQL} Version 3.23.23 or later, you can also create special
  2077. @strong{FULLTEXT} indexes. They are used for full-text search. Only the
  2078. @code{MyISAM} table type supports @code{FULLTEXT} indexes. They can be
  2079. created only from @code{VARCHAR} and @code{TEXT} columns.
  2080. Indexing always happens over the entire column and partial indexing is not
  2081. supported. See @ref{MySQL full-text search} for details.
  2082. @cindex multi-column indexes
  2083. @cindex indexes, multi-column
  2084. @cindex keys, multi-column
  2085. @node Multiple-column indexes, Other-vendor column types, Indexes, Column types
  2086. @subsection Multiple-column Indexes
  2087. @strong{MySQL} can create indexes on multiple columns.  An index may
  2088. consist of up to 15 columns. (On @code{CHAR} and @code{VARCHAR} columns you
  2089. can also use a prefix of the column as a part of an index).
  2090. A multiple-column index can be considered a sorted array containing values
  2091. that are created by concatenating the values of the indexed columns.
  2092. @strong{MySQL} uses multiple-column indexes in such a way that queries are
  2093. fast when you specify a known quantity for the first column of the index in a
  2094. @code{WHERE} clause, even if you don't specify values for the other columns.
  2095. Suppose a table is created using the following specification:
  2096. @example
  2097. mysql> CREATE TABLE test (
  2098.            id INT NOT NULL,
  2099.            last_name CHAR(30) NOT NULL,
  2100.            first_name CHAR(30) NOT NULL,
  2101.            PRIMARY KEY (id),
  2102.            INDEX name (last_name,first_name));
  2103. @end example
  2104. Then the index @code{name} is an index over @code{last_name} and
  2105. @code{first_name}.  The index will be used for queries that specify
  2106. values in a known range for @code{last_name}, or for both @code{last_name}
  2107. and @code{first_name}.
  2108. Therefore, the @code{name} index will be used in the following queries:
  2109. @example
  2110. mysql> SELECT * FROM test WHERE last_name="Widenius";
  2111. mysql> SELECT * FROM test WHERE last_name="Widenius"
  2112.                           AND first_name="Michael";
  2113. mysql> SELECT * FROM test WHERE last_name="Widenius"
  2114.                           AND (first_name="Michael" OR first_name="Monty");
  2115. mysql> SELECT * FROM test WHERE last_name="Widenius"
  2116.                           AND first_name >="M" AND first_name < "N";
  2117. @end example
  2118. However, the @code{name} index will NOT be used in the following queries:
  2119. @example
  2120. mysql> SELECT * FROM test WHERE first_name="Michael";
  2121. mysql> SELECT * FROM test WHERE last_name="Widenius"
  2122.                           OR first_name="Michael";
  2123. @end example
  2124. For more information on the manner in which @strong{MySQL} uses indexes to
  2125. improve query performance, see @ref{MySQL indexes, , @strong{MySQL}
  2126. indexes}.
  2127. @cindex types, portability
  2128. @cindex portability, types
  2129. @cindex columns, other types
  2130. @node Other-vendor column types,  , Multiple-column indexes, Column types
  2131. @subsection Using Column Types from Other Database Engines
  2132. To make it easier to use code written for SQL implementations from other
  2133. vendors, @strong{MySQL} maps column types as shown in the table below.  These
  2134. mappings make it easier to move table definitions from other database engines
  2135. to @strong{MySQL}:
  2136. @multitable @columnfractions .4 .6
  2137. @item @strong{Other vendor type}        @tab @strong{MySQL type}
  2138. @item @code{BINARY(NUM)} @tab @code{CHAR(NUM) BINARY}
  2139. @item @code{CHAR VARYING(NUM)} @tab @code{VARCHAR(NUM)}
  2140. @item @code{FLOAT4} @tab @code{FLOAT}
  2141. @item @code{FLOAT8} @tab @code{DOUBLE}
  2142. @item @code{INT1} @tab @code{TINYINT}
  2143. @item @code{INT2} @tab @code{SMALLINT}
  2144. @item @code{INT3} @tab @code{MEDIUMINT}
  2145. @item @code{INT4} @tab @code{INT}
  2146. @item @code{INT8} @tab @code{BIGINT}
  2147. @item @code{LONG VARBINARY} @tab @code{MEDIUMBLOB}
  2148. @item @code{LONG VARCHAR} @tab @code{MEDIUMTEXT}
  2149. @item @code{MIDDLEINT} @tab @code{MEDIUMINT}
  2150. @item @code{VARBINARY(NUM)} @tab @code{VARCHAR(NUM) BINARY}
  2151. @end multitable
  2152. Column type mapping occurs at table creation time.  If you create a table
  2153. with types used by other vendors and then issue a @code{DESCRIBE tbl_name}
  2154. statement, @strong{MySQL} reports the table structure using the equivalent
  2155. @strong{MySQL} types.
  2156. @cindex functions for @code{SELECT} and @code{WHERE} clauses
  2157. @node Functions, CREATE DATABASE, Column types, Reference
  2158. @section Functions for Use in @code{SELECT} and @code{WHERE} Clauses
  2159. A @code{select_expression} or @code{where_definition} in a SQL statement
  2160. can consist of any expression using the functions described below.
  2161. An expression that contains @code{NULL} always produces a @code{NULL} value
  2162. unless otherwise indicated in the documentation for the operators and
  2163. functions involved in the expression.
  2164. @strong{NOTE:} There must be no whitespace between a function name and the
  2165. parenthesis following it. This helps the @strong{MySQL} parser distinguish
  2166. between function calls and references to tables or columns that happen to
  2167. have the same name as a function.  Spaces around arguments are permitted,
  2168. though.
  2169. You can force @strong{MySQL} to accept spaces after the function name by
  2170. starting @code{mysqld} with @code{--ansi} or using the
  2171. @code{CLIENT_IGNORE_SPACE} to @code{mysql_connect()}, but in this case all
  2172. function names will become reserved words. @xref{ANSI mode}.
  2173. @need 2000
  2174. For the sake of brevity, examples display the output from the @code{mysql}
  2175. program in abbreviated form.  So this:
  2176. @example
  2177. mysql> select MOD(29,9);
  2178. 1 rows in set (0.00 sec)
  2179. +-----------+
  2180. | mod(29,9) |
  2181. +-----------+
  2182. |         2 |
  2183. +-----------+
  2184. @end example
  2185. is displayed like this:
  2186. @example
  2187. mysql> select MOD(29,9);
  2188.         -> 2
  2189. @end example
  2190. @menu
  2191. * Grouping functions::          Grouping functions
  2192. * Arithmetic functions::        Normal arithmetic operations
  2193. * Bit functions::               Bit functions
  2194. * Logical functions::           Logical operations
  2195. * Comparison functions::        Comparison operators
  2196. * String comparison functions::  String comparison functions
  2197. * Casts::                       Cast operators
  2198. * Control flow functions::      Control flow functions
  2199. * Mathematical functions::      Mathematical functions
  2200. * String functions::            String functions
  2201. * Date and time functions::     Date and time functions
  2202. * Miscellaneous functions::     Miscellaneous functions
  2203. * Group by functions::          Functions for @code{GROUP BY} clause
  2204. @end menu
  2205. @cindex functions, grouping
  2206. @cindex grouping, expressions
  2207. @node Grouping functions, Arithmetic functions, Functions, Functions
  2208. @subsection Grouping Functions
  2209. @table @code
  2210. @findex () (parentheses)
  2211. @findex parentheses ( and )
  2212. @item ( ... )
  2213. Parentheses. Use these to force the order of evaluation in an expression:
  2214. @example
  2215. mysql> select 1+2*3;
  2216.         -> 7
  2217. mysql> select (1+2)*3;
  2218.         -> 9
  2219. @end example
  2220. @end table
  2221. @node Arithmetic functions, Bit functions, Grouping functions, Functions
  2222. @subsection Normal Arithmetic Operations
  2223. The usual arithmetic operators are available. Note that in the case of
  2224. @samp{-}, @samp{+}, and @samp{*}, the result is calculated with
  2225. @code{BIGINT} (64-bit) precision if both arguments are integers!
  2226. @cindex operations, arithmetic
  2227. @cindex arithmetic expressions
  2228. @table @code
  2229. @findex + (addition)
  2230. @findex addition (+)
  2231. @item +
  2232. Addition:
  2233. @example
  2234. mysql> select 3+5;
  2235.         -> 8
  2236. @end example
  2237. @findex - (subtraction)
  2238. @findex subtraction (-)
  2239. @item -
  2240. Subtraction:
  2241. @example
  2242. mysql> select 3-5;
  2243.         -> -2
  2244. @end example
  2245. @findex * (multiplication)
  2246. @findex multiplication (*)
  2247. @item *
  2248. Multiplication:
  2249. @example
  2250. mysql> select 3*5;
  2251.         -> 15
  2252. mysql> select 18014398509481984*18014398509481984.0;
  2253.         -> 324518553658426726783156020576256.0
  2254. mysql> select 18014398509481984*18014398509481984;
  2255.         -> 0
  2256. @end example
  2257. The result of the last expression is incorrect because the result of the integer
  2258. multiplication exceeds the 64-bit range of @code{BIGINT} calculations.
  2259. @findex / (division)
  2260. @findex division (/)
  2261. @item /
  2262. Division:
  2263. @example
  2264. mysql> select 3/5;
  2265.         -> 0.60
  2266. @end example
  2267. Division by zero produces a @code{NULL} result:
  2268. @example
  2269. mysql> select 102/(1-1);
  2270.         -> NULL
  2271. @end example
  2272. A division will be calculated with @code{BIGINT} arithmetic only if performed
  2273. in a context where its result is converted to an integer!
  2274. @end table
  2275. @findex arithmetic functions
  2276. @findex bit functions
  2277. @findex functions, arithmetic
  2278. @findex functions, bit
  2279. @node Bit functions, Logical functions, Arithmetic functions, Functions
  2280. @subsection Bit Functions
  2281. @strong{MySQL} uses @code{BIGINT} (64-bit) arithmetic for bit operations, so
  2282. these operators have a maximum range of 64 bits.
  2283. @table @code
  2284. @findex | (bitwise OR)
  2285. @findex OR, bitwise
  2286. @item |
  2287. Bitwise OR:
  2288. @example
  2289. mysql> select 29 | 15;
  2290.         -> 31
  2291. @end example
  2292. @findex & (bitwise AND)
  2293. @findex AND, bitwise
  2294. @item &
  2295. Bitwise AND:
  2296. @example
  2297. mysql> select 29 & 15;
  2298.         -> 13
  2299. @end example
  2300. @findex << (left shift)
  2301. @item <<
  2302. Shifts a longlong (@code{BIGINT}) number to the left:
  2303. @example
  2304. mysql> select 1 << 2
  2305.         -> 4
  2306. @end example
  2307. @findex >> (right shift)
  2308. @item >>
  2309. Shifts a longlong (@code{BIGINT}) number to the right:
  2310. @example
  2311. mysql> select 4 >> 2
  2312.         -> 1
  2313. @end example
  2314. @findex ~
  2315. @item ~
  2316. Invert all bits:
  2317. @example
  2318. mysql> select 5 & ~1
  2319.         -> 4
  2320. @end example
  2321. @findex BIT_COUNT()
  2322. @item BIT_COUNT(N)
  2323. Returns the number of bits that are set in the argument @code{N}:
  2324. @example
  2325. mysql> select BIT_COUNT(29);
  2326.         -> 4
  2327. @end example
  2328. @end table
  2329. @findex Logical functions
  2330. @findex Functions, logical
  2331. @node Logical functions, Comparison functions, Bit functions, Functions
  2332. @subsection Logical Operations
  2333. All logical functions return @code{1} (TRUE), @code{0} (FALSE) or
  2334. @code{NULL} (unknown, which is in most cases the same as FALSE):
  2335. @table @code
  2336. @findex NOT, logical
  2337. @findex ! (logical NOT)
  2338. @item NOT
  2339. @itemx !
  2340. Logical NOT. Returns @code{1} if the argument is @code{0}, otherwise returns
  2341. @code{0}.
  2342. Exception: @code{NOT NULL} returns @code{NULL}:
  2343. @example
  2344. mysql> select NOT 1;
  2345.         -> 0
  2346. mysql> select NOT NULL;
  2347.         -> NULL
  2348. mysql> select ! (1+1);
  2349.         -> 0
  2350. mysql> select ! 1+1;
  2351.         -> 1
  2352. @end example
  2353. The last example returns @code{1} because the expression evaluates
  2354. the same way as @code{(!1)+1}.
  2355. @findex OR, logical
  2356. @findex || (logical OR)
  2357. @item OR
  2358. @itemx ||
  2359. Logical OR. Returns @code{1} if either argument is not @code{0} and not
  2360. @code{NULL}:
  2361. @example
  2362. mysql> select 1 || 0;
  2363.         -> 1
  2364. mysql> select 0 || 0;
  2365.         -> 0
  2366. mysql> select 1 || NULL;
  2367.         -> 1
  2368. @end example
  2369. @findex AND, logical
  2370. @findex && (logical AND)
  2371. @item AND
  2372. @itemx &&
  2373. Logical AND. Returns @code{0} if either argument is @code{0} or @code{NULL},
  2374. otherwise returns @code{1}:
  2375. @example
  2376. mysql> select 1 && NULL;
  2377.         -> 0
  2378. mysql> select 1 && 0;
  2379.         -> 0
  2380. @end example
  2381. @end table
  2382. @cindex casts
  2383. @cindex type conversions
  2384. @findex comparison operators
  2385. @node Comparison functions, String comparison functions, Logical functions, Functions
  2386. @subsection Comparison Operators
  2387. Comparison operations result in a value of @code{1} (TRUE), @code{0} (FALSE),
  2388. or @code{NULL}. These functions work for both numbers and strings.  Strings
  2389. are automatically converted to numbers and numbers to strings as needed (as
  2390. in Perl).
  2391. @strong{MySQL} performs comparisons using the following
  2392. rules:
  2393. @itemize @bullet
  2394. @item
  2395. If one or both arguments are @code{NULL}, the result of the comparison
  2396. is @code{NULL}, except for the @code{<=>} operator.
  2397. @item
  2398. If both arguments in a comparison operation are strings, they are compared as
  2399. strings.
  2400. @item
  2401. If both arguments are integers, they are compared as integers.
  2402. @item
  2403. Hexadecimal values are treated as binary strings if not compared to a number.
  2404. @item
  2405. @cindex ODBC compatibility
  2406. @cindex compatibility, with ODBC
  2407. If one of the arguments is a @code{TIMESTAMP} or @code{DATETIME} column and
  2408. the other argument is a constant, the constant is converted
  2409. to a timestamp before the comparison is performed. This is done to be more
  2410. ODBC-friendly.
  2411. @item
  2412. In all other cases, the arguments are compared as floating-point (real)
  2413. numbers.
  2414. @end itemize
  2415. By default, string comparisons are done in case-independent fashion using the
  2416. current character set (ISO-8859-1 Latin1 by default, which also works
  2417. excellently for English).
  2418. The examples below illustrate conversion of strings to numbers for comparison
  2419. operations:
  2420. @example
  2421. mysql> SELECT 1 > '6x';
  2422.          -> 0
  2423. mysql> SELECT 7 > '6x';
  2424.          -> 1
  2425. mysql> SELECT 0 > 'x6';
  2426.          -> 0
  2427. mysql> SELECT 0 = 'x6';
  2428.          -> 1
  2429. @end example
  2430. @table @code
  2431. @findex = (equal)
  2432. @findex equal (=)
  2433. @item =
  2434. Equal:
  2435. @example
  2436. mysql> select 1 = 0;
  2437.         -> 0
  2438. mysql> select '0' = 0;
  2439.         -> 1
  2440. mysql> select '0.0' = 0;
  2441.         -> 1
  2442. mysql> select '0.01' = 0;
  2443.         -> 0
  2444. mysql> select '.01' = 0.01;
  2445.         -> 1
  2446. @end example
  2447. @findex <> (not equal)
  2448. @findex not equal (<>)
  2449. @findex != (not equal)
  2450. @findex not equal (!=)
  2451. @item <>
  2452. @itemx !=
  2453. Not equal:
  2454. @example
  2455. mysql> select '.01' <> '0.01';
  2456.         -> 1
  2457. mysql> select .01 <> '0.01';
  2458.         -> 0
  2459. mysql> select 'zapp' <> 'zappp';
  2460.         -> 1
  2461. @end example
  2462. @findex <= (less than or equal)
  2463. @findex less than or equal (<=)
  2464. @item <=
  2465. Less than or equal:
  2466. @example
  2467. mysql> select 0.1 <= 2;
  2468.         -> 1
  2469. @end example
  2470. @findex < (less than)
  2471. @findex less than (<)
  2472. @item <
  2473. Less than:
  2474. @example
  2475. mysql> select 2 <= 2;
  2476.         -> 1
  2477. @end example
  2478. @findex >= (greater than or equal)
  2479. @findex greater than or equal (>=)
  2480. @item >=
  2481. Greater than or equal:
  2482. @example
  2483. mysql> select 2 >= 2;
  2484.         -> 1
  2485. @end example
  2486. @findex > (greater than)
  2487. @findex greater than (>)
  2488. @item >
  2489. Greater than:
  2490. @example
  2491. mysql> select 2 > 2;
  2492.         -> 0
  2493. @end example
  2494. @findex <=> (Equal to)
  2495. @item <=>
  2496. Null safe equal:
  2497. @example
  2498. mysql> select 1 <=> 1, NULL <=> NULL, 1 <=> NULL;
  2499.         -> 1 1 0
  2500. @end example
  2501. @findex IS NULL
  2502. @findex IS NOT NULL
  2503. @item IS NULL
  2504. @itemx IS NOT NULL
  2505. Test whether or not a value is or is not @code{NULL}:
  2506. @example
  2507. mysql> select 1 IS NULL, 0 IS NULL, NULL IS NULL:
  2508.         -> 0 0 1
  2509. mysql> select 1 IS NOT NULL, 0 IS NOT NULL, NULL IS NOT NULL;
  2510.         -> 1 1 0
  2511. @end example
  2512. @findex BETWEEN ... AND
  2513. @item expr BETWEEN min AND max
  2514. If @code{expr} is greater than or equal to @code{min} and @code{expr} is
  2515. less than or equal to @code{max}, @code{BETWEEN} returns @code{1},
  2516. otherwise it returns @code{0}.  This is equivalent to the expression
  2517. @code{(min <= expr AND expr <= max)} if all the arguments are of the
  2518. same type.  The first argument (@code{expr}) determines how the
  2519. comparison is performed as follows:
  2520. @itemize @bullet
  2521. @item
  2522. If @code{expr} is a @code{TIMESTAMP}, @code{DATE}, or @code{DATETIME}
  2523. column, @code{MIN()} and @code{MAX()} are formatted to the same format if
  2524. they are constants.
  2525. @item
  2526. If @code{expr} is a case-insensitive string expression, a case-insensitive
  2527. string comparison is done.
  2528. @item
  2529. If @code{expr} is a case-sensitive string expression, a case-sensitive
  2530. string comparison is done.
  2531. @item
  2532. If @code{expr} is an integer expression, an integer comparison is done.
  2533. @item
  2534. Otherwise, a floating-point (real) comparison is done.
  2535. @end itemize
  2536. @example
  2537. mysql> select 1 BETWEEN 2 AND 3;
  2538.         -> 0
  2539. mysql> select 'b' BETWEEN 'a' AND 'c';
  2540.         -> 1
  2541. mysql> select 2 BETWEEN 2 AND '3';
  2542.         -> 1
  2543. mysql> select 2 BETWEEN 2 AND 'x-3';
  2544.         -> 0
  2545. @end example
  2546. @findex IN
  2547. @item expr IN (value,...)
  2548. Returns @code{1} if @code{expr} is any of the values in the @code{IN} list,
  2549. else returns @code{0}.  If all values are constants, then all values are
  2550. evaluated according to the type of @code{expr} and sorted. The search for the
  2551. item is then done using a binary search. This means @code{IN} is very quick
  2552. if the @code{IN} value list consists entirely of constants.  If @code{expr}
  2553. is a case-sensitive string expression, the string comparison is performed in
  2554. case-sensitive fashion:
  2555. @example
  2556. mysql> select 2 IN (0,3,5,'wefwf');
  2557.         -> 0
  2558. mysql> select 'wefwf' IN (0,3,5,'wefwf');
  2559.         -> 1
  2560. @end example
  2561. @findex NOT IN
  2562. @item expr NOT IN (value,...)
  2563. Same as @code{NOT (expr IN (value,...))}.
  2564. @findex ISNULL()
  2565. @item ISNULL(expr)
  2566. If @code{expr} is @code{NULL}, @code{ISNULL()} returns @code{1}, otherwise
  2567. it returns @code{0}:
  2568. @example
  2569. mysql> select ISNULL(1+1);
  2570.         -> 0
  2571. mysql> select ISNULL(1/0);
  2572.         -> 1
  2573. @end example
  2574. Note that a comparison of @code{NULL} values using @code{=} will always be
  2575. false!
  2576. @findex COALESCE()
  2577. @item COALESCE(list)
  2578. Returns first non-@code{NULL} element in list:
  2579. @example
  2580. mysql> select COALESCE(NULL,1);
  2581.         -> 1
  2582. mysql> select COALESCE(NULL,NULL,NULL);
  2583.         -> NULL
  2584. @end example
  2585. @findex INTERVAL()
  2586. @item INTERVAL(N,N1,N2,N3,...)
  2587. Returns @code{0} if @code{N} < @code{N1}, @code{1} if @code{N} < @code{N2}
  2588. and so on. All arguments are treated as integers.  It is required that
  2589. @code{N1} < @code{N2} < @code{N3} < @code{...} < @code{Nn} for this function
  2590. to work correctly. This is because a binary search is used (very fast):
  2591. @example
  2592. mysql> select INTERVAL(23, 1, 15, 17, 30, 44, 200);
  2593.         -> 3
  2594. mysql> select INTERVAL(10, 1, 10, 100, 1000);
  2595.         -> 2
  2596. mysql> select INTERVAL(22, 23, 30, 44, 200);
  2597.         -> 0
  2598. @end example
  2599. @end table
  2600. @findex string comparison functions
  2601. @findex functions, string comparison
  2602. @node String comparison functions, Casts, Comparison functions, Functions
  2603. @subsection String Comparison Functions
  2604. @cindex case sensitivity, in string comparisons
  2605. @cindex string comparisons, case sensitivity
  2606. Normally, if any expression in a string comparison is case sensitive, the
  2607. comparison is performed in case-sensitive fashion.
  2608. @table @code
  2609. @findex LIKE
  2610. @item expr LIKE pat [ESCAPE 'escape-char']
  2611. Pattern matching using
  2612. SQL simple regular expression comparison. Returns @code{1} (TRUE) or @code{0}
  2613. (FALSE).  With @code{LIKE} you can use the following two wild-card characters
  2614. in the pattern:
  2615. @multitable @columnfractions .1 .9
  2616. @item @code{%} @tab Matches any number of characters, even zero characters
  2617. @item @code{_} @tab Matches exactly one character
  2618. @end multitable
  2619. @example
  2620. mysql> select 'David!' LIKE 'David_';
  2621.         -> 1
  2622. mysql> select 'David!' LIKE '%D%v%';
  2623.         -> 1
  2624. @end example
  2625. To test for literal instances of a wild-card character, precede the character
  2626. with the escape character.  If you don't specify the @code{ESCAPE} character,
  2627. @samp{} is assumed:
  2628. @multitable @columnfractions .1 .9
  2629. @item @code{%} @tab Matches one @code{%} character
  2630. @item @code{_} @tab Matches one @code{_} character
  2631. @end multitable
  2632. @example
  2633. mysql> select 'David!' LIKE 'David_';
  2634.         -> 0
  2635. mysql> select 'David_' LIKE 'David_';
  2636.         -> 1
  2637. @end example
  2638. To specify a different escape character, use the @code{ESCAPE} clause:
  2639. @example
  2640. mysql> select 'David_' LIKE 'David|_' ESCAPE '|';
  2641.         -> 1
  2642. @end example
  2643. @code{LIKE} is allowed on numeric expressions! (This is a @strong{MySQL}
  2644. extension to the ANSI SQL @code{LIKE}.)
  2645. @example
  2646. mysql> select 10 LIKE '1%';
  2647.         -> 1
  2648. @end example
  2649. Note: Because @strong{MySQL} uses the C escape syntax in strings (for example,
  2650. @samp{n}), you must double any @samp{} that you use in your @code{LIKE}
  2651. strings.  For example, to search for @samp{n}, specify it as @samp{\n}.  To
  2652. search for @samp{}, specify it as @samp{\\} (the backslashes are stripped
  2653. once by the parser and another time when the pattern match is done, leaving
  2654. a single backslash to be matched).